Skip to contentSkip to conversation

nvmem: rave-sp-eeprom: Remove VLA usage

PATCH In review Kees Cook 2 participants 2 messages Jun 20, 2018 – Jun 21, 2018 NVMEM framework

lore
Share & tools
lore

Kees Cook

author
#0 lore raw

PATCH 1/1 nvmem: rave-sp-eeprom: Remove VLA usage

In the quest to remove all stack VLA usage from the kernel[1], this uses the maximum allocation size for the stack and adds a sanity check, similar to what has already be done for the regular rave-sp driver.

[1] https://lkml.kernel.org/r/CA+55aFzCG-zNmZwX4A2FQpadafLfEzK6CC=qPXydAacU1RqZWA@mail.gmail.com

---
 drivers/nvmem/rave-sp-eeprom.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/nvmem/rave-sp-eeprom.c +5 -1
index 50aeea6ec6cc..66699d44f73d 100644
@@ -35,6 +35,7 @@ enum rave_sp_eeprom_header_size {
 	RAVE_SP_EEPROM_HEADER_SMALL = 4U,
 	RAVE_SP_EEPROM_HEADER_BIG   = 5U,
 };
+#define RAVE_SP_EEPROM_HEADER_MAX	RAVE_SP_EEPROM_HEADER_BIG
 
 #define	RAVE_SP_EEPROM_PAGE_SIZE	32U
 
@@ -97,9 +98,12 @@ static int rave_sp_eeprom_io(struct rave_sp_eeprom *eeprom,
 	const unsigned int rsp_size =
 		is_write ? sizeof(*page) - sizeof(page->data) : sizeof(*page);
 	unsigned int offset = 0;
-	u8 cmd[cmd_size];
+	u8 cmd[RAVE_SP_EEPROM_HEADER_MAX + sizeof(page->data)];
 	int ret;
 
+	if (WARN_ON(cmd_size > sizeof(cmd)))
+		return -EINVAL;
+
 	cmd[offset++] = eeprom->address;
 	cmd[offset++] = 0;
 	cmd[offset++] = type;
Signature · 6 lines
2.17.1


-- 
Kees Cook
Pixel Security
Reviewed-by Tested-by on v1 1/1
#1 lore raw
Quoted 8 lines · Kees Cook

In the quest to remove all stack VLA usage from the kernel[1], this uses the maximum allocation size for the stack and adds a sanity check, similar to what has already be done for the regular rave-sp driver.

[1] https://lkml.kernel.org/r/CA+55aFzCG-zNmZwX4A2FQpadafLfEzK6CC=qPXydAacU1RqZWA@mail.gmail.com

I completely forgot that I was using VLAs in this driver. Thanks for fixing that!

Quoted 37 lines
---
 drivers/nvmem/rave-sp-eeprom.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/nvmem/rave-sp-eeprom.c +5 -2
index 50aeea6ec6cc..66699d44f73d 100644
@@ -35,6 +35,7 @@ enum rave_sp_eeprom_header_size {
        RAVE_SP_EEPROM_HEADER_SMALL = 4U,
        RAVE_SP_EEPROM_HEADER_BIG   = 5U,
 };
+#define RAVE_SP_EEPROM_HEADER_MAX      RAVE_SP_EEPROM_HEADER_BIG
 
 #define        RAVE_SP_EEPROM_PAGE_SIZE        32U
 
@@ -97,9 +98,12 @@ static int rave_sp_eeprom_io(struct rave_sp_eeprom *eeprom,
        const unsigned int rsp_size =
                is_write ? sizeof(*page) - sizeof(page->data) : sizeof(*page);
        unsigned int offset = 0;
-       u8 cmd[cmd_size];
+       u8 cmd[RAVE_SP_EEPROM_HEADER_MAX + sizeof(page->data)];
        int ret;
 
+       if (WARN_ON(cmd_size > sizeof(cmd)))
+               return -EINVAL;
+
        cmd[offset++] = eeprom->address;
        cmd[offset++] = 0;
        cmd[offset++] = type;
--

2.17.1

--
Kees Cook
Pixel Security