SD_BUS_CREDS_INHERITABLE_CAPS | SD_BUS_CREDS_BOUNDING_CAPS) & mask;
if (m) {
- c->capability_size = item->size - KDBUS_ITEM_HEADER_SIZE;
- c->capability = memdup(item->data, c->capability_size);
+ c->capability_size = item->size - offsetof(struct kdbus_item, caps.caps);
+ c->capability = memdup(item->caps.caps, c->capability_size);
if (!c->capability)
return -ENOMEM;
if (!isempty(bus->label) && (mask & SD_BUS_CREDS_SELINUX_CONTEXT)) {
c->label = strdup(bus->label);
- if (!c->label) {
- sd_bus_creds_unref(c);
+ if (!c->label)
return -ENOMEM;
- }
c->mask |= SD_BUS_CREDS_SELINUX_CONTEXT;
}
return r;
} else {
r = bus_creds_add_more(c, mask, pid, 0);
- if (r < 0) {
- sd_bus_creds_unref(c);
+ if (r < 0)
return r;
- }
}
*ret = c;
+ c = NULL;
return 0;
}