]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-daemon: wipe out memory before using CMSG_NXTHDR() 1540/head
authorDaniel Mack <daniel@zonque.org>
Mon, 12 Oct 2015 12:44:26 +0000 (14:44 +0200)
committerDaniel Mack <daniel@zonque.org>
Mon, 12 Oct 2015 13:15:25 +0000 (15:15 +0200)
CMSG_NXTHDR() checks for cmsg->cmsg_len *after* it increased the pointer.
While this makes sense for parsing received messages, that's a pitfall
for code crafting messages with this macro.

Wipe out the allocated memory to fix this.

src/libsystemd/sd-daemon/sd-daemon.c

index 582fb535290a126813eb2dd38fc5c153de3d5685..ae534ba5b9420b3b8ddde060fff6341842234e57 100644 (file)
@@ -454,7 +454,7 @@ _public_ int sd_pid_notify_with_fds(pid_t pid, int unset_environment, const char
                         (n_fds > 0 ? CMSG_SPACE(sizeof(int) * n_fds) : 0) +
                         (have_pid ? CMSG_SPACE(sizeof(struct ucred)) : 0);
 
-                msghdr.msg_control = alloca(msghdr.msg_controllen);
+                msghdr.msg_control = alloca0(msghdr.msg_controllen);
 
                 cmsg = CMSG_FIRSTHDR(&msghdr);
                 if (n_fds > 0) {