Description
In the Linux kernel, the following vulnerability has been resolved: hwmon: (pmbus/adm1266) cap PDIO scan in get_multiple at ADM1266_PDIO_NR adm1266_gpio_get_multiple() iterates the PDIO portion of the caller-supplied mask using for_each_set_bit_from(gpio_nr, mask, ADM1266_GPIO_NR + ADM1266_PDIO_STATUS) { ... } where ADM1266_PDIO_STATUS is the PMBus command code (0xE9, i.e. 233), not the number of PDIO pins. The intended upper bound is ADM1266_GPIO_NR + ADM1266_PDIO_NR = 25. gpiolib hands in a mask sized for gc.ngpio (= 25 bits on this chip), so the iteration walks find_next_bit() up to 242, reading up to 217 extra bits (a handful of unsigned-long words: four on 64-bit, seven on 32-bit) of whatever lives past the end of the mask in the caller's stack. Any incidental set bit in that range then drives a set_bit(gpio_nr, bits) call that writes past the end of the caller-supplied bits array too -- both out-of-bounds. Substitute ADM1266_PDIO_NR for the constant so the scan stops at the last real PDIO bit.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
d98dfad35c38c037b37c4adc99df01da571031a5 to < d0593e15fdeb56048a72c5c6e720f702759d0ccdaffectedd98dfad35c38c037b37c4adc99df01da571031a5 to < 17cee2f59029039416e8f6303050038eb59ba149affectedd98dfad35c38c037b37c4adc99df01da571031a5 to < 299efd14c2eda7e5fd40025e54addd4151a01081affectedd98dfad35c38c037b37c4adc99df01da571031a5 to < 4d1da9a6be5a8156c532d571c2ed237169f99244affectedd98dfad35c38c037b37c4adc99df01da571031a5 to < b96c7f0bc0713dc6403912f6527d4ff9168d6fe6affectedd98dfad35c38c037b37c4adc99df01da571031a5 to < fa7ca363069a70b0d1aa51e8892e3095fe2ac1ecaffectedd98dfad35c38c037b37c4adc99df01da571031a5 to < 2aef8f08c479f4cbc83e1e6b19d1c94d4dd24f17affectedd98dfad35c38c037b37c4adc99df01da571031a5 to < d7834d92251baade796812876e95555e2066fa9faffected
Linux Linux
Default version status: affected
5.10affected0 to < 5.10unaffected5.10.258 to ≤ 5.10.*unaffected5.15.209 to ≤ 5.15.*unaffected6.1.175 to ≤ 6.1.*unaffected6.6.142 to ≤ 6.6.*unaffected6.12.92 to ≤ 6.12.*unaffected6.18.34 to ≤ 6.18.*unaffected7.0.11 to ≤ 7.0.*unaffected7.1 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/d0593e15fdeb56048a72c5c6e720f702759d0ccd ↗
- https://git.kernel.org/stable/c/17cee2f59029039416e8f6303050038eb59ba149 ↗
- https://git.kernel.org/stable/c/299efd14c2eda7e5fd40025e54addd4151a01081 ↗
- https://git.kernel.org/stable/c/4d1da9a6be5a8156c532d571c2ed237169f99244 ↗
- https://git.kernel.org/stable/c/b96c7f0bc0713dc6403912f6527d4ff9168d6fe6 ↗
- https://git.kernel.org/stable/c/fa7ca363069a70b0d1aa51e8892e3095fe2ac1ec ↗
- https://git.kernel.org/stable/c/2aef8f08c479f4cbc83e1e6b19d1c94d4dd24f17 ↗
- https://git.kernel.org/stable/c/d7834d92251baade796812876e95555e2066fa9f ↗