]> www.infradead.org Git - nvme.git/commitdiff
speakup: Fix sizeof() vs ARRAY_SIZE() bug
authorDan Carpenter <dan.carpenter@linaro.org>
Mon, 15 Apr 2024 11:02:23 +0000 (14:02 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 8 May 2024 18:44:21 +0000 (19:44 +0100)
The "buf" pointer is an array of u16 values.  This code should be
using ARRAY_SIZE() (which is 256) instead of sizeof() (which is 512),
otherwise it can the still got out of bounds.

Fixes: c8d2f34ea96e ("speakup: Avoid crash on very long word")
Cc: stable@vger.kernel.org
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Link: https://lore.kernel.org/r/d16f67d2-fd0a-4d45-adac-75ddd11001aa@moroto.mountain
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/accessibility/speakup/main.c

index 736c2eb8c0f37d58529ea500c33b8167ad9d248e..f677ad2177c2f22144e9ce15faaf5952522a241d 100644 (file)
@@ -574,7 +574,7 @@ static u_long get_word(struct vc_data *vc)
        }
        attr_ch = get_char(vc, (u_short *)tmp_pos, &spk_attr);
        buf[cnt++] = attr_ch;
-       while (tmpx < vc->vc_cols - 1 && cnt < sizeof(buf) - 1) {
+       while (tmpx < vc->vc_cols - 1 && cnt < ARRAY_SIZE(buf) - 1) {
                tmp_pos += 2;
                tmpx++;
                ch = get_char(vc, (u_short *)tmp_pos, &temp);