Staging: rts5139: a couple off by one fixes
authorDan Carpenter <dan.carpenter@oracle.com>
Thu, 29 Mar 2012 18:52:20 +0000 (21:52 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 10 Apr 2012 17:31:00 +0000 (10:31 -0700)
Inside the array we check ms_start_idx[seg_no + 1] so on the last round
through we end up going past the end of the array.

Also if we don't break out of the loop early then we are beyond the end
of the array there as well.  With this change, if we don't find what we
are looking for, we end on the last element of the array.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rts5139/ms.c

index b0e9071c8e52600b09af000b16c6047be84f5996..02aad2d242cbb30e8350cae8f0c329a7f3ac60a2 100644 (file)
@@ -3864,7 +3864,7 @@ static int ms_rw_multi_sector(struct scsi_cmnd *srb, struct rts51x_chip *chip,
        log_blk = (u16) (start_sector >> ms_card->block_shift);
        start_page = (u8) (start_sector & ms_card->page_off);
 
-       for (seg_no = 0; seg_no < sizeof(ms_start_idx) / 2; seg_no++) {
+       for (seg_no = 0; seg_no < ARRAY_SIZE(ms_start_idx) - 1; seg_no++) {
                if (log_blk < ms_start_idx[seg_no + 1])
                        break;
        }
@@ -4020,7 +4020,8 @@ static int ms_rw_multi_sector(struct scsi_cmnd *srb, struct rts51x_chip *chip,
 
                log_blk++;
 
-               for (seg_no = 0; seg_no < sizeof(ms_start_idx) / 2; seg_no++) {
+               for (seg_no = 0; seg_no < ARRAY_SIZE(ms_start_idx) - 1;
+                               seg_no++) {
                        if (log_blk < ms_start_idx[seg_no + 1])
                                break;
                }