From: Rafael J. Wysocki <rjw@xxxxxxx> 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 <Peter.Moulder@xxxxxxxxxxxxxxxxxxxxxx> for pointing out the problem. Signed-off-by: Rafael J. Wysocki <rjw@xxxxxxx> --- kernel/power/disk.c | 3 ++- kernel/power/main.c | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) Index: linux-2.6.21/kernel/power/disk.c =================================================================== --- linux-2.6.21.orig/kernel/power/disk.c +++ linux-2.6.21/kernel/power/disk.c @@ -416,7 +416,8 @@ static ssize_t disk_store(struct subsyst mutex_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; } Index: linux-2.6.21/kernel/power/main.c =================================================================== --- linux-2.6.21.orig/kernel/power/main.c +++ linux-2.6.21/kernel/power/main.c @@ -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) _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm