scsi: fcoe: Fix unsigned comparison with zero in store_ctlr_mode()
authorHarshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
Tue, 2 Jan 2024 08:52:45 +0000 (00:52 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 12 Jan 2024 02:26:26 +0000 (21:26 -0500)
ctlr->mode is of unsigned type, it is never less than zero.

Fix this by using an extra variable called 'res', to store return value
from sysfs_match_string() and assign that to ctlr->mode on the success
path.

Fixes: edc22a7c8688 ("scsi: fcoe: Use sysfs_match_string() over fcoe_parse_mode()")
Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
Link: https://lore.kernel.org/r/20240102085245.600570-1-harshit.m.mogalapalli@oracle.com
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/fcoe/fcoe_sysfs.c

index 408a806bf4c2d3c23a07ca0f45dbe71d6d741965..c64a085a7ee2f9f29c0e9fe1e00bed7e8eedf5a1 100644 (file)
@@ -263,6 +263,7 @@ static ssize_t store_ctlr_mode(struct device *dev,
                               const char *buf, size_t count)
 {
        struct fcoe_ctlr_device *ctlr = dev_to_ctlr(dev);
+       int res;
 
        if (count > FCOE_MAX_MODENAME_LEN)
                return -EINVAL;
@@ -279,12 +280,13 @@ static ssize_t store_ctlr_mode(struct device *dev,
                        return -ENOTSUPP;
                }
 
-               ctlr->mode = sysfs_match_string(fip_conn_type_names, buf);
-               if (ctlr->mode < 0 || ctlr->mode == FIP_CONN_TYPE_UNKNOWN) {
+               res = sysfs_match_string(fip_conn_type_names, buf);
+               if (res < 0 || res == FIP_CONN_TYPE_UNKNOWN) {
                        LIBFCOE_SYSFS_DBG(ctlr, "Unknown mode %s provided.\n",
                                          buf);
                        return -EINVAL;
                }
+               ctlr->mode = res;
 
                ctlr->f->set_fcoe_ctlr_mode(ctlr);
                LIBFCOE_SYSFS_DBG(ctlr, "Mode changed to %s.\n", buf);