|
@@ -204,7 +204,8 @@ tb_found:
|
|
|
ret = 1;
|
|
|
if (inet_csk(sk)->icsk_af_ops->bind_conflict(sk, tb, true)) {
|
|
|
if (((sk->sk_reuse && sk->sk_state != TCP_LISTEN) ||
|
|
|
- (sk->sk_reuseport && uid_eq(tb->fastuid, uid))) &&
|
|
|
+ (tb->fastreuseport > 0 &&
|
|
|
+ sk->sk_reuseport && uid_eq(tb->fastuid, uid))) &&
|
|
|
smallest_size != -1 && --attempts >= 0) {
|
|
|
spin_unlock(&head->lock);
|
|
|
goto again;
|
|
@@ -227,19 +228,15 @@ tb_not_found:
|
|
|
if (sk->sk_reuseport) {
|
|
|
tb->fastreuseport = 1;
|
|
|
tb->fastuid = uid;
|
|
|
- } else {
|
|
|
+ } else
|
|
|
tb->fastreuseport = 0;
|
|
|
- tb->fastuid = 0;
|
|
|
- }
|
|
|
} else {
|
|
|
if (tb->fastreuse &&
|
|
|
(!sk->sk_reuse || sk->sk_state == TCP_LISTEN))
|
|
|
tb->fastreuse = 0;
|
|
|
if (tb->fastreuseport &&
|
|
|
- (!sk->sk_reuseport || !uid_eq(tb->fastuid, uid))) {
|
|
|
+ (!sk->sk_reuseport || !uid_eq(tb->fastuid, uid)))
|
|
|
tb->fastreuseport = 0;
|
|
|
- tb->fastuid = 0;
|
|
|
- }
|
|
|
}
|
|
|
success:
|
|
|
if (!inet_csk(sk)->icsk_bind_hash)
|