|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v6 23/24] xsplice: Prevent duplicate payloads from being loaded.
From: Ross Lagerwall <ross.lagerwall@xxxxxxxxxx>
Signed-off-by: Ross Lagerwall <ross.lagerwall@xxxxxxxxxx>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
---
Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Cc: Jan Beulich <jbeulich@xxxxxxxx>
Cc: Keir Fraser <keir@xxxxxxx>
Cc: Tim Deegan <tim@xxxxxxx>
v6: Drop recursive lock - also now the caller is holding the lock
Move the code up in the code above.
---
---
xen/common/xsplice.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/xen/common/xsplice.c b/xen/common/xsplice.c
index b7f7a18..c50b00c 100644
--- a/xen/common/xsplice.c
+++ b/xen/common/xsplice.c
@@ -512,7 +512,9 @@ static int prepare_payload(struct payload *payload,
sec = xsplice_elf_sec_by_name(elf, ".note.gnu.build-id");
if ( sec )
{
+ struct payload *data;
n = sec->load_addr;
+
if ( sec->sec->sh_size <= sizeof(*n) )
return -EINVAL;
@@ -522,6 +524,20 @@ static int prepare_payload(struct payload *payload,
if ( !payload->id.len || !payload->id.p )
return -EINVAL;
+
+ /* Make sure it is not a duplicate. */
+ list_for_each_entry ( data, &payload_list, list )
+ {
+ /* No way _this_ payload is on the list. */
+ ASSERT(data != payload);
+ if ( data->id.len &&
+ !memcmp(data->id.p, payload->id.p, data->id.len) )
+ {
+ dprintk(XENLOG_DEBUG, XSPLICE "%s: Already loaded as %s!\n",
+ elf->name, data->name);
+ return -EEXIST;
+ }
+ }
}
sec = xsplice_elf_sec_by_name(elf, ".xsplice.depends");
--
2.5.0
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |