From: Ross Lagerwall <ross.lagerw...@citrix.com> Signed-off-by: Ross Lagerwall <ross.lagerw...@citrix.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.w...@oracle.com> --- Cc: Ian Jackson <ian.jack...@eu.citrix.com> Cc: Jan Beulich <jbeul...@suse.com> Cc: Keir Fraser <k...@xen.org> Cc: Tim Deegan <t...@xen.org> --- --- xen/common/xsplice.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)
diff --git a/xen/common/xsplice.c b/xen/common/xsplice.c index e8af051..b745c1b 100644 --- a/xen/common/xsplice.c +++ b/xen/common/xsplice.c @@ -501,6 +501,27 @@ static int prepare_payload(struct payload *payload, if ( !payload->id.len || !payload->id.p ) return -EINVAL; } + /* Make sure it is not a duplicate. */ + if ( payload->id.len ) + { + struct payload *data; + + spin_lock_recursive(&payload_lock); + list_for_each_entry ( data, &payload_list, list ) + { + /* No way payload is on the list. */ + ASSERT( data != payload ); + if ( data->id.len && + !memcmp(data->id.p, payload->id.p, data->id.len) ) + { + spin_unlock_recursive(&payload_lock); + dprintk(XENLOG_DEBUG, "%s%s: Already loaded as %s!\n", + XSPLICE, elf->name, data->name); + return -EEXIST; + } + } + spin_unlock_recursive(&payload_lock); + } sec = xsplice_elf_sec_by_name(elf, ".xsplice.depends"); { -- 2.5.0 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel