EDAC/mc_sysfs: Add missing newlines when printing {max,dimm}_location
authorXiongfeng Wang <wangxiongfeng2@huawei.com>
Mon, 14 Sep 2020 02:48:54 +0000 (10:48 +0800)
committerBorislav Petkov <bp@suse.de>
Fri, 18 Sep 2020 07:14:01 +0000 (09:14 +0200)
Reading those sysfs entries gives:

  [root@localhost /]# cat /sys/devices/system/edac/mc/mc0/max_location
  memory 3 [root@localhost /]# cat /sys/devices/system/edac/mc/mc0/dimm0/dimm_location
  memory 0 [root@localhost /]#

Add newlines after the value it prints for better readability.

  [ bp: Make len a signed int and change the check to catch wraparound.
    Increment the pointer p only when the length check passes. Use
    scnprintf(). ]

Signed-off-by: Xiongfeng Wang <wangxiongfeng2@huawei.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Link: https://lkml.kernel.org/r/1600051734-8993-1-git-send-email-wangxiongfeng2@huawei.com
drivers/edac/edac_mc_sysfs.c

index 4e6aca595133ac46a1acdbbbaec0966122e92329..2f9f1e74bb35e77354cab69083488742776054dc 100644 (file)
@@ -474,8 +474,12 @@ static ssize_t dimmdev_location_show(struct device *dev,
                                     struct device_attribute *mattr, char *data)
 {
        struct dimm_info *dimm = to_dimm(dev);
+       ssize_t count;
 
-       return edac_dimm_info_location(dimm, data, PAGE_SIZE);
+       count = edac_dimm_info_location(dimm, data, PAGE_SIZE);
+       count += scnprintf(data + count, PAGE_SIZE - count, "\n");
+
+       return count;
 }
 
 static ssize_t dimmdev_label_show(struct device *dev,
@@ -813,15 +817,23 @@ static ssize_t mci_max_location_show(struct device *dev,
                                     char *data)
 {
        struct mem_ctl_info *mci = to_mci(dev);
-       int i;
+       int len = PAGE_SIZE;
        char *p = data;
+       int i, n;
 
        for (i = 0; i < mci->n_layers; i++) {
-               p += sprintf(p, "%s %d ",
-                            edac_layer_name[mci->layers[i].type],
-                            mci->layers[i].size - 1);
+               n = scnprintf(p, len, "%s %d ",
+                             edac_layer_name[mci->layers[i].type],
+                             mci->layers[i].size - 1);
+               len -= n;
+               if (len <= 0)
+                       goto out;
+
+               p += n;
        }
 
+       p += scnprintf(p, len, "\n");
+out:
        return p - data;
 }