diff options
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 24a77400b65e..ffe92ca32f2a 100644 --- a/net/socket.c +++ b/net/socket.c | |||
@@ -1965,8 +1965,9 @@ static int __sys_sendmsg(struct socket *sock, struct msghdr __user *msg, | |||
1965 | * used_address->name_len is initialized to UINT_MAX so that the first | 1965 | * used_address->name_len is initialized to UINT_MAX so that the first |
1966 | * destination address never matches. | 1966 | * destination address never matches. |
1967 | */ | 1967 | */ |
1968 | if (used_address && used_address->name_len == msg_sys->msg_namelen && | 1968 | if (used_address && msg_sys->msg_name && |
1969 | !memcmp(&used_address->name, msg->msg_name, | 1969 | used_address->name_len == msg_sys->msg_namelen && |
1970 | !memcmp(&used_address->name, msg_sys->msg_name, | ||
1970 | used_address->name_len)) { | 1971 | used_address->name_len)) { |
1971 | err = sock_sendmsg_nosec(sock, msg_sys, total_len); | 1972 | err = sock_sendmsg_nosec(sock, msg_sys, total_len); |
1972 | goto out_freectl; | 1973 | goto out_freectl; |
@@ -1978,8 +1979,9 @@ static int __sys_sendmsg(struct socket *sock, struct msghdr __user *msg, | |||
1978 | */ | 1979 | */ |
1979 | if (used_address && err >= 0) { | 1980 | if (used_address && err >= 0) { |
1980 | used_address->name_len = msg_sys->msg_namelen; | 1981 | used_address->name_len = msg_sys->msg_namelen; |
1981 | memcpy(&used_address->name, msg->msg_name, | 1982 | if (msg_sys->msg_name) |
1982 | used_address->name_len); | 1983 | memcpy(&used_address->name, msg_sys->msg_name, |
1984 | used_address->name_len); | ||
1983 | } | 1985 | } |
1984 | 1986 | ||
1985 | out_freectl: | 1987 | out_freectl: |