Hi all,
These patches fix a small out-of-bounds write when using the
nvmem-reboot-mode driver on Qualcomm SA8775P, such as by executing
"reboot bootloader" in a shell. Relevant error log:
BUG: KASAN: slab-out-of-bounds in nvmem_cell_prepare_write_buffer+0x144/0x47c
Write of size 4 at addr ffff19dd8e1a37a0 by task systemd-shutdow/1
Hardware name: Qualcomm SA8775P Ride (DT)
Call trace:
nvmem_cell_prepare_write_buffer
nvmem_cell_write
nvmem_reboot_mode_write
The buggy address is located 0 bytes inside of
allocated 1-byte region
This problem manifested because the devicetree file sa8775p-pmics.dtsi
specifies its reboot-mode cell with "reg = <0x48 0x1>" and so expects
the reboot mode write to only be 1 byte rather than 4. Other in-tree
devicetrees that seem likely affected include pmk8350 and pmk8550.
These changes add the missing bounds check to nvmem_cell_write and make
nvmem-reboot-mode able to only write as many bytes as it needs to.
v2:
- Added missing function definition for CONFIG_NVMEM=n
---
Jennifer Berringer (3):
nvmem: core: improve range check for nvmem_cell_write()
nvmem: core: add nvmem_cell_write_variable_u32()
power: reset: nvmem-reboot-mode: fix write for small cells
drivers/nvmem/core.c | 31 +++++++++++++++++++++++--
drivers/power/reset/nvmem-reboot-mode.c | 2 +-
include/linux/nvmem-consumer.h | 6 +++++
3 files changed, 36 insertions(+), 3 deletions(-)
base-commit: 98f7e32f20d28ec452afb208f9cffc08448a2652
--
2.46.2