@@ -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");
{