[PATCH v2 2/2] PM: hibernate: use kstrtouint to parse resume= device numbers

From: 林濬哲

Date: Tue Sep 22 2026 - 01:52:11 EST



simple_strtoul() is deprecated. Replace the base-16 parse with
kstrtouint(); the explicit trailing-character check the old code
needed is provided by kstrtouint() itself. As a side effect, values
wider than 32 bits are now rejected instead of being silently
truncated before the dev_t conversion.

Signed-off-by: Lin Junzhe <m18667909625@xxxxxxx>
Assisted-by: AI coding assistant (disclosed per kernel AI guidelines)
---
kernel/power/hibernate.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
index d2479c69d71a..74f2d20518cc 100644
--- a/kernel/power/hibernate.c
+++ b/kernel/power/hibernate.c
@@ -14,6 +14,7 @@
#include <crypto/acompress.h>
#include <linux/blkdev.h>
#include <linux/export.h>
+#include <linux/kstrtox.h>
#include <linux/suspend.h>
#include <linux/reboot.h>
#include <linux/string.h>
@@ -1278,7 +1279,7 @@ static ssize_t resume_store(struct kobject *kobj, struct kobj_attribute *attr,
error = lookup_bdev(name, &dev);
if (error) {
unsigned maj, min, offset;
- char *p, dummy;
+ char dummy;

error = 0;
if (sscanf(name, "%u:%u%c", &maj, &min, &dummy) == 2 ||
@@ -1288,9 +1289,12 @@ static ssize_t resume_store(struct kobject *kobj, struct kobj_attribute *attr,
if (maj != MAJOR(dev) || min != MINOR(dev))
error = -EINVAL;
} else {
- dev = new_decode_dev(simple_strtoul(name, &p, 16));
- if (*p)
+ unsigned int val;
+
+ if (kstrtouint(name, 16, &val))
error = -EINVAL;
+ else
+ dev = new_decode_dev(val);
}
}
kfree(name);
--
2.54.0.windows.1