linux/drivers/nvmem
Jennifer Berringer 66325de718 nvmem: core: improve range check for nvmem_cell_write()
commit 31507fc2ad upstream.

When __nvmem_cell_entry_write() is called for an nvmem cell that does
not need bit shifting, it requires that the len parameter exactly
matches the nvmem cell size. However, when the nvmem cell has a nonzero
bit_offset, it was skipping this check.

Accepting values of len larger than the cell size results in
nvmem_cell_prepare_write_buffer() trying to write past the end of a heap
buffer that it allocates. Add a check to avoid that problem and instead
return -EINVAL when len doesn't match the number of bits expected by the
nvmem cell when bit_offset is nonzero.

This check uses cell->nbits in order to allow providing the smaller size
to cells that are shifted into another byte by bit_offset. For example,
a cell with nbits=8 and nonzero bit_offset would have bytes=2 but should
accept a 1-byte write here, although no current callers depend on this.

Fixes: 69aba7948c ("nvmem: Add a simple NVMEM framework for consumers")
Cc: stable@vger.kernel.org
Signed-off-by: Jennifer Berringer <jberring@redhat.com>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20241230141901.263976-7-srinivas.kandagatla@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2025-03-13 12:50:32 +01:00
..
bcm-ocotp.c nvmem: bcm-ocotp: Add ACPI support to BCM OCOTP 2019-01-31 16:24:14 +01:00
brcm_nvram.c nvmem: brcm_nvram: new driver exposing Broadcom's NVRAM 2021-04-02 16:26:33 +02:00
core.c nvmem: core: improve range check for nvmem_cell_write() 2025-03-13 12:50:32 +01:00
imx-iim.c nvmem: imx-iim: Use of_device_get_match_data() 2021-02-04 17:04:18 +01:00
imx-ocotp-scu.c nvmem: imx: scu: correct the fuse word index 2020-01-10 13:52:12 +01:00
imx-ocotp.c nvmem: imx: correct nregs for i.MX6UL 2023-11-08 17:26:41 +01:00
jz4780-efuse.c nvmem: jz4780-efuse: Use PTR_ERR_OR_ZERO() to simplify code 2020-05-15 16:20:02 +02:00
Kconfig nvmem: NVMEM_NINTENDO_OTP should depend on WII 2021-09-21 17:38:37 +02:00
lpc18xx_eeprom.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
lpc18xx_otp.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
Makefile nvmem: nintendo-otp: Add new driver for the Wii and Wii U OTP 2021-08-13 10:27:20 +02:00
meson-efuse.c nvmem: meson-efuse: Fix return value of nvmem callbacks 2024-07-18 13:07:42 +02:00
meson-mx-efuse.c nvmem: meson-mx-efuse: allow reading data smaller than word_size 2019-08-18 12:56:52 +02:00
mtk-efuse.c nvmem: mtk-efuse: Remove EFUSE register write support 2020-09-17 18:48:23 +02:00
mxs-ocotp.c nvmem: mxs-ocotp: Use devm_add_action_or_reset() for cleanup 2020-03-23 20:05:23 +01:00
nintendo-otp.c nvmem: nintendo-otp: Add new driver for the Wii and Wii U OTP 2021-08-13 10:27:20 +02:00
qcom-spmi-sdam.c nvmem: qcom-spmi-sdam: Set size in struct nvmem_config 2025-03-13 12:50:31 +01:00
qfprom.c nvmem: qfprom: sc7280: Handle the additional power-domains vote 2021-08-06 15:18:40 +02:00
rave-sp-eeprom.c nvmem: rave-sp-eeprom: Remove VLA usage 2018-07-07 17:30:46 +02:00
rmem.c nvmem: rmem: Fix return value of rmem_read() 2024-07-18 13:07:41 +02:00
rockchip-efuse.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 295 2019-06-05 17:36:38 +02:00
rockchip-otp.c nvmem: add Rockchip OTP driver 2019-11-05 18:35:33 +01:00
sc27xx-efuse.c nvmem: sc27xx: add sc2730 efuse support 2020-07-29 17:12:08 +02:00
snvs_lpgpr.c nvmem: convert comma to semicolon 2021-04-02 16:26:33 +02:00
sprd-efuse.c nvmem: sprd: Fix an error message 2021-05-14 13:39:50 +02:00
stm32-romem.c nvmem: stm32: add support for STM32MP15 BSEC to control OTP data 2019-04-25 19:43:12 +02:00
sunxi_sid.c nvmem: sunxi_sid: Set type to OTP 2021-06-11 10:57:52 +02:00
uniphier-efuse.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
vf610-ocotp.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 284 2019-06-05 17:36:37 +02:00
zynqmp_nvmem.c firmware: xilinx: Remove eemi ops for get_chipid 2020-04-28 15:45:06 +02:00