media: smiapp: fix timeout checking in smiapp_read_nvm
authorColin Ian King <colin.king@canonical.com>
Wed, 25 Apr 2018 15:04:21 +0000 (11:04 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Thu, 17 May 2018 10:22:08 +0000 (06:22 -0400)
The current code decrements the timeout counter i and the end of
each loop i is incremented, so the check for timeout will always
be false and hence the timeout mechanism is just a dead code path.
Potentially, if the RD_READY bit is not set, we could end up in
an infinite loop.

Fix this so the timeout starts from 1000 and decrements to zero,
if at the end of the loop i is zero we have a timeout condition.

Detected by CoverityScan, CID#1324008 ("Logically dead code")

Fixes: ccfc97bdb5ae ("[media] smiapp: Add driver")

Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/i2c/smiapp/smiapp-core.c

index 3b7ace395ee6d1b077c3b5809ebfd01ad870c2f6..e1f8208581aaca03d41dfd53bdd0e218541a2885 100644 (file)
@@ -1001,7 +1001,7 @@ static int smiapp_read_nvm(struct smiapp_sensor *sensor,
                if (rval)
                        goto out;
 
-               for (i = 0; i < 1000; i++) {
+               for (i = 1000; i > 0; i--) {
                        rval = smiapp_read(
                                sensor,
                                SMIAPP_REG_U8_DATA_TRANSFER_IF_1_STATUS, &s);
@@ -1012,11 +1012,10 @@ static int smiapp_read_nvm(struct smiapp_sensor *sensor,
                        if (s & SMIAPP_DATA_TRANSFER_IF_1_STATUS_RD_READY)
                                break;
 
-                       if (--i == 0) {
-                               rval = -ETIMEDOUT;
-                               goto out;
-                       }
-
+               }
+               if (!i) {
+                       rval = -ETIMEDOUT;
+                       goto out;
                }
 
                for (i = 0; i < SMIAPP_NVM_PAGE_SIZE; i++) {