Skip to contentSkip to conversation

kernel/ksysfs: use snprintf for sysfs show

PATCH In review Davidlohr Bueso 3 participants 3 messages Aug 11, 2010 Driver core

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 kernel/ksysfs: use snprintf for sysfs show

Use snprintf(buf, PAGE_SIZE, ...) instead of sprintf for sysfs show methods. This is suggested in Documentation/filesystems/sysfs.txt

---
 kernel/ksysfs.c |   20 +++++++++++---------
 1 files changed, 11 insertions(+), 9 deletions(-)
kernel/ksysfs.c +11 -9
index 0b624e7..d7cef25 100644
@@ -29,7 +29,9 @@ static struct kobj_attribute _name##_attr = \
 static ssize_t uevent_seqnum_show(struct kobject *kobj,
 				  struct kobj_attribute *attr, char *buf)
 {
-	return sprintf(buf, "%llu\n", (unsigned long long)uevent_seqnum);
+	return snprintf(buf, PAGE_SIZE, "%llu\n", 
+			(unsigned long long)uevent_seqnum); 
+
 }
 KERNEL_ATTR_RO(uevent_seqnum);
 
@@ -37,7 +39,7 @@ KERNEL_ATTR_RO(uevent_seqnum);
 static ssize_t uevent_helper_show(struct kobject *kobj,
 				  struct kobj_attribute *attr, char *buf)
 {
-	return sprintf(buf, "%s\n", uevent_helper);
+	return snprintf(buf, PAGE_SIZE, "%s\n", uevent_helper);
 }
 static ssize_t uevent_helper_store(struct kobject *kobj,
 				   struct kobj_attribute *attr,
@@ -58,7 +60,7 @@ KERNEL_ATTR_RW(uevent_helper);
 static ssize_t profiling_show(struct kobject *kobj,
 				  struct kobj_attribute *attr, char *buf)
 {
-	return sprintf(buf, "%d\n", prof_on);
+	return snprintf(buf, PAGE_SIZE, "%d\n", prof_on);
 }
 static ssize_t profiling_store(struct kobject *kobj,
 				   struct kobj_attribute *attr,
@@ -89,21 +91,21 @@ KERNEL_ATTR_RW(profiling);
 static ssize_t kexec_loaded_show(struct kobject *kobj,
 				 struct kobj_attribute *attr, char *buf)
 {
-	return sprintf(buf, "%d\n", !!kexec_image);
+	return snprintf(buf, PAGE_SIZE, "%d\n", !!kexec_image);
 }
 KERNEL_ATTR_RO(kexec_loaded);
 
 static ssize_t kexec_crash_loaded_show(struct kobject *kobj,
 				       struct kobj_attribute *attr, char *buf)
 {
-	return sprintf(buf, "%d\n", !!kexec_crash_image);
+	return snprintf(buf, PAGE_SIZE, "%d\n", !!kexec_crash_image);
 }
 KERNEL_ATTR_RO(kexec_crash_loaded);
 
 static ssize_t kexec_crash_size_show(struct kobject *kobj,
 				       struct kobj_attribute *attr, char *buf)
 {
-	return sprintf(buf, "%zu\n", crash_get_memory_size());
+	return snprintf(buf, PAGE_SIZE, "%zu\n", crash_get_memory_size());
 }
 static ssize_t kexec_crash_size_store(struct kobject *kobj,
 				   struct kobj_attribute *attr,
@@ -123,9 +125,9 @@ KERNEL_ATTR_RW(kexec_crash_size);
 static ssize_t vmcoreinfo_show(struct kobject *kobj,
 			       struct kobj_attribute *attr, char *buf)
 {
-	return sprintf(buf, "%lx %x\n",
-		       paddr_vmcoreinfo_note(),
-		       (unsigned int)vmcoreinfo_max_size);
+	return snprintf(buf, PAGE_SIZE, "%lx %x\n",
+			paddr_vmcoreinfo_note(),
+			(unsigned int)vmcoreinfo_max_size);
 }
 KERNEL_ATTR_RO(vmcoreinfo);
 
Signature · 1 line
1.7.0.4
#1 lore raw
Quoted 2 lines · Davidlohr Bueso

Use snprintf(buf, PAGE_SIZE, ...) instead of sprintf for sysfs show methods. This is suggested in Documentation/filesystems/sysfs.txt

... therefore it must be done, the common sense be damned.

kernel/ksysfs.c static struct kobj_attribute _name##_attr = \ · line 33

Quoted 9 lines

---

static ssize_t uevent_seqnum_show(struct kobject *kobj,

kernel/ksysfs.c +2 -1
 				  struct kobj_attribute *attr, char *buf)
 {
-	return sprintf(buf, "%llu\n", (unsigned long long)uevent_seqnum);
+	return snprintf(buf, PAGE_SIZE, "%llu\n", 
+			(unsigned long long)uevent_seqnum); 

A-yup - that's an improvement, all right, on them evil boxen that got long long so huge that its decimal representation won't fit into a page.

NAK. Cargo-cult programming is bad.

#2 lore raw
In reply to Davidlohr Bueso
Quoted 2 lines · Davidlohr Bueso

Use snprintf(buf, PAGE_SIZE, ...) instead of sprintf for sysfs show methods. This is suggested in Documentation/filesystems/sysfs.txt

As Al pointed out, none of these will ever overflow so it makes no sense to change them.

thanks,

greg k-h