From: Lennart Poettering Date: Wed, 26 Nov 2014 01:54:11 +0000 (+0100) Subject: sd-bus: don't clobber return values on failure in bus_kernel_open_bus_fd() X-Git-Tag: v218~345 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=8aee3fc7eae2e60592bac838bc7268720e1d489c;p=elogind.git sd-bus: don't clobber return values on failure in bus_kernel_open_bus_fd() --- diff --git a/src/libsystemd/sd-bus/bus-kernel.c b/src/libsystemd/sd-bus/bus-kernel.c index aa4b4240d..6baa84c04 100644 --- a/src/libsystemd/sd-bus/bus-kernel.c +++ b/src/libsystemd/sd-bus/bus-kernel.c @@ -1514,20 +1514,29 @@ int bus_kernel_open_bus_fd(const char *bus, char **path) { int fd; size_t len; + assert(bus); + len = strlen("/sys/fs/kdbus/") + DECIMAL_STR_MAX(uid_t) + 1 + strlen(bus) + strlen("/bus") + 1; if (path) { - p = malloc(len); + p = new(char, len); if (!p) return -ENOMEM; - *path = p; } else - p = alloca(len); + p = newa(char, len); + sprintf(p, "/sys/fs/kdbus/" UID_FMT "-%s/bus", getuid(), bus); fd = open(p, O_RDWR|O_NOCTTY|O_CLOEXEC); - if (fd < 0) + if (fd < 0) { + if (path) + free(p); + return -errno; + } + + if (path) + *path = p; return fd; }