xsplice: Prevent duplicate payloads from being loaded.

Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Release-acked-by: Wei Liu <wei.liu2@citrix.com>
This commit is contained in:
Ross Lagerwall authored and Konrad Rzeszutek Wilk committed 2016-04-29 03:59:33 -04:00
1 parent 48a312d1ad
commit a946b8de14
1 file changed
+16
+16
View File
@@ -518,6 +518,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) )
@@ -529,6 +531,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);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.