diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2012-10-11 05:55:04 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2012-10-11 05:55:04 -0400 |
commit | a0f0dd57f4a85310d9936f1770a0424b49fef876 (patch) | |
tree | 2f85b8b67dda13d19b02ca39e0fbef921cb1cf8b /net/unix | |
parent | 2a552d5e63d7fa602c9a9a0717008737f55625a6 (diff) | |
parent | 846a136881b8f73c1f74250bf6acfaa309cab1f2 (diff) |
Merge branch 'fixes' into for-linus
Conflicts:
arch/arm/kernel/smp.c
Diffstat (limited to 'net/unix')
-rw-r--r-- | net/unix/af_unix.c | 17 | ||||
-rw-r--r-- | net/unix/diag.c | 14 |
2 files changed, 16 insertions, 15 deletions
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index c5ee4ff61364..5b5c876c80e9 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c | |||
@@ -441,7 +441,7 @@ static int unix_release_sock(struct sock *sk, int embrion) | |||
441 | /* ---- Socket is dead now and most probably destroyed ---- */ | 441 | /* ---- Socket is dead now and most probably destroyed ---- */ |
442 | 442 | ||
443 | /* | 443 | /* |
444 | * Fixme: BSD difference: In BSD all sockets connected to use get | 444 | * Fixme: BSD difference: In BSD all sockets connected to us get |
445 | * ECONNRESET and we die on the spot. In Linux we behave | 445 | * ECONNRESET and we die on the spot. In Linux we behave |
446 | * like files and pipes do and wait for the last | 446 | * like files and pipes do and wait for the last |
447 | * dereference. | 447 | * dereference. |
@@ -481,7 +481,6 @@ static int unix_listen(struct socket *sock, int backlog) | |||
481 | struct sock *sk = sock->sk; | 481 | struct sock *sk = sock->sk; |
482 | struct unix_sock *u = unix_sk(sk); | 482 | struct unix_sock *u = unix_sk(sk); |
483 | struct pid *old_pid = NULL; | 483 | struct pid *old_pid = NULL; |
484 | const struct cred *old_cred = NULL; | ||
485 | 484 | ||
486 | err = -EOPNOTSUPP; | 485 | err = -EOPNOTSUPP; |
487 | if (sock->type != SOCK_STREAM && sock->type != SOCK_SEQPACKET) | 486 | if (sock->type != SOCK_STREAM && sock->type != SOCK_SEQPACKET) |
@@ -503,8 +502,6 @@ static int unix_listen(struct socket *sock, int backlog) | |||
503 | out_unlock: | 502 | out_unlock: |
504 | unix_state_unlock(sk); | 503 | unix_state_unlock(sk); |
505 | put_pid(old_pid); | 504 | put_pid(old_pid); |
506 | if (old_cred) | ||
507 | put_cred(old_cred); | ||
508 | out: | 505 | out: |
509 | return err; | 506 | return err; |
510 | } | 507 | } |
@@ -2060,10 +2057,14 @@ static int unix_shutdown(struct socket *sock, int mode) | |||
2060 | struct sock *sk = sock->sk; | 2057 | struct sock *sk = sock->sk; |
2061 | struct sock *other; | 2058 | struct sock *other; |
2062 | 2059 | ||
2063 | mode = (mode+1)&(RCV_SHUTDOWN|SEND_SHUTDOWN); | 2060 | if (mode < SHUT_RD || mode > SHUT_RDWR) |
2064 | 2061 | return -EINVAL; | |
2065 | if (!mode) | 2062 | /* This maps: |
2066 | return 0; | 2063 | * SHUT_RD (0) -> RCV_SHUTDOWN (1) |
2064 | * SHUT_WR (1) -> SEND_SHUTDOWN (2) | ||
2065 | * SHUT_RDWR (2) -> SHUTDOWN_MASK (3) | ||
2066 | */ | ||
2067 | ++mode; | ||
2067 | 2068 | ||
2068 | unix_state_lock(sk); | 2069 | unix_state_lock(sk); |
2069 | sk->sk_shutdown |= mode; | 2070 | sk->sk_shutdown |= mode; |
diff --git a/net/unix/diag.c b/net/unix/diag.c index 750b13408449..06748f108a57 100644 --- a/net/unix/diag.c +++ b/net/unix/diag.c | |||
@@ -110,12 +110,12 @@ static int sk_diag_show_rqlen(struct sock *sk, struct sk_buff *nlskb) | |||
110 | } | 110 | } |
111 | 111 | ||
112 | static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct unix_diag_req *req, | 112 | static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct unix_diag_req *req, |
113 | u32 pid, u32 seq, u32 flags, int sk_ino) | 113 | u32 portid, u32 seq, u32 flags, int sk_ino) |
114 | { | 114 | { |
115 | struct nlmsghdr *nlh; | 115 | struct nlmsghdr *nlh; |
116 | struct unix_diag_msg *rep; | 116 | struct unix_diag_msg *rep; |
117 | 117 | ||
118 | nlh = nlmsg_put(skb, pid, seq, SOCK_DIAG_BY_FAMILY, sizeof(*rep), | 118 | nlh = nlmsg_put(skb, portid, seq, SOCK_DIAG_BY_FAMILY, sizeof(*rep), |
119 | flags); | 119 | flags); |
120 | if (!nlh) | 120 | if (!nlh) |
121 | return -EMSGSIZE; | 121 | return -EMSGSIZE; |
@@ -159,7 +159,7 @@ out_nlmsg_trim: | |||
159 | } | 159 | } |
160 | 160 | ||
161 | static int sk_diag_dump(struct sock *sk, struct sk_buff *skb, struct unix_diag_req *req, | 161 | static int sk_diag_dump(struct sock *sk, struct sk_buff *skb, struct unix_diag_req *req, |
162 | u32 pid, u32 seq, u32 flags) | 162 | u32 portid, u32 seq, u32 flags) |
163 | { | 163 | { |
164 | int sk_ino; | 164 | int sk_ino; |
165 | 165 | ||
@@ -170,7 +170,7 @@ static int sk_diag_dump(struct sock *sk, struct sk_buff *skb, struct unix_diag_r | |||
170 | if (!sk_ino) | 170 | if (!sk_ino) |
171 | return 0; | 171 | return 0; |
172 | 172 | ||
173 | return sk_diag_fill(sk, skb, req, pid, seq, flags, sk_ino); | 173 | return sk_diag_fill(sk, skb, req, portid, seq, flags, sk_ino); |
174 | } | 174 | } |
175 | 175 | ||
176 | static int unix_diag_dump(struct sk_buff *skb, struct netlink_callback *cb) | 176 | static int unix_diag_dump(struct sk_buff *skb, struct netlink_callback *cb) |
@@ -200,7 +200,7 @@ static int unix_diag_dump(struct sk_buff *skb, struct netlink_callback *cb) | |||
200 | if (!(req->udiag_states & (1 << sk->sk_state))) | 200 | if (!(req->udiag_states & (1 << sk->sk_state))) |
201 | goto next; | 201 | goto next; |
202 | if (sk_diag_dump(sk, skb, req, | 202 | if (sk_diag_dump(sk, skb, req, |
203 | NETLINK_CB(cb->skb).pid, | 203 | NETLINK_CB(cb->skb).portid, |
204 | cb->nlh->nlmsg_seq, | 204 | cb->nlh->nlmsg_seq, |
205 | NLM_F_MULTI) < 0) | 205 | NLM_F_MULTI) < 0) |
206 | goto done; | 206 | goto done; |
@@ -267,7 +267,7 @@ again: | |||
267 | if (!rep) | 267 | if (!rep) |
268 | goto out; | 268 | goto out; |
269 | 269 | ||
270 | err = sk_diag_fill(sk, rep, req, NETLINK_CB(in_skb).pid, | 270 | err = sk_diag_fill(sk, rep, req, NETLINK_CB(in_skb).portid, |
271 | nlh->nlmsg_seq, 0, req->udiag_ino); | 271 | nlh->nlmsg_seq, 0, req->udiag_ino); |
272 | if (err < 0) { | 272 | if (err < 0) { |
273 | nlmsg_free(rep); | 273 | nlmsg_free(rep); |
@@ -277,7 +277,7 @@ again: | |||
277 | 277 | ||
278 | goto again; | 278 | goto again; |
279 | } | 279 | } |
280 | err = netlink_unicast(net->diag_nlsk, rep, NETLINK_CB(in_skb).pid, | 280 | err = netlink_unicast(net->diag_nlsk, rep, NETLINK_CB(in_skb).portid, |
281 | MSG_DONTWAIT); | 281 | MSG_DONTWAIT); |
282 | if (err > 0) | 282 | if (err > 0) |
283 | err = 0; | 283 | err = 0; |