X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Flibsystemd%2Fsd-bus%2Fbus-kernel.c;h=2294eac97eb6582427e2af18219039a5603f532a;hp=9e74530a362d4df1aefe856c9597e62c995386ff;hb=606303a93ea52a70ebba55bb3152820e630f2164;hpb=9d3dec15ae8ac6153038c9b994e6c4fc22045180 diff --git a/src/libsystemd/sd-bus/bus-kernel.c b/src/libsystemd/sd-bus/bus-kernel.c index 9e74530a3..2294eac97 100644 --- a/src/libsystemd/sd-bus/bus-kernel.c +++ b/src/libsystemd/sd-bus/bus-kernel.c @@ -748,10 +748,21 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k) { case KDBUS_ITEM_AUXGROUPS: if (bus->creds_mask & SD_BUS_CREDS_SUPPLEMENTARY_GIDS) { - assert_cc(sizeof(gid_t) == sizeof(uint32_t)); + size_t i, n; + gid_t *g; - m->creds.n_supplementary_gids = (d->size - offsetof(struct kdbus_item, data32)) / sizeof(uint32_t); - m->creds.supplementary_gids = (gid_t*) d->data32; + n = (d->size - offsetof(struct kdbus_item, data64)) / sizeof(uint64_t); + g = new(gid_t, n); + if (!g) { + r = -ENOMEM; + goto fail; + } + + for (i = 0; i < n; i++) + g[i] = d->data64[i]; + + m->creds.supplementary_gids = g; + m->creds.n_supplementary_gids = n; m->creds.mask |= SD_BUS_CREDS_SUPPLEMENTARY_GIDS; }