Skip to content

Commit b901a4e

Browse files
0x7f454c46davem330
authored andcommitted
net/tcp_sigpool: Use kref_get_unless_zero()
The freeing and re-allocation of algorithm are protected by cpool_mutex, so it doesn't fix an actual use-after-free, but avoids a deserved refcount_warn_saturate() warning. A trivial fix for the racy behavior. Fixes: 8c73b26 ("net/tcp: Prepare tcp_md5sig_pool for TCP-AO") Suggested-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Dmitry Safonov <dima@arista.com> Tested-by: Bagas Sanjaya <bagasdotme@gmail.com> Reported-by: syzbot <syzkaller@googlegroups.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 8fcb038 commit b901a4e

File tree

1 file changed

+2
-3
lines changed

1 file changed

+2
-3
lines changed

net/ipv4/tcp_sigpool.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,8 @@ int tcp_sigpool_alloc_ahash(const char *alg, size_t scratch_size)
162162
if (strcmp(cpool[i].alg, alg))
163163
continue;
164164

165-
if (kref_read(&cpool[i].kref) > 0)
166-
kref_get(&cpool[i].kref);
167-
else
165+
/* pairs with tcp_sigpool_release() */
166+
if (!kref_get_unless_zero(&cpool[i].kref))
168167
kref_init(&cpool[i].kref);
169168
ret = i;
170169
goto out;

0 commit comments

Comments
 (0)