PM: Fix sysfs interface
Subsystems (2)
PATCH 1/1 PM: Fix sysfs interface
From: Rafael J. Wysocki <[email protected]>
The sysfs files /sys/power/disk and /sys/power/state do not work as documented, since they allow the user to write only a few initial characters of the input string to trigger the option (eg. 'echo pl > /sys/power/disk' activates the platform mode of hibernation). Fix it.
Special thanks to Peter Moulder <[email protected]> for pointing out the problem.
--- kernel/power/disk.c | 3 ++- kernel/power/main.c | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-)
kernel/power/disk.c +2 -1
@@ -416,7 +416,8 @@ static ssize_t disk_store(struct subsystmutex_lock (&pm_mutex);for (i =HIBERNATION_FIRST ; i <=HIBERNATION_MAX ; i++) { -if (!strncmp (buf, hibernation_modes[i], len)) { +if (len ==strlen (hibernation_modes[i]) + && !strncmp (buf, hibernation_modes[i], len)) { mode = i;break ; }
kernel/power/main.c +2 -2
@@ -289,13 +289,13 @@ static ssize_t state_store(struct subsys len = p ? p - buf : n;/* First, check if we are requested to hibernate */ -if (!strncmp (buf,"disk" , len)) { +if (len ==4 && !strncmp (buf,"disk" , len)) { error =hibernate ();return error ? error : n; }for (s = &pm_states[state]; state <PM_SUSPEND_MAX ; s++, state++) { -if (*s && !strncmp (buf, *s, len)) +if (*s && len ==strlen (s) && !strncmp (buf, *s, len))break ; }if (state <PM_SUSPEND_MAX && *s)
Sorry, there's a mistake in the previous version. Corrected patch follows.
---
From: Rafael J. Wysocki <[email protected]>
The sysfs files /sys/power/disk and /sys/power/state do not work as documented, since they allow the user to write only a few initial characters of the input string to trigger the option (eg. 'echo pl > /sys/power/disk' activates the platform mode of hibernation). Fix it.
Special thanks to Peter Moulder <[email protected]> for pointing out the problem.
kernel/power/disk.c | 3 ++- kernel/power/main.c | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-)
kernel/power/disk.c +2 -1
@@ -416,7 +416,8 @@ static ssize_t disk_store(struct subsystmutex_lock (&pm_mutex);for (i =HIBERNATION_FIRST ; i <=HIBERNATION_MAX ; i++) { -if (!strncmp (buf, hibernation_modes[i], len)) { +if (len ==strlen (hibernation_modes[i]) + && !strncmp (buf, hibernation_modes[i], len)) { mode = i;break ; }
kernel/power/main.c +2 -2
@@ -289,13 +289,13 @@ static ssize_t state_store(struct subsys len = p ? p - buf : n;/* First, check if we are requested to hibernate */ -if (!strncmp (buf,"disk" , len)) { +if (len ==4 && !strncmp (buf,"disk" , len)) { error =hibernate ();return error ? error : n; }for (s = &pm_states[state]; state <PM_SUSPEND_MAX ; s++, state++) { -if (*s && !strncmp (buf, *s, len)) +if (*s && len ==strlen (*s) && !strncmp (buf, *s, len))break ; }if (state <PM_SUSPEND_MAX && *s)
Signature · 3 lines
If you don't have the time to read, you don't have the time or the tools to write. - Stephen King
Quoted 10 lines · Rafael J. Wysocki
Sorry, there's a mistake in the previous version. Corrected patch follows.
---
From: Rafael J. Wysocki <[email protected]>The sysfs files
/sys/power/diskand/sys/power/statedo not work as documented, since they allow the user to write only a few initial characters of the input string to trigger the option (eg. 'echo pl >/sys/power/disk' activates the platform mode of hibernation). Fix it.
Quoted 4 lines
Special thanks to Peter Moulder <[email protected]> for pointing out the problem.
Signed-off-by Rafael J. Wysocki <[email protected]>
ACK.
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html