Author: ken
Date: 2009-04-26 14:53:33 -0600 (Sun, 26 Apr 2009)
New Revision: 2066
Added:
trunk/udev/udev-130-security_fixes-1.patch
Log:
Patch for udev-130 which hopefully fixes both the recent vulnerabilities.
Added: trunk/udev/udev-130-security_fixes-1.patch
===================================================================
--- trunk/udev/udev-130-security_fixes-1.patch (rev 0)
+++ trunk/udev/udev-130-security_fixes-1.patch 2009-04-26 20:53:33 UTC (rev
2066)
@@ -0,0 +1,62 @@
+Submitted By: Ken Moffat <ken at linuxfromscratch dot org>
+Date: 2009-04-24
+Initial Package Version: 130
+Upstream Status: From upstream, commits
e86a923d508c2aed371cdd958ce82489cf2ab615 - as backported to udev-124 by fedora
- and 662c3110803bd8c1aedacc36788e6fd028944314
+Origin: Scott James Remnant, Kay Sievers
+Description: These fix CVE-2009-1185 (netlink messages can be received from
+local users, allowing privilege escalation) and CVE-2009-1186 (potential
+buffer overflow).
+
+diff -Naur a/udev/udevd.c b/udev/udevd.c
+--- a/udev/udevd.c 2008-10-04 12:52:21.000000000 +0100
++++ b/udev/udevd.c 2009-04-24 16:54:09.000000000 +0100
+@@ -613,16 +613,34 @@
+ struct udevd_uevent_msg *msg;
+ int bufpos;
+ ssize_t size;
++ struct sockaddr_nl snl;
++ struct msghdr smsg;
++ struct iovec iov;
+ static char buffer[UEVENT_BUFFER_SIZE+512];
+ char *pos;
+
+- size = recv(uevent_netlink_sock, &buffer, sizeof(buffer), 0);
++ iov.iov_base = buffer;
++ iov.iov_len = sizeof(buffer);
++
++ memset(&smsg, 0x00, sizeof(struct msghdr));
++ smsg.msg_name = &snl;
++ smsg.msg_namelen = sizeof(struct sockaddr_nl);
++ smsg.msg_iov = &iov;
++ smsg.msg_iovlen = 1;
++
++ size = recvmsg(uevent_netlink_sock, &smsg, 0);
+ if (size < 0) {
+ if (errno != EINTR)
+ err(udev, "unable to receive kernel netlink message:
%m\n");
+ return NULL;
+ }
+
++ if ((snl.nl_groups != 1) || (snl.nl_pid != 0)) {
++ info("ignored netlink message from invalid group/sender
%d/%d\n",
++ snl.nl_groups, snl.nl_pid);
++ return NULL;
++ }
++
+ if ((size_t)size > sizeof(buffer)-1)
+ size = sizeof(buffer)-1;
+ buffer[size] = '\0';
+
+diff --git a/udev/lib/libudev-util.c b/udev/lib/libudev-util.c
+index b628fdd..a40be06 100644
+--- a/udev/lib/libudev-util.c
++++ b/udev/lib/libudev-util.c
+@@ -103,7 +103,7 @@ int util_log_priority(const char *priority)
+
+ size_t util_path_encode(char *s, size_t len)
+ {
+- char t[(len * 3)+1];
++ char t[(len * 4)+1];
+ size_t i, j;
+
+ for (i = 0, j = 0; s[i] != '\0'; i++) {
--
http://linuxfromscratch.org/mailman/listinfo/patches
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page