Description
In the Linux kernel, the following vulnerability has been resolved: iio: gyro: itg3200: fix i2c read into the wrong stack location itg3200_read_all_channels() takes `__be16 *buf' as a parameter and fills the i2c_msg destination as `(char *)&buf'. Since `buf' is the parameter (a pointer), `&buf' is the address of the local pointer slot on the stack of itg3200_read_all_channels(), not the address of the caller's scan buffer. The (char *) cast hides the type mismatch. i2c_transfer() therefore writes ITG3200_SCAN_ELEMENTS * sizeof(s16) = 8 bytes into the parameter's stack slot, which is discarded when the function returns. The caller's scan buffer in itg3200_trigger_handler() is never written to, so iio_push_to_buffers_with_timestamp() pushes uninitialised stack contents to userspace via /dev/iio:deviceX every scan -- both a functional bug (no actual gyroscope or temperature data is delivered through the triggered buffer) and an information leak. The non-buffered read_raw() path is unaffected: it goes through itg3200_read_reg_s16() which uses `&out' on a local s16 value, where that is correct. Drop the spurious `&' so the i2c read writes into the caller's buffer.
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
9dbf091da080508e9f632d307f357beb79a0766b to < 90e809376b0f0d1ddec2eec954aecdd2a5b40b0eaffected9dbf091da080508e9f632d307f357beb79a0766b to < 8654b5e2617819ff4f7c78071dfd0275e971a9b6affected9dbf091da080508e9f632d307f357beb79a0766b to < b64dd5f3b38911054cbcc570df617e3e8e75e562affected9dbf091da080508e9f632d307f357beb79a0766b to < 31bbd4b87dd6701fa10e03ba7f6268e49e178d16affected9dbf091da080508e9f632d307f357beb79a0766b to < 63203bd072b613c18c237b906b1c9d2dc4527337affected9dbf091da080508e9f632d307f357beb79a0766b to < 15a0b3f33ffb6c78b3de6f69b026ceb09b973dd1affected9dbf091da080508e9f632d307f357beb79a0766b to < cfc3283859cfdeacadf80d5e6880bdf871ffeaa6affected9dbf091da080508e9f632d307f357beb79a0766b to < 6bdc3023d62ed5c7d591f0eb27a5adb37fb892aeaffected
Linux Linux
Default version status: affected
3.9affected0 to < 3.9unaffected5.10.259 to ≤ 5.10.*unaffected5.15.210 to ≤ 5.15.*unaffected6.1.176 to ≤ 6.1.*unaffected6.6.143 to ≤ 6.6.*unaffected6.12.93 to ≤ 6.12.*unaffected6.18.35 to ≤ 6.18.*unaffected7.0.12 to ≤ 7.0.*unaffected7.1 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/90e809376b0f0d1ddec2eec954aecdd2a5b40b0e ↗
- https://git.kernel.org/stable/c/8654b5e2617819ff4f7c78071dfd0275e971a9b6 ↗
- https://git.kernel.org/stable/c/b64dd5f3b38911054cbcc570df617e3e8e75e562 ↗
- https://git.kernel.org/stable/c/31bbd4b87dd6701fa10e03ba7f6268e49e178d16 ↗
- https://git.kernel.org/stable/c/63203bd072b613c18c237b906b1c9d2dc4527337 ↗
- https://git.kernel.org/stable/c/15a0b3f33ffb6c78b3de6f69b026ceb09b973dd1 ↗
- https://git.kernel.org/stable/c/cfc3283859cfdeacadf80d5e6880bdf871ffeaa6 ↗
- https://git.kernel.org/stable/c/6bdc3023d62ed5c7d591f0eb27a5adb37fb892ae ↗