diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2024-04-23 13:27:43 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2024-04-23 13:27:43 +0200 |
commit | e5019b14230a0bc1f6641c9850ae39cfe76ad2aa (patch) | |
tree | e3ff6870ee176d6dd1944d58a478f5db0a2fdba7 /net/unix/af_unix.c | |
parent | 66bc1a173328dec3e37c203a999f2a2914c96b56 (diff) | |
parent | ed30a4a51bb196781c8058073ea720133a65596f (diff) | |
download | lwn-e5019b14230a0bc1f6641c9850ae39cfe76ad2aa.tar.gz lwn-e5019b14230a0bc1f6641c9850ae39cfe76ad2aa.zip |
Merge 6.9-rc5 into driver-core-next
We want the kernfs fixes in here as well.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'net/unix/af_unix.c')
-rw-r--r-- | net/unix/af_unix.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 5b41e2321209..9a6ad5974dff 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -2663,9 +2663,13 @@ static struct sk_buff *manage_oob(struct sk_buff *skb, struct sock *sk, WRITE_ONCE(u->oob_skb, NULL); consume_skb(skb); } - } else if (!(flags & MSG_PEEK)) { + } else if (flags & MSG_PEEK) { + skb = NULL; + } else { skb_unlink(skb, &sk->sk_receive_queue); - consume_skb(skb); + WRITE_ONCE(u->oob_skb, NULL); + if (!WARN_ON_ONCE(skb_unref(skb))) + kfree_skb(skb); skb = skb_peek(&sk->sk_receive_queue); } } @@ -2739,18 +2743,16 @@ redo: last = skb = skb_peek(&sk->sk_receive_queue); last_len = last ? last->len : 0; +again: #if IS_ENABLED(CONFIG_AF_UNIX_OOB) if (skb) { skb = manage_oob(skb, sk, flags, copied); - if (!skb) { + if (!skb && copied) { unix_state_unlock(sk); - if (copied) - break; - goto redo; + break; } } #endif -again: if (skb == NULL) { if (copied >= target) goto unlock; |