]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
scsi: mylex: Fix sysfs buffer lengths
authorArnd Bergmann <arnd@arndb.de>
Tue, 26 Mar 2024 22:38:06 +0000 (23:38 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 10 Apr 2024 14:19:41 +0000 (16:19 +0200)
[ Upstream commit 1197c5b2099f716b3de327437fb50900a0b936c9 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/scsi/myrb.c
drivers/scsi/myrs.c

index 386256369dfc34ca74defe6cb335d5b84123380e..2a61cb7268839c6fc064b4e1cc7a300add14dcde 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 a4d244ee4548c74488702cf6ebf1a4ac49254533..3f05f13fb107a2f19546f3fb046361d1e3a84051 100644 (file)
@@ -949,9 +949,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;
@@ -960,9 +960,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;
@@ -1068,13 +1068,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);
 
@@ -1088,7 +1088,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;
@@ -1100,11 +1100,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,
@@ -1192,7 +1192,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)
@@ -1200,11 +1200,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,