[systemd-commits] src/libsystemd

Daniel Mack zonque at kemper.freedesktop.org
Tue Oct 7 02:38:41 PDT 2014


 src/libsystemd/sd-bus/bus-kernel.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

New commits:
commit ca794c8e9583eb660f535af32c8c8281a284f270
Author: Daniel Mack <daniel at zonque.org>
Date:   Tue Oct 7 11:32:07 2014 +0200

    sd-bus: fix use-after-free in close_kdbus_msg()
    
    Walk the items first, then free the memory of the message.
    
    Also, while at it, make coverity happy with an explicit (void) prefix.
    We intentionally ignore the return value here.

diff --git a/src/libsystemd/sd-bus/bus-kernel.c b/src/libsystemd/sd-bus/bus-kernel.c
index 9240713..b431d78 100644
--- a/src/libsystemd/sd-bus/bus-kernel.c
+++ b/src/libsystemd/sd-bus/bus-kernel.c
@@ -808,8 +808,6 @@ static void close_kdbus_msg(sd_bus *bus, struct kdbus_msg *k) {
         cmd.flags = 0;
         cmd.offset = (uint8_t *)k - (uint8_t *)bus->kdbus_buffer;
 
-        ioctl(bus->input_fd, KDBUS_CMD_FREE, &cmd);
-
         KDBUS_ITEM_FOREACH(d, k, items) {
 
                 if (d->type == KDBUS_ITEM_FDS)
@@ -817,6 +815,8 @@ static void close_kdbus_msg(sd_bus *bus, struct kdbus_msg *k) {
                 else if (d->type == KDBUS_ITEM_PAYLOAD_MEMFD)
                         safe_close(d->memfd.fd);
         }
+
+        (void) ioctl(bus->input_fd, KDBUS_CMD_FREE, &cmd);
 }
 
 int bus_kernel_write_message(sd_bus *bus, sd_bus_message *m, bool hint_sync_call) {



More information about the systemd-commits mailing list