]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
media: msp3400: Avoid possible out-of-bounds array accesses in msp3400c_thread()
authorIvan Abramov <i.abramov@mt-integration.ru>
Tue, 2 Sep 2025 23:28:14 +0000 (02:28 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 19 Jan 2026 12:11:58 +0000 (13:11 +0100)
commit d2bceb2e20e783d57e739c71e4e50b4b9f4a3953 upstream.

It's possible for max1 to remain -1 if msp_read() always fail. This
variable is further used as index for accessing arrays.

Fix that by checking max1 prior to array accesses.

It seems that restart is the preferable action in case of out-of-bounds
value.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: 8a4b275f9c19 ("V4L/DVB (3427): audmode and rxsubchans fixes (VIDIOC_G/S_TUNER)")
Cc: stable@vger.kernel.org
Signed-off-by: Ivan Abramov <i.abramov@mt-integration.ru>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/media/i2c/msp3400-kthreads.c

index 52e506f86de525ec9c7d7b1bdbb1cf1ed330c8c6..fd97334589082a091345b2fa977cbcbce4d04af0 100644 (file)
@@ -592,6 +592,8 @@ restart:
                                "carrier2 val: %5d / %s\n", val, cd[i].name);
                }
 
+               if (max1 < 0 || max1 > 3)
+                       goto restart;
                /* program the msp3400 according to the results */
                state->main = msp3400c_carrier_detect_main[max1].cdo;
                switch (max1) {