lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250801131907.371700-1-miguelgarciaroman8@gmail.com>
Date: Fri,  1 Aug 2025 15:19:07 +0200
From: Miguel García <miguelgarciaroman8@...il.com>
To: dm-devel@...ts.linux.dev
Cc: agk@...hat.com,
	snitzer@...nel.org,
	mpatocka@...hat.com,
	linux-kernel@...r.kernel.org,
	Miguel García <miguelgarciaroman8@...il.com>
Subject: [PATCH] dm: sysfs: use sysfs_emit() in dm_attr_*_show()

This patch replaces the existing sprintf/strcat/strlen patterns in the
four dm-sysfs show() callbacks with the sysfs_emit() API, as recommended by
Documentation/filesystems/sysfs.rst. The change has no functional impact.
The output format remains exactly the same—but it:

  - Eliminates manual buffer-length calculations and strcat calls  
  - Protects against potential PAGE_SIZE overruns  
  - Makes intent clearer and aligns with current kernel best practices  

Signed-off-by: Miguel García <miguelgarciaroman8@...il.com>
---

Tested-on:
  • Built-in dm_mod and loop drivers in a custom vmlinuz via virtme-ng
  • BusyBox-based initramfs in QEMU (x86_64, 2 GB RAM, 2 vCPU)
  
Test procedure:
  1. In the guest shell:
       # mount -t tmpfs tmpfs /tmp
       # dd if=/dev/zero of=/tmp/backing.img bs=1M count=8
       # losetup /dev/loop0 /tmp/backing.img
       # sectors=$((8*1024*1024/512))
       # echo "0 $sectors linear /dev/loop0 0" | dmsetup create testdm --uuid test-uuid-123
  2. Verify each sysfs attribute still matches the original output:
       # cat /sys/block/dm-*/dm/name        →  testdm
       # cat /sys/block/dm-*/dm/uuid        →  test-uuid-123
       # cat /sys/block/dm-*/dm/suspended   →  0
       # cat /sys/block/dm-*/dm/use_blk_mq  →  1
  3. Remove and clean up:
       # dmsetup remove testdm
       # losetup -d /dev/loop0

Both before and after the patch the attribute contents and formatting are
identical, confirming no functional change.


 drivers/md/dm-sysfs.c | 22 ++++++++++------------
 1 file changed, 10 insertions(+), 12 deletions(-)

diff --git a/drivers/md/dm-sysfs.c b/drivers/md/dm-sysfs.c
index bfaef27ca79f..fed9751970a0 100644
--- a/drivers/md/dm-sysfs.c
+++ b/drivers/md/dm-sysfs.c
@@ -68,35 +68,33 @@ static ssize_t dm_attr_store(struct kobject *kobj, struct attribute *attr,
 
 static ssize_t dm_attr_name_show(struct mapped_device *md, char *buf)
 {
-	if (dm_copy_name_and_uuid(md, buf, NULL))
+	char name[DM_NAME_LEN];
+
+	if (dm_copy_name_and_uuid(md, name, NULL))
 		return -EIO;
 
-	strcat(buf, "\n");
-	return strlen(buf);
+	return sysfs_emit(buf, "%s\n", name);
 }
 
 static ssize_t dm_attr_uuid_show(struct mapped_device *md, char *buf)
 {
-	if (dm_copy_name_and_uuid(md, NULL, buf))
+	char uuid[DM_UUID_LEN];
+
+	if (dm_copy_name_and_uuid(md, NULL, uuid))
 		return -EIO;
 
-	strcat(buf, "\n");
-	return strlen(buf);
+	return sysfs_emit(buf, "%s\n", uuid);
 }
 
 static ssize_t dm_attr_suspended_show(struct mapped_device *md, char *buf)
 {
-	sprintf(buf, "%d\n", dm_suspended_md(md));
-
-	return strlen(buf);
+	return sysfs_emit(buf, "%d\n", dm_suspended_md(md));
 }
 
 static ssize_t dm_attr_use_blk_mq_show(struct mapped_device *md, char *buf)
 {
 	/* Purely for userspace compatibility */
-	sprintf(buf, "%d\n", true);
-
-	return strlen(buf);
+	return sysfs_emit(buf, "%d\n", true);
 }
 
 static DM_ATTR_RO(name);
-- 
2.34.1


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ