platform/chrome: cros_ec_uart: fix negative type promoted to high
authorTzung-Bi Shih <tzungbi@kernel.org>
Mon, 9 Jan 2023 08:15:54 +0000 (16:15 +0800)
committerTzung-Bi Shih <tzungbi@kernel.org>
Wed, 18 Jan 2023 02:57:51 +0000 (10:57 +0800)
serdev_device_write_buf() returns negative numbers on errors.  When
the return value compares to unsigned integer `len`, it promotes to
quite large positive number.

Fix it.

Fixes: 04a8bdd135cc ("platform/chrome: cros_ec_uart: Add transport layer")
Reported-by: Dan Carpenter <error27@gmail.com>
Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: Benson Leung <bleung@chromium.org>
Link: https://lore.kernel.org/r/20230109081554.3792547-1-tzungbi@kernel.org
drivers/platform/chrome/cros_ec_uart.c

index 6916069f159927c12617fca16fb73c292853ad4d..788246559bbba2556d6d980c670bc5edeaf03b30 100644 (file)
@@ -149,9 +149,10 @@ static int cros_ec_uart_pkt_xfer(struct cros_ec_device *ec_dev,
        resp->status = 0;
 
        ret = serdev_device_write_buf(serdev, ec_dev->dout, len);
-       if (ret < len) {
+       if (ret < 0 || ret < len) {
                dev_err(ec_dev->dev, "Unable to write data\n");
-               ret = -EIO;
+               if (ret >= 0)
+                       ret = -EIO;
                goto exit;
        }