]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
tools: hv: Netlink source address validation allows DoS
authorTomas Hozza <thozza@redhat.com>
Thu, 8 Nov 2012 09:53:29 +0000 (10:53 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 28 Mar 2013 19:12:28 +0000 (12:12 -0700)
commit 95a69adab9acfc3981c504737a2b6578e4d846ef upstream.

The source code without this patch caused hypervkvpd to exit when it processed
a spoofed Netlink packet which has been sent from an untrusted local user.
Now Netlink messages with a non-zero nl_pid source address are ignored
and a warning is printed into the syslog.

Signed-off-by: Tomas Hozza <thozza@redhat.com>
Acked-by: K. Y. Srinivasan <kys@microsoft.com>
Cc: Ben Hutchings <ben@decadent.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
tools/hv/hv_kvp_daemon.c

index 2984ffb7bac7aa0bae79b5330320915640370820..60a8e29c4faef75714d4431b6334ccf26b760e7b 100644 (file)
@@ -727,13 +727,19 @@ int main(void)
                len = recvfrom(fd, kvp_recv_buffer, sizeof(kvp_recv_buffer), 0,
                                addr_p, &addr_l);
 
-               if (len < 0 || addr.nl_pid) {
+               if (len < 0) {
                        syslog(LOG_ERR, "recvfrom failed; pid:%u error:%d %s",
                                        addr.nl_pid, errno, strerror(errno));
                        close(fd);
                        return -1;
                }
 
+               if (addr.nl_pid) {
+                       syslog(LOG_WARNING, "Received packet from untrusted pid:%u",
+                                       addr.nl_pid);
+                       continue;
+               }
+
                incoming_msg = (struct nlmsghdr *)kvp_recv_buffer;
                incoming_cn_msg = (struct cn_msg *)NLMSG_DATA(incoming_msg);
                hv_msg = (struct hv_kvp_msg *)incoming_cn_msg->data;