From 8aee3fc7eae2e60592bac838bc7268720e1d489c Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 26 Nov 2014 02:54:11 +0100 Subject: [PATCH] sd-bus: don't clobber return values on failure in bus_kernel_open_bus_fd() --- src/libsystemd/sd-bus/bus-kernel.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) 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; } -- 2.30.2