mfd: 88pm80x: Double shifting bug in suspend/resume
Subsystems (2)
PATCH 1/1 mfd: 88pm80x: Double shifting bug in suspend/resume
set_bit() and clear_bit() take the bit number so this code is really doing "1 << (1 << irq)" which is a double shift bug. It's done consistently so it won't cause a problem unless "irq" is more than 4.
Fixes 70c6cce04066 ('mfd: Support 88pm80x in 80x driver')
Signed-off-by Dan Carpenter <[email protected]>
include/linux/mfd/88pm80x.h +2 -2
@@ -350,7 +350,7 @@ static inline int pm80x_dev_suspend(struct device *dev)int irq =platform_get_irq (pdev,0 );if (device_may_wakeup (dev)) -set_bit ((1 << irq), &chip->wu_flag); +set_bit (irq, &chip->wu_flag);return 0 ; }
@@ -362,7 +362,7 @@ static inline int pm80x_dev_resume(struct device *dev)int irq =platform_get_irq (pdev,0 );if (device_may_wakeup (dev)) -clear_bit ((1 << irq), &chip->wu_flag); +clear_bit (irq, &chip->wu_flag);return 0 ; }
Lee Jones
AppliedQuoted 6 lines · Dan Carpenter
set_bit()andclear_bit()take the bit number so this code is really doing "1 << (1 << irq)" which is a double shift bug. It's done consistently so it won't cause a problem unless "irq" is more than 4.Fixes 70c6cce04066 ('mfd: Support 88pm80x in 80x driver')Signed-off-by Dan Carpenter <[email protected]>
Applied, thanks.
Quoted 22 lines
include/linux/mfd/88pm80x.h +2
-2@@ -350,7 +350,7 @@ static inline int pm80x_dev_suspend(struct device *dev)int irq =platform_get_irq (pdev,0 );if (device_may_wakeup (dev)) -set_bit ((1 << irq), &chip->wu_flag); +set_bit (irq, &chip->wu_flag);return 0 ; }@@ -362,7 +362,7 @@ static inline int pm80x_dev_resume(struct device *dev)int irq =platform_get_irq (pdev,0 );if (device_may_wakeup (dev)) -clear_bit ((1 << irq), &chip->wu_flag); +clear_bit (irq, &chip->wu_flag);return 0 ; }
Signature · 4 lines
Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog