Commit 18eceb818dc37bbc783ec7ef7703f270cc6cd281

Authored by Rainer Weikusat
Committed by David S. Miller
1 parent b5f0549231

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

... ... @@ -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;