]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
badblocks: Fix a nonsense WARN_ON() which checks whether a u64 variable < 0
authorColy Li <colyli@kernel.org>
Sun, 9 Mar 2025 16:05:56 +0000 (12:05 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 29 May 2025 09:12:50 +0000 (11:12 +0200)
[ Upstream commit 7e76336e14de9a2b67af96012ddd46c5676cf340 ]

In _badblocks_check(), there are lines of code like this,
1246         sectors -= len;
[snipped]
1251         WARN_ON(sectors < 0);

The WARN_ON() at line 1257 doesn't make sense because sectors is
unsigned long long type and never to be <0.

Fix it by checking directly checking whether sectors is less than len.

Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Signed-off-by: Coly Li <colyli@kernel.org>
Reviewed-by: Yu Kuai <yukuai3@huawei.com>
Link: https://lore.kernel.org/r/20250309160556.42854-1-colyli@kernel.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
block/badblocks.c

index dc147c0179612f39259782c6721931c4d79f663f..23acdf7c6f3633d6b63a656a6ee0ab1727a4b9d3 100644 (file)
@@ -1246,14 +1246,15 @@ re_check:
        len = sectors;
 
 update_sectors:
+       /* This situation should never happen */
+       WARN_ON(sectors < len);
+
        s += len;
        sectors -= len;
 
        if (sectors > 0)
                goto re_check;
 
-       WARN_ON(sectors < 0);
-
        if (unacked_badblocks > 0)
                rv = -1;
        else if (acked_badblocks > 0)