2021-03-10 17:45:52

by Srinivas Kandagatla

[permalink] [raw]
Subject: [PATCH v2] gpio: wcd934x: Fix shift-out-of-bounds error

bit-mask for pins 0 to 4 is BIT(0) to BIT(4) however we ended up with BIT(n - 1)
which is not right, and this was caught by below usban check

UBSAN: shift-out-of-bounds in drivers/gpio/gpio-wcd934x.c:34:14

Fixes: 59c324683400 ("gpio: wcd934x: Add support to wcd934x gpio controller")
Signed-off-by: Srinivas Kandagatla <[email protected]>
Reviewed-by: Andy Shevchenko <[email protected]>
---
changes since v1:
- removed unnecessary dump stack from log

drivers/gpio/gpio-wcd934x.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpio/gpio-wcd934x.c b/drivers/gpio/gpio-wcd934x.c
index 1cbce5990855..97e6caedf1f3 100644
--- a/drivers/gpio/gpio-wcd934x.c
+++ b/drivers/gpio/gpio-wcd934x.c
@@ -7,7 +7,7 @@
#include <linux/slab.h>
#include <linux/of_device.h>

-#define WCD_PIN_MASK(p) BIT(p - 1)
+#define WCD_PIN_MASK(p) BIT(p)
#define WCD_REG_DIR_CTL_OFFSET 0x42
#define WCD_REG_VAL_CTL_OFFSET 0x43
#define WCD934X_NPINS 5
--
2.21.0


2021-03-10 23:36:05

by Bjorn Andersson

[permalink] [raw]
Subject: Re: [PATCH v2] gpio: wcd934x: Fix shift-out-of-bounds error

On Wed 10 Mar 11:43 CST 2021, Srinivas Kandagatla wrote:

> bit-mask for pins 0 to 4 is BIT(0) to BIT(4) however we ended up with BIT(n - 1)
> which is not right, and this was caught by below usban check
>
> UBSAN: shift-out-of-bounds in drivers/gpio/gpio-wcd934x.c:34:14
>
> Fixes: 59c324683400 ("gpio: wcd934x: Add support to wcd934x gpio controller")
> Signed-off-by: Srinivas Kandagatla <[email protected]>
> Reviewed-by: Andy Shevchenko <[email protected]>

Reviewed-by: Bjorn Andersson <[email protected]>

Regards,
Bjorn

> ---
> changes since v1:
> - removed unnecessary dump stack from log
>
> drivers/gpio/gpio-wcd934x.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpio/gpio-wcd934x.c b/drivers/gpio/gpio-wcd934x.c
> index 1cbce5990855..97e6caedf1f3 100644
> --- a/drivers/gpio/gpio-wcd934x.c
> +++ b/drivers/gpio/gpio-wcd934x.c
> @@ -7,7 +7,7 @@
> #include <linux/slab.h>
> #include <linux/of_device.h>
>
> -#define WCD_PIN_MASK(p) BIT(p - 1)
> +#define WCD_PIN_MASK(p) BIT(p)
> #define WCD_REG_DIR_CTL_OFFSET 0x42
> #define WCD_REG_VAL_CTL_OFFSET 0x43
> #define WCD934X_NPINS 5
> --
> 2.21.0
>

2021-05-04 14:24:39

by Srinivas Kandagatla

[permalink] [raw]
Subject: Re: [PATCH v2] gpio: wcd934x: Fix shift-out-of-bounds error

Hi Linus,

On 10/03/2021 17:43, Srinivas Kandagatla wrote:
> bit-mask for pins 0 to 4 is BIT(0) to BIT(4) however we ended up with BIT(n - 1)
> which is not right, and this was caught by below usban check
>
> UBSAN: shift-out-of-bounds in drivers/gpio/gpio-wcd934x.c:34:14
>
> Fixes: 59c324683400 ("gpio: wcd934x: Add support to wcd934x gpio controller")
> Signed-off-by: Srinivas Kandagatla <[email protected]>
> Reviewed-by: Andy Shevchenko <[email protected]>
> ---

Looks like this patch was missed. Without this audio on DragonBoard
DB845c is broken once rc1 is out, as the corresponding dts changes are
already in next.

Any chance to get this in .. maybe after rc1?


--srini

> changes since v1:
> - removed unnecessary dump stack from log
>
> drivers/gpio/gpio-wcd934x.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpio/gpio-wcd934x.c b/drivers/gpio/gpio-wcd934x.c
> index 1cbce5990855..97e6caedf1f3 100644
> --- a/drivers/gpio/gpio-wcd934x.c
> +++ b/drivers/gpio/gpio-wcd934x.c
> @@ -7,7 +7,7 @@
> #include <linux/slab.h>
> #include <linux/of_device.h>
>
> -#define WCD_PIN_MASK(p) BIT(p - 1)
> +#define WCD_PIN_MASK(p) BIT(p)
> #define WCD_REG_DIR_CTL_OFFSET 0x42
> #define WCD_REG_VAL_CTL_OFFSET 0x43
> #define WCD934X_NPINS 5
>