scsi: mylex: Fix sysfs buffer lengths
authorArnd Bergmann <arnd@arndb.de>
Tue, 26 Mar 2024 22:38:06 +0000 (23:38 +0100)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 2 Apr 2024 01:08:48 +0000 (21:08 -0400)
The myrb and myrs drivers use an odd way of implementing their sysfs files,
calling snprintf() with a fixed length of 32 bytes to print into a page
sized buffer. One of the strings is actually longer than 32 bytes, which
clang can warn about:

drivers/scsi/myrb.c:1906:10: error: 'snprintf' will always be truncated; specified size is 32, but format string expands to at least 34 [-Werror,-Wformat-truncation]
drivers/scsi/myrs.c:1089:10: error: 'snprintf' will always be truncated; specified size is 32, but format string expands to at least 34 [-Werror,-Wformat-truncation]

These could all be plain sprintf() without a length as the buffer is always
long enough. On the other hand, sysfs files should not be overly long
either, so just double the length to make sure the longest strings don't
get truncated here.

Fixes: 77266186397c ("scsi: myrs: Add Mylex RAID controller (SCSI interface)")
Fixes: 081ff398c56c ("scsi: myrb: Add Mylex RAID controller (block interface)")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Link: https://lore.kernel.org/r/20240326223825.4084412-8-arnd@kernel.org
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/myrb.c
drivers/scsi/myrs.c

index ca2e932dd9b7016a92649113df439627e4a1e32b..f684eb5e04898aff3a2d164bad4649dab716861f 100644 (file)
@@ -1775,9 +1775,9 @@ static ssize_t raid_state_show(struct device *dev,
 
                name = myrb_devstate_name(ldev_info->state);
                if (name)
-                       ret = snprintf(buf, 32, "%s\n", name);
+                       ret = snprintf(buf, 64, "%s\n", name);
                else
-                       ret = snprintf(buf, 32, "Invalid (%02X)\n",
+                       ret = snprintf(buf, 64, "Invalid (%02X)\n",
                                       ldev_info->state);
        } else {
                struct myrb_pdev_state *pdev_info = sdev->hostdata;
@@ -1796,9 +1796,9 @@ static ssize_t raid_state_show(struct device *dev,
                else
                        name = myrb_devstate_name(pdev_info->state);
                if (name)
-                       ret = snprintf(buf, 32, "%s\n", name);
+                       ret = snprintf(buf, 64, "%s\n", name);
                else
-                       ret = snprintf(buf, 32, "Invalid (%02X)\n",
+                       ret = snprintf(buf, 64, "Invalid (%02X)\n",
                                       pdev_info->state);
        }
        return ret;
@@ -1886,11 +1886,11 @@ static ssize_t raid_level_show(struct device *dev,
 
                name = myrb_raidlevel_name(ldev_info->raid_level);
                if (!name)
-                       return snprintf(buf, 32, "Invalid (%02X)\n",
+                       return snprintf(buf, 64, "Invalid (%02X)\n",
                                        ldev_info->state);
-               return snprintf(buf, 32, "%s\n", name);
+               return snprintf(buf, 64, "%s\n", name);
        }
-       return snprintf(buf, 32, "Physical Drive\n");
+       return snprintf(buf, 64, "Physical Drive\n");
 }
 static DEVICE_ATTR_RO(raid_level);
 
@@ -1903,15 +1903,15 @@ static ssize_t rebuild_show(struct device *dev,
        unsigned char status;
 
        if (sdev->channel < myrb_logical_channel(sdev->host))
-               return snprintf(buf, 32, "physical device - not rebuilding\n");
+               return snprintf(buf, 64, "physical device - not rebuilding\n");
 
        status = myrb_get_rbld_progress(cb, &rbld_buf);
 
        if (rbld_buf.ldev_num != sdev->id ||
            status != MYRB_STATUS_SUCCESS)
-               return snprintf(buf, 32, "not rebuilding\n");
+               return snprintf(buf, 64, "not rebuilding\n");
 
-       return snprintf(buf, 32, "rebuilding block %u of %u\n",
+       return snprintf(buf, 64, "rebuilding block %u of %u\n",
                        rbld_buf.ldev_size - rbld_buf.blocks_left,
                        rbld_buf.ldev_size);
 }
index a1eec65a9713f5bb79a25360f9554bc379f052b3..e824be9d9bbb94f1c1f88bf3da591d7e585dcf8d 100644 (file)
@@ -947,9 +947,9 @@ static ssize_t raid_state_show(struct device *dev,
 
                name = myrs_devstate_name(ldev_info->dev_state);
                if (name)
-                       ret = snprintf(buf, 32, "%s\n", name);
+                       ret = snprintf(buf, 64, "%s\n", name);
                else
-                       ret = snprintf(buf, 32, "Invalid (%02X)\n",
+                       ret = snprintf(buf, 64, "Invalid (%02X)\n",
                                       ldev_info->dev_state);
        } else {
                struct myrs_pdev_info *pdev_info;
@@ -958,9 +958,9 @@ static ssize_t raid_state_show(struct device *dev,
                pdev_info = sdev->hostdata;
                name = myrs_devstate_name(pdev_info->dev_state);
                if (name)
-                       ret = snprintf(buf, 32, "%s\n", name);
+                       ret = snprintf(buf, 64, "%s\n", name);
                else
-                       ret = snprintf(buf, 32, "Invalid (%02X)\n",
+                       ret = snprintf(buf, 64, "Invalid (%02X)\n",
                                       pdev_info->dev_state);
        }
        return ret;
@@ -1066,13 +1066,13 @@ static ssize_t raid_level_show(struct device *dev,
                ldev_info = sdev->hostdata;
                name = myrs_raid_level_name(ldev_info->raid_level);
                if (!name)
-                       return snprintf(buf, 32, "Invalid (%02X)\n",
+                       return snprintf(buf, 64, "Invalid (%02X)\n",
                                        ldev_info->dev_state);
 
        } else
                name = myrs_raid_level_name(MYRS_RAID_PHYSICAL);
 
-       return snprintf(buf, 32, "%s\n", name);
+       return snprintf(buf, 64, "%s\n", name);
 }
 static DEVICE_ATTR_RO(raid_level);
 
@@ -1086,7 +1086,7 @@ static ssize_t rebuild_show(struct device *dev,
        unsigned char status;
 
        if (sdev->channel < cs->ctlr_info->physchan_present)
-               return snprintf(buf, 32, "physical device - not rebuilding\n");
+               return snprintf(buf, 64, "physical device - not rebuilding\n");
 
        ldev_info = sdev->hostdata;
        ldev_num = ldev_info->ldev_num;
@@ -1098,11 +1098,11 @@ static ssize_t rebuild_show(struct device *dev,
                return -EIO;
        }
        if (ldev_info->rbld_active) {
-               return snprintf(buf, 32, "rebuilding block %zu of %zu\n",
+               return snprintf(buf, 64, "rebuilding block %zu of %zu\n",
                                (size_t)ldev_info->rbld_lba,
                                (size_t)ldev_info->cfg_devsize);
        } else
-               return snprintf(buf, 32, "not rebuilding\n");
+               return snprintf(buf, 64, "not rebuilding\n");
 }
 
 static ssize_t rebuild_store(struct device *dev,
@@ -1190,7 +1190,7 @@ static ssize_t consistency_check_show(struct device *dev,
        unsigned short ldev_num;
 
        if (sdev->channel < cs->ctlr_info->physchan_present)
-               return snprintf(buf, 32, "physical device - not checking\n");
+               return snprintf(buf, 64, "physical device - not checking\n");
 
        ldev_info = sdev->hostdata;
        if (!ldev_info)
@@ -1198,11 +1198,11 @@ static ssize_t consistency_check_show(struct device *dev,
        ldev_num = ldev_info->ldev_num;
        myrs_get_ldev_info(cs, ldev_num, ldev_info);
        if (ldev_info->cc_active)
-               return snprintf(buf, 32, "checking block %zu of %zu\n",
+               return snprintf(buf, 64, "checking block %zu of %zu\n",
                                (size_t)ldev_info->cc_lba,
                                (size_t)ldev_info->cfg_devsize);
        else
-               return snprintf(buf, 32, "not checking\n");
+               return snprintf(buf, 64, "not checking\n");
 }
 
 static ssize_t consistency_check_store(struct device *dev,