diff options
author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2012-01-09 02:38:23 -0500 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2012-01-09 02:38:23 -0500 |
commit | da733563be5a9da26fe81d9f007262d00b846e22 (patch) | |
tree | db28291df94a2043af2123911984c5c173da4e6f /net/socket.c | |
parent | 6ccbcf2cb41131f8d56ef0723bf3f7c1f8486076 (diff) | |
parent | dab78d7924598ea4031663dd10db814e2e324928 (diff) |
Merge branch 'next' into for-linus
Diffstat (limited to 'net/socket.c')
-rw-r--r-- | net/socket.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/net/socket.c b/net/socket.c index 24a77400b65e..2877647f347b 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: |
@@ -2470,7 +2472,7 @@ int sock_register(const struct net_proto_family *ops) | |||
2470 | lockdep_is_held(&net_family_lock))) | 2472 | lockdep_is_held(&net_family_lock))) |
2471 | err = -EEXIST; | 2473 | err = -EEXIST; |
2472 | else { | 2474 | else { |
2473 | rcu_assign_pointer(net_families[ops->family], ops); | 2475 | RCU_INIT_POINTER(net_families[ops->family], ops); |
2474 | err = 0; | 2476 | err = 0; |
2475 | } | 2477 | } |
2476 | spin_unlock(&net_family_lock); | 2478 | spin_unlock(&net_family_lock); |
@@ -2498,7 +2500,7 @@ void sock_unregister(int family) | |||
2498 | BUG_ON(family < 0 || family >= NPROTO); | 2500 | BUG_ON(family < 0 || family >= NPROTO); |
2499 | 2501 | ||
2500 | spin_lock(&net_family_lock); | 2502 | spin_lock(&net_family_lock); |
2501 | rcu_assign_pointer(net_families[family], NULL); | 2503 | RCU_INIT_POINTER(net_families[family], NULL); |
2502 | spin_unlock(&net_family_lock); | 2504 | spin_unlock(&net_family_lock); |
2503 | 2505 | ||
2504 | synchronize_rcu(); | 2506 | synchronize_rcu(); |