[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH v10 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>
Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>

---
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.
v7: Add Andrew's Reviewed-by
v9: Add const on struct payload.
    Check data->id.len != payload->id.len in the loop
v10:
    Check data->id.len == payload->id.len && in the loop
    Add Jan's Reviewed-by
---
---
 xen/common/xsplice.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/xen/common/xsplice.c b/xen/common/xsplice.c
index 581f48b..76ecfc3 100644
--- a/xen/common/xsplice.c
+++ b/xen/common/xsplice.c
@@ -521,6 +521,8 @@ static int prepare_payload(struct payload *payload,
     sec = xsplice_elf_sec_by_name(elf, ELF_BUILD_ID_NOTE);
     if ( sec )
     {
+        const struct payload *data;
+
         n = sec->load_addr;
 
         if ( sec->sec->sh_size <= sizeof(*n) )
@@ -532,6 +534,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 == payload->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, ELF_XSPLICE_DEPENDS);
-- 
2.5.0


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.