eeprom: at24: check at24_read/write arguments
authorHeiner Kallweit <hkallweit1@gmail.com>
Fri, 24 Nov 2017 06:47:50 +0000 (07:47 +0100)
committerBartosz Golaszewski <brgl@bgdev.pl>
Wed, 29 Nov 2017 15:05:37 +0000 (16:05 +0100)
So far we completely rely on the caller to provide valid arguments.
To be on the safe side perform an own sanity check.

Cc: stable@vger.kernel.org
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
drivers/misc/eeprom/at24.c

index 8ca6772b3baf386ca235f31c3559c3f28904d2b2..305a7a464d091614978e37b26a0573f66a27e8b8 100644 (file)
@@ -569,6 +569,9 @@ static int at24_read(void *priv, unsigned int off, void *val, size_t count)
        if (unlikely(!count))
                return count;
 
+       if (off + count > at24->chip.byte_len)
+               return -EINVAL;
+
        client = at24_translate_offset(at24, &off);
 
        ret = pm_runtime_get_sync(&client->dev);
@@ -614,6 +617,9 @@ static int at24_write(void *priv, unsigned int off, void *val, size_t count)
        if (unlikely(!count))
                return -EINVAL;
 
+       if (off + count > at24->chip.byte_len)
+               return -EINVAL;
+
        client = at24_translate_offset(at24, &off);
 
        ret = pm_runtime_get_sync(&client->dev);