merge all changes into hv_kvp_daemon.c
OBS-URL: https://build.opensuse.org/package/show/Virtualization/hyper-v?expand=0&rev=38
This commit is contained in:
parent
2c3d70cfcb
commit
e9f40f192e
@ -1,60 +0,0 @@
|
|||||||
From: "K. Y. Srinivasan" <kys@microsoft.com>
|
|
||||||
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 <kys@microsoft.com>
|
|
||||||
Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
|
|
||||||
Reported-by: Claudio Latini <claudio.latini@live.com>
|
|
||||||
---
|
|
||||||
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
|
|
||||||
|
|
@ -53,9 +53,6 @@ Source11: hyper-v.init.sh
|
|||||||
Source20: hyper-v.tools.hv.hv_get_dhcp_info.sh
|
Source20: hyper-v.tools.hv.hv_get_dhcp_info.sh
|
||||||
Source21: hyper-v.tools.hv.hv_get_dns_info.sh
|
Source21: hyper-v.tools.hv.hv_get_dns_info.sh
|
||||||
Source22: hyper-v.tools.hv.hv_set_ifconfig.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
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
%if %{with_kmp}
|
%if %{with_kmp}
|
||||||
@ -90,9 +87,6 @@ This package contains the Microsoft Hyper-V drivers.
|
|||||||
cp -avL %{S:5} kvptest.ps1.txt
|
cp -avL %{S:5} kvptest.ps1.txt
|
||||||
cp -vL %{S:9} %{hv_kvp_daemon}.h
|
cp -vL %{S:9} %{hv_kvp_daemon}.h
|
||||||
cp -vL %{S:10} %{hv_kvp_daemon}.c
|
cp -vL %{S:10} %{hv_kvp_daemon}.c
|
||||||
%patch0 -p3
|
|
||||||
%patch1 -p3
|
|
||||||
%patch2 -p3
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
sed -i~ '/#include <linux.hyperv.h>/d' %{hv_kvp_daemon}.c
|
sed -i~ '/#include <linux.hyperv.h>/d' %{hv_kvp_daemon}.c
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
|
#include <net/if.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* KVP protocol: The user mode component first registers with the
|
* KVP protocol: The user mode component first registers with the
|
||||||
@ -88,6 +89,7 @@ static char *os_major = "";
|
|||||||
static char *os_minor = "";
|
static char *os_minor = "";
|
||||||
static char *processor_arch;
|
static char *processor_arch;
|
||||||
static char *os_build;
|
static char *os_build;
|
||||||
|
static char *os_version;
|
||||||
static char *lic_version = "Unknown version";
|
static char *lic_version = "Unknown version";
|
||||||
static struct utsname uts_buf;
|
static struct utsname uts_buf;
|
||||||
|
|
||||||
@ -453,7 +455,9 @@ void kvp_get_os_info(void)
|
|||||||
char *p, buf[512];
|
char *p, buf[512];
|
||||||
|
|
||||||
uname(&uts_buf);
|
uname(&uts_buf);
|
||||||
os_build = uts_buf.release;
|
os_version = uts_buf.release;
|
||||||
|
os_build = strdup(uts_buf.release);
|
||||||
|
|
||||||
os_name = uts_buf.sysname;
|
os_name = uts_buf.sysname;
|
||||||
processor_arch = uts_buf.machine;
|
processor_arch = uts_buf.machine;
|
||||||
|
|
||||||
@ -462,7 +466,7 @@ void kvp_get_os_info(void)
|
|||||||
* string to be of the form: x.y.z
|
* string to be of the form: x.y.z
|
||||||
* Strip additional information we may have.
|
* Strip additional information we may have.
|
||||||
*/
|
*/
|
||||||
p = strchr(os_build, '-');
|
p = strchr(os_version, '-');
|
||||||
if (p)
|
if (p)
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
|
|
||||||
@ -879,7 +883,7 @@ static int kvp_process_ip_address(void *addrp,
|
|||||||
addr_length = INET6_ADDRSTRLEN;
|
addr_length = INET6_ADDRSTRLEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((length - *offset) < addr_length + 1)
|
if ((length - *offset) < addr_length + 2)
|
||||||
return HV_E_FAIL;
|
return HV_E_FAIL;
|
||||||
if (str == NULL) {
|
if (str == NULL) {
|
||||||
strcpy(buffer, "inet_ntop failed\n");
|
strcpy(buffer, "inet_ntop failed\n");
|
||||||
@ -887,11 +891,13 @@ static int kvp_process_ip_address(void *addrp,
|
|||||||
}
|
}
|
||||||
if (*offset == 0)
|
if (*offset == 0)
|
||||||
strcpy(buffer, tmp);
|
strcpy(buffer, tmp);
|
||||||
else
|
else {
|
||||||
|
strcat(buffer, ";");
|
||||||
strcat(buffer, tmp);
|
strcat(buffer, tmp);
|
||||||
strcat(buffer, ";");
|
}
|
||||||
|
|
||||||
*offset += strlen(str) + 1;
|
*offset += strlen(str) + 1;
|
||||||
|
|
||||||
return 0;
|
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
|
* supported address families; if not we gather info on
|
||||||
* the specified address family.
|
* 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;
|
curp = curp->ifa_next;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1478,13 +1486,19 @@ int main(void)
|
|||||||
len = recvfrom(fd, kvp_recv_buffer, sizeof(kvp_recv_buffer), 0,
|
len = recvfrom(fd, kvp_recv_buffer, sizeof(kvp_recv_buffer), 0,
|
||||||
addr_p, &addr_l);
|
addr_p, &addr_l);
|
||||||
|
|
||||||
if (len < 0 || addr.nl_pid) {
|
if (len < 0) {
|
||||||
syslog(LOG_ERR, "recvfrom failed; pid:%u error:%d %s",
|
syslog(LOG_ERR, "recvfrom failed; pid:%u error:%d %s",
|
||||||
addr.nl_pid, errno, strerror(errno));
|
addr.nl_pid, errno, strerror(errno));
|
||||||
close(fd);
|
close(fd);
|
||||||
return -1;
|
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_msg = (struct nlmsghdr *)kvp_recv_buffer;
|
||||||
incoming_cn_msg = (struct cn_msg *)NLMSG_DATA(incoming_msg);
|
incoming_cn_msg = (struct cn_msg *)NLMSG_DATA(incoming_msg);
|
||||||
hv_msg = (struct hv_kvp_msg *)incoming_cn_msg->data;
|
hv_msg = (struct hv_kvp_msg *)incoming_cn_msg->data;
|
||||||
@ -1649,7 +1663,7 @@ int main(void)
|
|||||||
strcpy(key_name, "OSMinorVersion");
|
strcpy(key_name, "OSMinorVersion");
|
||||||
break;
|
break;
|
||||||
case OSVersion:
|
case OSVersion:
|
||||||
strcpy(key_value, os_build);
|
strcpy(key_value, os_version);
|
||||||
strcpy(key_name, "OSVersion");
|
strcpy(key_name, "OSVersion");
|
||||||
break;
|
break;
|
||||||
case ProcessorArchitecture:
|
case ProcessorArchitecture:
|
||||||
|
@ -1,43 +0,0 @@
|
|||||||
From: Tomas Hozza <thozza@redhat.com>
|
|
||||||
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 <thozza@redhat.com>
|
|
||||||
---
|
|
||||||
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
|
|
||||||
|
|
@ -1,67 +0,0 @@
|
|||||||
From: "K. Y. Srinivasan" <kys@microsoft.com>
|
|
||||||
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 <kys@microsoft.com>
|
|
||||||
Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
|
|
||||||
Reported-by: Claudio Latini <claudio.latini@live.com>
|
|
||||||
---
|
|
||||||
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 <sys/stat.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <dirent.h>
|
|
||||||
+#include <net/if.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 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
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user