sandbox: check lseek return value in handle_ufi_command
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Thu, 10 Nov 2022 07:40:30 +0000 (08:40 +0100)
committerSimon Glass <sjg@chromium.org>
Tue, 22 Nov 2022 22:13:35 +0000 (15:13 -0700)
Invoking lseek() may result in an error. Handle it.

Addresses-Coverity-ID: 376212 ("Error handling issues  (CHECKED_RETURN)")
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
drivers/usb/emul/sandbox_flash.c

index 6e8cfe1..01ccc4b 100644 (file)
@@ -188,15 +188,19 @@ static int handle_ufi_command(struct sandbox_flash_priv *priv, const void *buff,
        struct scsi_emul_info *info = &priv->eminfo;
        const struct scsi_cmd *req = buff;
        int ret;
+       off_t offset;
 
        ret = sb_scsi_emul_command(info, req, len);
        if (!ret) {
                setup_response(priv);
        } else if ((ret == SCSI_EMUL_DO_READ || ret == SCSI_EMUL_DO_WRITE) &&
                   priv->fd != -1) {
-               os_lseek(priv->fd, info->seek_block * info->block_size,
-                        OS_SEEK_SET);
-               setup_response(priv);
+               offset = os_lseek(priv->fd, info->seek_block * info->block_size,
+                                 OS_SEEK_SET);
+               if (offset == (off_t)-1)
+                       setup_fail_response(priv);
+               else
+                       setup_response(priv);
        } else {
                setup_fail_response(priv);
        }