From 5a09fd4a23f3cc52dd780ab130c342ab300694d9 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 27 Sep 2024 13:47:28 +0200 Subject: [PATCH] 4.19-stable patches added patches: gpio-prevent-potential-speculation-leaks-in-gpio_device_get_desc.patch --- ...lation-leaks-in-gpio_device_get_desc.patch | 50 +++++++++++++++++++ queue-4.19/series | 1 + 2 files changed, 51 insertions(+) create mode 100644 queue-4.19/gpio-prevent-potential-speculation-leaks-in-gpio_device_get_desc.patch diff --git a/queue-4.19/gpio-prevent-potential-speculation-leaks-in-gpio_device_get_desc.patch b/queue-4.19/gpio-prevent-potential-speculation-leaks-in-gpio_device_get_desc.patch new file mode 100644 index 00000000000..896c45d5686 --- /dev/null +++ b/queue-4.19/gpio-prevent-potential-speculation-leaks-in-gpio_device_get_desc.patch @@ -0,0 +1,50 @@ +From d795848ecce24a75dfd46481aee066ae6fe39775 Mon Sep 17 00:00:00 2001 +From: Hagar Hemdan +Date: Thu, 23 May 2024 08:53:32 +0000 +Subject: gpio: prevent potential speculation leaks in gpio_device_get_desc() + +From: Hagar Hemdan + +commit d795848ecce24a75dfd46481aee066ae6fe39775 upstream. + +Userspace may trigger a speculative read of an address outside the gpio +descriptor array. +Users can do that by calling gpio_ioctl() with an offset out of range. +Offset is copied from user and then used as an array index to get +the gpio descriptor without sanitization in gpio_device_get_desc(). + +This change ensures that the offset is sanitized by using +array_index_nospec() to mitigate any possibility of speculative +information leaks. + +This bug was discovered and resolved using Coverity Static Analysis +Security Testing (SAST) by Synopsys, Inc. + +Signed-off-by: Hagar Hemdan +Link: https://lore.kernel.org/r/20240523085332.1801-1-hagarhem@amazon.com +Signed-off-by: Bartosz Golaszewski +Signed-off-by: Hugo SIMELIERE +Signed-off-by: Greg Kroah-Hartman +--- + drivers/gpio/gpiolib.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/gpio/gpiolib.c ++++ b/drivers/gpio/gpiolib.c +@@ -3,6 +3,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -144,7 +145,7 @@ struct gpio_desc *gpiochip_get_desc(stru + if (hwnum >= gdev->ngpio) + return ERR_PTR(-EINVAL); + +- return &gdev->descs[hwnum]; ++ return &gdev->descs[array_index_nospec(hwnum, gdev->ngpio)]; + } + + /** diff --git a/queue-4.19/series b/queue-4.19/series index 45f0c37534d..eae9ae1a5ef 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -23,3 +23,4 @@ spi-bcm63xx-enable-module-autoloading.patch x86-hyperv-set-x86_feature_tsc_known_freq-when-hyper.patch ocfs2-add-bounds-checking-to-ocfs2_xattr_find_entry.patch ocfs2-strict-bound-check-before-memcmp-in-ocfs2_xatt.patch +gpio-prevent-potential-speculation-leaks-in-gpio_device_get_desc.patch -- 2.47.3