i2cdump: bail-out if block read fails
authorBartosz Golaszewski <bartekgola@gmail.com>
Tue, 27 Oct 2015 16:15:04 +0000 (17:15 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 1 Nov 2015 19:55:09 +0000 (20:55 +0100)
We should bail-out if i2c_smbus_read_block_data() or
i2c_smbus_read_i2c_block_data() return 0 or less. Add the missing check
for the former and fix the existing for the latter.

Signed-off-by: Bartosz Golaszewski <bartekgola@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
miscutils/i2c_tools.c

index 6d221e9fc30f5a3fbb168c071bd0103014cf2592..7be489036f32cbe7da0e7042d6999fe2031d75fc 100644 (file)
@@ -724,16 +724,16 @@ static int read_block_data(int buf_fd, int mode, int *block)
        int res, blen = 0, tmp, i;
 
        if (mode == I2C_SMBUS_BLOCK_DATA) {
-               res = i2c_smbus_read_block_data(buf_fd, 0, cblock);
-               blen = res;
+               blen = i2c_smbus_read_block_data(buf_fd, 0, cblock);
+               if (blen <= 0)
+                       goto fail;
        } else {
                for (res = 0; res < I2CDUMP_NUM_REGS; res += tmp) {
                        tmp = i2c_smbus_read_i2c_block_data(
                                        buf_fd, res, I2C_SMBUS_BLOCK_MAX,
                                        cblock + res);
-                       if (tmp < 0) {
-                               bb_error_msg_and_die("block read failed");
-                       }
+                       if (tmp <= 0)
+                               goto fail;
                }
 
                if (res >= I2CDUMP_NUM_REGS)
@@ -748,6 +748,9 @@ static int read_block_data(int buf_fd, int mode, int *block)
        }
 
        return blen;
+
+ fail:
+       bb_error_msg_and_die("block read failed");
 }
 
 /* Dump all but word data. */