regmap: Add raw_write/read checks for max_raw_write/read sizes
authorMarkus Pargmann <mpa@pengutronix.de>
Sun, 30 Aug 2015 07:33:55 +0000 (09:33 +0200)
committerMark Brown <broonie@kernel.org>
Sun, 30 Aug 2015 09:19:22 +0000 (10:19 +0100)
Check in regmap_raw_read() and regmap_raw_write() for correct maximum
sizes of the operations. Return -E2BIG if this size is not supported
because it is too big.

Also this patch causes an uninitialized variable warning so it
initializes ret (although not necessary).

Signed-off-by: Markus Pargmann <mpa@pengutronix.de>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/base/regmap/regmap.c

index 47210101e308fef4e228176ef71ee87ebe4f27f3..d2efa4b33294353a8691fef74258a5bde0d3bc18 100644 (file)
@@ -1584,6 +1584,8 @@ int regmap_raw_write(struct regmap *map, unsigned int reg,
                return -EINVAL;
        if (val_len % map->format.val_bytes)
                return -EINVAL;
+       if (map->max_raw_write && map->max_raw_write > val_len)
+               return -E2BIG;
 
        map->lock(map->lock_arg);
 
@@ -2256,6 +2258,10 @@ int regmap_raw_read(struct regmap *map, unsigned int reg, void *val,
                        ret = -ENOTSUPP;
                        goto out;
                }
+               if (map->max_raw_read && map->max_raw_read < val_len) {
+                       ret = -E2BIG;
+                       goto out;
+               }
 
                /* Physical block read if there's no cache involved */
                ret = _regmap_raw_read(map, reg, val, val_len);