diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2011-09-01 15:57:23 +1000 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2011-09-01 15:57:32 +1000 |
commit | 7bfb40b048aa709bb88a00a1acbadbd9f7a645ee (patch) | |
tree | 88cfef3d3facca564ad378553a838789e0c78cb1 /net/socket.c | |
parent | 9bb7361d99fb5c510e62b521e4292581fa1bee98 (diff) | |
parent | 9e79e3e9dd9672b37ac9412e9a926714306551fe (diff) |
Merge remote-tracking branch 'origin/master' into next
(Pickup Stephen's fix d4d7b2a11c423a8d4088bb0090e4c8d626d043bc)
Diffstat (limited to 'net/socket.c')
-rw-r--r-- | net/socket.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/net/socket.c b/net/socket.c index 24a77400b65..ffe92ca32f2 100644 --- a/net/socket.c +++ b/net/socket.c @@ -1965,8 +1965,9 @@ static int __sys_sendmsg(struct socket *sock, struct msghdr __user *msg, * used_address->name_len is initialized to UINT_MAX so that the first * destination address never matches. */ - if (used_address && used_address->name_len == msg_sys->msg_namelen && - !memcmp(&used_address->name, msg->msg_name, + if (used_address && msg_sys->msg_name && + used_address->name_len == msg_sys->msg_namelen && + !memcmp(&used_address->name, msg_sys->msg_name, used_address->name_len)) { err = sock_sendmsg_nosec(sock, msg_sys, total_len); goto out_freectl; @@ -1978,8 +1979,9 @@ static int __sys_sendmsg(struct socket *sock, struct msghdr __user *msg, */ if (used_address && err >= 0) { used_address->name_len = msg_sys->msg_namelen; - memcpy(&used_address->name, msg->msg_name, - used_address->name_len); + if (msg_sys->msg_name) + memcpy(&used_address->name, msg_sys->msg_name, + used_address->name_len); } out_freectl: |