- tools: hv: Improve error logging in VSS daemon.
[opensuse:kernel-source.git] / patches.suse / msft-hv-0537-Tools-hv-correct-payload-size-in-netlink_send.patch
1 From: Olaf Hering <olaf@aepfle.de>
2 Date: Wed, 7 Aug 2013 15:07:21 +0200
3 Patch-mainline: v3.12-rc1
4 Subject: Tools: hv: correct payload size in netlink_send
5 Git-commit: 2bc41ea3b3fd4c2f2473ec84f4ee3ef5ff21e49b
6
7 netlink_send is supposed to send just the cn_msg+hv_kvp_msg via netlink.
8 Currently it sets an incorrect iovec size, as reported by valgrind.
9
10 In the case of registering with the kernel the allocated buffer is large
11 enough to hold nlmsghdr+cn_msg+hv_kvp_msg, no overrun happens. In the
12 case of responding to the kernel the cn_msg is located in the middle of
13 recv_buffer, after the nlmsghdr. Currently the code in netlink_send adds
14 also the size of nlmsghdr to the payload. But nlmsghdr is a separate
15 iovec. This leads to an (harmless) out-of-bounds access when the kernel
16 processes the iovec. Correct the iovec size of the cn_msg to be just
17 cn_msg + its payload.
18
19 Signed-off-by: Olaf Hering <olaf@aepfle.de>
20 Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
21 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
22 Acked-by: <ohering@suse.de>
23 ---
24  tools/hv/hv_kvp_daemon.c | 2 +-
25  tools/hv/hv_vss_daemon.c | 2 +-
26  2 files changed, 2 insertions(+), 2 deletions(-)
27
28 diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
29 index b96eccc..dca06a2 100644
30 --- a/tools/hv/hv_kvp_daemon.c
31 +++ b/tools/hv/hv_kvp_daemon.c
32 @@ -1398,7 +1398,7 @@ netlink_send(int fd, struct cn_msg *msg)
33         char buffer[64];
34         struct iovec iov[2];
35  
36 -       size = NLMSG_SPACE(sizeof(struct cn_msg) + msg->len);
37 +       size = sizeof(struct cn_msg) + msg->len;
38  
39         nlh = (struct nlmsghdr *)buffer;
40         nlh->nlmsg_seq = 0;
41 diff --git a/tools/hv/hv_vss_daemon.c b/tools/hv/hv_vss_daemon.c
42 index 4213d0e..7cd2544 100644
43 --- a/tools/hv/hv_vss_daemon.c
44 +++ b/tools/hv/hv_vss_daemon.c
45 @@ -111,7 +111,7 @@ static int netlink_send(int fd, struct cn_msg *msg)
46         char buffer[64];
47         struct iovec iov[2];
48  
49 -       size = NLMSG_SPACE(sizeof(struct cn_msg) + msg->len);
50 +       size = sizeof(struct cn_msg) + msg->len;
51  
52         nlh = (struct nlmsghdr *)buffer;
53         nlh->nlmsg_seq = 0;