]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
sock: Correct error checking condition for (assign|release)_proto_idx()
authorZijun Hu <quic_zijuhu@quicinc.com>
Thu, 10 Apr 2025 01:01:27 +0000 (09:01 +0800)
committerJakub Kicinski <kuba@kernel.org>
Fri, 11 Apr 2025 23:32:40 +0000 (16:32 -0700)
(assign|release)_proto_idx() wrongly check find_first_zero_bit() failure
by condition '(prot->inuse_idx == PROTO_INUSE_NR - 1)' obviously.

Fix by correcting the condition to '(prot->inuse_idx == PROTO_INUSE_NR)'

Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Link: https://patch.msgid.link/20250410-fix_net-v2-1-d69e7c5739a4@quicinc.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/sock.c

index e54449c9ab0bad5fb125fc1eb109d0fcdc1c9a13..121f6401128895762a5ad07530e6bf564d3da41d 100644 (file)
@@ -4004,7 +4004,7 @@ static int assign_proto_idx(struct proto *prot)
 {
        prot->inuse_idx = find_first_zero_bit(proto_inuse_idx, PROTO_INUSE_NR);
 
-       if (unlikely(prot->inuse_idx == PROTO_INUSE_NR - 1)) {
+       if (unlikely(prot->inuse_idx == PROTO_INUSE_NR)) {
                pr_err("PROTO_INUSE_NR exhausted\n");
                return -ENOSPC;
        }
@@ -4015,7 +4015,7 @@ static int assign_proto_idx(struct proto *prot)
 
 static void release_proto_idx(struct proto *prot)
 {
-       if (prot->inuse_idx != PROTO_INUSE_NR - 1)
+       if (prot->inuse_idx != PROTO_INUSE_NR)
                clear_bit(prot->inuse_idx, proto_inuse_idx);
 }
 #else