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: |
