usb: storage: Remove snprintf() from sysfs call-backs and replace with sysfs_emit()
authorLee Jones <lee@kernel.org>
Wed, 13 Dec 2023 16:42:41 +0000 (16:42 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 15 Dec 2023 12:55:30 +0000 (13:55 +0100)
Since snprintf() has the documented, but still rather strange trait of
returning the length of the data that *would have been* written to the
array if space were available, rather than the arguably more useful
length of data *actually* written, it is usually considered wise to use
something else instead in order to avoid confusion.

In the case of sysfs call-backs, new wrappers exist that do just that.

Link: https://lwn.net/Articles/69419/
Link: https://github.com/KSPP/linux/issues/105
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: <usb-storage@lists.one-eyed-alien.net>
Signed-off-by: Lee Jones <lee@kernel.org>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Link: https://lore.kernel.org/r/20231213164246.1021885-13-lee@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/storage/sierra_ms.c

index 0774ba22fb66ee3fe48f56c9c7d78232975a9969..177fa6cd143ab2837640c26f8336781ddd3cf9cb 100644 (file)
@@ -98,26 +98,26 @@ static ssize_t truinst_show(struct device *dev, struct device_attribute *attr,
        struct usb_device *udev = interface_to_usbdev(intf);
        int result;
        if (swi_tru_install == TRU_FORCE_MS) {
-               result = snprintf(buf, PAGE_SIZE, "Forced Mass Storage\n");
+               result = sysfs_emit(buf, "Forced Mass Storage\n");
        } else {
                swocInfo = kmalloc(sizeof(struct swoc_info), GFP_KERNEL);
                if (!swocInfo) {
-                       snprintf(buf, PAGE_SIZE, "Error\n");
+                       sysfs_emit(buf, "Error\n");
                        return -ENOMEM;
                }
                result = sierra_get_swoc_info(udev, swocInfo);
                if (result < 0) {
                        dev_dbg(dev, "SWIMS: failed SWoC query\n");
                        kfree(swocInfo);
-                       snprintf(buf, PAGE_SIZE, "Error\n");
+                       sysfs_emit(buf, "Error\n");
                        return -EIO;
                }
                debug_swoc(dev, swocInfo);
-               result = snprintf(buf, PAGE_SIZE,
-                       "REV=%02d SKU=%04X VER=%04X\n",
-                       swocInfo->rev,
-                       swocInfo->LinuxSKU,
-                       swocInfo->LinuxVer);
+               result = sysfs_emit(buf,
+                                   "REV=%02d SKU=%04X VER=%04X\n",
+                                   swocInfo->rev,
+                                   swocInfo->LinuxSKU,
+                                   swocInfo->LinuxVer);
                kfree(swocInfo);
        }
        return result;