]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
Input: samsung-keypad - use struct_size() helper
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Mon, 19 Aug 2024 04:58:01 +0000 (21:58 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Tue, 1 Jul 2025 21:16:17 +0000 (14:16 -0700)
When allocating memory for the keypad use struct_size() helper to be
protected from overflows.

Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Link: https://lore.kernel.org/r/20240819045813.2154642-5-dmitry.torokhov@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/keyboard/samsung-keypad.c

index ada4cd151dc6cbdb42de29c019a74b0093ebe000..e3a1b0db7ec8019b3893565858d7c7e8178a9bd0 100644 (file)
@@ -318,7 +318,6 @@ static int samsung_keypad_probe(struct platform_device *pdev)
        struct resource *res;
        struct input_dev *input_dev;
        unsigned int row_shift;
-       unsigned int keymap_size;
        int error;
 
        pdata = dev_get_platdata(&pdev->dev);
@@ -345,9 +344,10 @@ static int samsung_keypad_probe(struct platform_device *pdev)
                pdata->cfg_gpio(pdata->rows, pdata->cols);
 
        row_shift = get_count_order(pdata->cols);
-       keymap_size = (pdata->rows << row_shift) * sizeof(keypad->keycodes[0]);
 
-       keypad = devm_kzalloc(&pdev->dev, sizeof(*keypad) + keymap_size,
+       keypad = devm_kzalloc(&pdev->dev,
+                             struct_size(keypad, keycodes,
+                                         pdata->rows << row_shift),
                              GFP_KERNEL);
        if (!keypad)
                return -ENOMEM;