From: Lennart Poettering Date: Tue, 25 Nov 2014 12:23:44 +0000 (+0100) Subject: sd-bus: fix error handling when receiving invalid service name X-Git-Tag: v218~359 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=9f6dfd0624e44002e407a72acb0c15b7177e9a9f;hp=6dfcc64bb5c67ec2e026715146c19acf93dab31a sd-bus: fix error handling when receiving invalid service name Also, properly keep track of incoming additional service names. --- diff --git a/src/libsystemd/sd-bus/bus-kernel.c b/src/libsystemd/sd-bus/bus-kernel.c index a8adb9c56..27a59109b 100644 --- a/src/libsystemd/sd-bus/bus-kernel.c +++ b/src/libsystemd/sd-bus/bus-kernel.c @@ -646,19 +646,27 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k) { break; case KDBUS_ITEM_DST_NAME: - if (!service_name_is_valid(d->str)) - return -EBADMSG; + if (!service_name_is_valid(d->str)) { + r = -EBADMSG; + goto fail; + } destination = d->str; break; case KDBUS_ITEM_OWNED_NAME: - if (!service_name_is_valid(d->name.name)) - return -EBADMSG; - - r = strv_extend(&m->creds.well_known_names, d->name.name); - if (r < 0) + if (!service_name_is_valid(d->name.name)) { + r = -EBADMSG; goto fail; + } + + if (bus->creds_mask & SD_BUS_CREDS_WELL_KNOWN_NAMES) { + r = strv_extend(&m->creds.well_known_names, d->name.name); + if (r < 0) + goto fail; + + m->creds.mask |= SD_BUS_CREDS_WELL_KNOWN_NAMES; + } break; case KDBUS_ITEM_CONN_DESCRIPTION: