usb: typec: tipd: Don't read/write more bytes than required
authorSven Peter <sven@svenpeter.dev>
Tue, 14 Sep 2021 14:02:33 +0000 (16:02 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 21 Sep 2021 14:31:27 +0000 (16:31 +0200)
tps6598x_block_read/write always read 65 bytes of data even when much
less is required when I2C_FUNC_I2C is used. Reduce this to the correct
number.

Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Sven Peter <sven@svenpeter.dev>
Link: https://lore.kernel.org/r/20210914140235.65955-1-sven@svenpeter.dev
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/typec/tipd/core.c

index 21b3ae25c76d2c210396af4d9f6dc6eeabf25a33..c18ec3785592ba0a68ba2d784b4608e4648d85e5 100644 (file)
@@ -123,7 +123,7 @@ tps6598x_block_read(struct tps6598x *tps, u8 reg, void *val, size_t len)
        if (!tps->i2c_protocol)
                return regmap_raw_read(tps->regmap, reg, val, len);
 
-       ret = regmap_raw_read(tps->regmap, reg, data, sizeof(data));
+       ret = regmap_raw_read(tps->regmap, reg, data, len + 1);
        if (ret)
                return ret;
 
@@ -145,7 +145,7 @@ static int tps6598x_block_write(struct tps6598x *tps, u8 reg,
        data[0] = len;
        memcpy(&data[1], val, len);
 
-       return regmap_raw_write(tps->regmap, reg, data, sizeof(data));
+       return regmap_raw_write(tps->regmap, reg, data, len + 1);
 }
 
 static inline int tps6598x_read16(struct tps6598x *tps, u8 reg, u16 *val)