usb: misc: cypress_cy7c63: check result of IO

If the device returns a bogus short read, treat it as EIO.
Actually check for IO errors.

Signed-off-by: Oliver Neukum <oneukum@suse.com>
Link: https://patch.msgid.link/20260710095523.1646308-1-oneukum@suse.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Oliver Neukum 2026-07-10 11:55:18 +02:00 committed by Greg Kroah-Hartman
parent b60af0b9e7
commit 0673b919e0

View File

@ -89,8 +89,11 @@ static int vendor_command(struct cypress *dev, unsigned char request,
address, data, iobuf, CYPRESS_MAX_REQSIZE,
USB_CTRL_GET_TIMEOUT);
/* we must not process garbage */
if (retval < 2)
if (retval < 2) {
if (retval >= 0)
retval = -EIO;
goto err_buf;
}
/* store returned data (more READs to be added) */
switch (request) {
@ -175,8 +178,9 @@ static ssize_t read_port(struct device *dev, struct device_attribute *attr,
dev_dbg(&cyp->udev->dev, "READ_PORT%d called\n", port_num);
result = vendor_command(cyp, CYPRESS_READ_PORT, read_id, 0);
dev_dbg(&cyp->udev->dev, "Result of vendor_command: %d\n\n", result);
if (result < 0)
return result;
return sprintf(buf, "%d", cyp->port[port_num]);
}