diff --git a/full-kernel-version.patch b/full-kernel-version.patch deleted file mode 100644 index a555544..0000000 --- a/full-kernel-version.patch +++ /dev/null @@ -1,60 +0,0 @@ -From: "K. Y. Srinivasan" -Subject: [PATCH 1/1] tools: hv: Return the full kernel version -Date: Fri, 12 Oct 2012 16:40:10 -0700 -Message-Id: <1350085210-11108-1-git-send-email-kys@microsoft.com> - -Currently, we are returning the same string for both OSBuildNumber -and OSVersion keys. Return the full uts string for the OSBuild -key since Windows does not impose any restrictions on this. - -Signed-off-by: K. Y. Srinivasan -Reviewed-by: Haiyang Zhang -Reported-by: Claudio Latini ---- - tools/hv/hv_kvp_daemon.c | 9 ++++++--- - 1 files changed, 6 insertions(+), 3 deletions(-) - -diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c -index 5959aff..6c7bcb9 100644 ---- a/tools/hv/hv_kvp_daemon.c -+++ b/tools/hv/hv_kvp_daemon.c -@@ -88,6 +88,7 @@ static char *os_major = ""; - static char *os_minor = ""; - static char *processor_arch; - static char *os_build; -+static char *os_version; - static char *lic_version = "Unknown version"; - static struct utsname uts_buf; - -@@ -453,7 +454,9 @@ void kvp_get_os_info(void) - char *p, buf[512]; - - uname(&uts_buf); -- os_build = uts_buf.release; -+ os_version = uts_buf.release; -+ os_build = strdup(uts_buf.release); -+ - os_name = uts_buf.sysname; - processor_arch = uts_buf.machine; - -@@ -462,7 +465,7 @@ void kvp_get_os_info(void) - * string to be of the form: x.y.z - * Strip additional information we may have. - */ -- p = strchr(os_build, '-'); -+ p = strchr(os_version, '-'); - if (p) - *p = '\0'; - -@@ -1649,7 +1652,7 @@ int main(void) - strcpy(key_name, "OSMinorVersion"); - break; - case OSVersion: -- strcpy(key_value, os_build); -+ strcpy(key_value, os_version); - strcpy(key_name, "OSVersion"); - break; - case ProcessorArchitecture: --- -1.7.4.1 - diff --git a/hyper-v.spec b/hyper-v.spec index 1103259..2363e95 100644 --- a/hyper-v.spec +++ b/hyper-v.spec @@ -53,9 +53,6 @@ Source11: hyper-v.init.sh Source20: hyper-v.tools.hv.hv_get_dhcp_info.sh Source21: hyper-v.tools.hv.hv_get_dns_info.sh Source22: hyper-v.tools.hv.hv_set_ifconfig.sh -Patch0: full-kernel-version.patch -Patch1: no-loopback.patch -Patch2: hyper-v.tools.hv.hv_kvp_daemon.netlink-spoof-DoS.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %if %{with_kmp} @@ -90,9 +87,6 @@ This package contains the Microsoft Hyper-V drivers. cp -avL %{S:5} kvptest.ps1.txt cp -vL %{S:9} %{hv_kvp_daemon}.h cp -vL %{S:10} %{hv_kvp_daemon}.c -%patch0 -p3 -%patch1 -p3 -%patch2 -p3 %build sed -i~ '/#include /d' %{hv_kvp_daemon}.c diff --git a/hyper-v.tools.hv.hv_kvp_daemon.c b/hyper-v.tools.hv.hv_kvp_daemon.c index 645dab7..7164441 100644 --- a/hyper-v.tools.hv.hv_kvp_daemon.c +++ b/hyper-v.tools.hv.hv_kvp_daemon.c @@ -43,6 +43,7 @@ #include #include #include +#include /* * KVP protocol: The user mode component first registers with the @@ -88,6 +89,7 @@ static char *os_major = ""; static char *os_minor = ""; static char *processor_arch; static char *os_build; +static char *os_version; static char *lic_version = "Unknown version"; static struct utsname uts_buf; @@ -453,7 +455,9 @@ void kvp_get_os_info(void) char *p, buf[512]; uname(&uts_buf); - os_build = uts_buf.release; + os_version = uts_buf.release; + os_build = strdup(uts_buf.release); + os_name = uts_buf.sysname; processor_arch = uts_buf.machine; @@ -462,7 +466,7 @@ void kvp_get_os_info(void) * string to be of the form: x.y.z * Strip additional information we may have. */ - p = strchr(os_build, '-'); + p = strchr(os_version, '-'); if (p) *p = '\0'; @@ -879,7 +883,7 @@ static int kvp_process_ip_address(void *addrp, addr_length = INET6_ADDRSTRLEN; } - if ((length - *offset) < addr_length + 1) + if ((length - *offset) < addr_length + 2) return HV_E_FAIL; if (str == NULL) { strcpy(buffer, "inet_ntop failed\n"); @@ -887,11 +891,13 @@ static int kvp_process_ip_address(void *addrp, } if (*offset == 0) strcpy(buffer, tmp); - else + else { + strcat(buffer, ";"); strcat(buffer, tmp); - strcat(buffer, ";"); + } *offset += strlen(str) + 1; + return 0; } @@ -953,7 +959,9 @@ kvp_get_ip_info(int family, char *if_name, int op, * supported address families; if not we gather info on * the specified address family. */ - if ((family != 0) && (curp->ifa_addr->sa_family != family)) { + if ((((family != 0) && + (curp->ifa_addr->sa_family != family))) || + (curp->ifa_flags & IFF_LOOPBACK)) { curp = curp->ifa_next; continue; } @@ -1478,13 +1486,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; @@ -1649,7 +1663,7 @@ int main(void) strcpy(key_name, "OSMinorVersion"); break; case OSVersion: - strcpy(key_value, os_build); + strcpy(key_value, os_version); strcpy(key_name, "OSVersion"); break; case ProcessorArchitecture: diff --git a/hyper-v.tools.hv.hv_kvp_daemon.netlink-spoof-DoS.patch b/hyper-v.tools.hv.hv_kvp_daemon.netlink-spoof-DoS.patch deleted file mode 100644 index 915308f..0000000 --- a/hyper-v.tools.hv.hv_kvp_daemon.netlink-spoof-DoS.patch +++ /dev/null @@ -1,43 +0,0 @@ -From: Tomas Hozza -Subject: [PATCH] tools: hv: Netlink source address validation allows DoS -Date: Thu, 8 Nov 2012 10:53:29 +0100 -Message-Id: <1352368409-18809-1-git-send-email-thozza@redhat.com> - -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 ---- - tools/hv/hv_kvp_daemon.c | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c -index 13c2a14..c1d9102 100755 ---- a/tools/hv/hv_kvp_daemon.c -+++ b/tools/hv/hv_kvp_daemon.c -@@ -1486,13 +1486,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; --- -1.7.11.7 - diff --git a/no-loopback.patch b/no-loopback.patch deleted file mode 100644 index 8aade95..0000000 --- a/no-loopback.patch +++ /dev/null @@ -1,67 +0,0 @@ -From: "K. Y. Srinivasan" -Subject: [PATCH 1/1] Tools: hv: Don't return loopback addresses -Date: Fri, 12 Oct 2012 16:41:48 -0700 -Message-Id: <1350085308-11152-1-git-send-email-kys@microsoft.com> - -Don't return loopback addresses and further don't terminate -the IP address strings with a semicolon. This is the current -behavior of Windows guests. - -Signed-off-by: K. Y. Srinivasan -Reviewed-by: Haiyang Zhang -Reported-by: Claudio Latini ---- - tools/hv/hv_kvp_daemon.c | 13 +++++++++---- - 1 files changed, 9 insertions(+), 4 deletions(-) - -diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c -index 6c7bcb9..13c2a14 100644 ---- a/tools/hv/hv_kvp_daemon.c -+++ b/tools/hv/hv_kvp_daemon.c -@@ -43,6 +43,7 @@ - #include - #include - #include -+#include - - /* - * KVP protocol: The user mode component first registers with the -@@ -882,7 +883,7 @@ static int kvp_process_ip_address(void *addrp, - addr_length = INET6_ADDRSTRLEN; - } - -- if ((length - *offset) < addr_length + 1) -+ if ((length - *offset) < addr_length + 2) - return HV_E_FAIL; - if (str == NULL) { - strcpy(buffer, "inet_ntop failed\n"); -@@ -890,11 +891,13 @@ static int kvp_process_ip_address(void *addrp, - } - if (*offset == 0) - strcpy(buffer, tmp); -- else -+ else { -+ strcat(buffer, ";"); - strcat(buffer, tmp); -- strcat(buffer, ";"); -+ } - - *offset += strlen(str) + 1; -+ - return 0; - } - -@@ -956,7 +959,9 @@ kvp_get_ip_info(int family, char *if_name, int op, - * supported address families; if not we gather info on - * the specified address family. - */ -- if ((family != 0) && (curp->ifa_addr->sa_family != family)) { -+ if ((((family != 0) && -+ (curp->ifa_addr->sa_family != family))) || -+ (curp->ifa_flags & IFF_LOOPBACK)) { - curp = curp->ifa_next; - continue; - } --- -1.7.4.1 -