Commit 18eceb818dc37bbc783ec7ef7703f270cc6cd281
Committed by
David S. Miller
1 parent
b5f0549231
Exists in
smarc_imx_lf-5.15.y
and in
27 other branches
af_unix: Don't use continue to re-execute unix_stream_read_generic loop
The unix_stream_read_generic function tries to use a continue statement to restart the receive loop after waiting for a message. This may not work as intended as the caller might use a recvmsg call to peek at control messages without specifying a message buffer. If this was the case, the continue will cause the function to return without an error and without the credential information if the function had to wait for a message while it had returned with the credentials otherwise. Change to using goto to restart the loop without checking the condition first in this case so that credentials are returned either way. Signed-off-by: Rainer Weikusat <rweikusat@mobileactivedefense.com> Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Showing 1 changed file with 2 additions and 1 deletions Side-by-side Diff
net/unix/af_unix.c
... | ... | @@ -2312,6 +2312,7 @@ |
2312 | 2312 | bool drop_skb; |
2313 | 2313 | struct sk_buff *skb, *last; |
2314 | 2314 | |
2315 | +redo: | |
2315 | 2316 | unix_state_lock(sk); |
2316 | 2317 | if (sock_flag(sk, SOCK_DEAD)) { |
2317 | 2318 | err = -ECONNRESET; |
... | ... | @@ -2353,7 +2354,7 @@ |
2353 | 2354 | } |
2354 | 2355 | |
2355 | 2356 | mutex_lock(&u->readlock); |
2356 | - continue; | |
2357 | + goto redo; | |
2357 | 2358 | unlock: |
2358 | 2359 | unix_state_unlock(sk); |
2359 | 2360 | break; |