tools/sched_ext: fix strtoul() misuse in scx_hotplug_seq()

scx_hotplug_seq() uses strtoul() but validates the result with a
negative check (val < 0), which can never be true for an unsigned
return value.

Use the endptr mechanism to verify the entire string was consumed,
and check errno == ERANGE for overflow detection.

Signed-off-by: David Carlier <devnexen@gmail.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
David Carlier 2026-02-27 18:43:09 +00:00 committed by Tejun Heo
parent 749989b2d9
commit 032e084f0d

View file

@ -125,6 +125,7 @@ static inline long scx_hotplug_seq(void)
{
int fd;
char buf[32];
char *endptr;
ssize_t len;
long val;
@ -137,8 +138,10 @@ static inline long scx_hotplug_seq(void)
buf[len] = 0;
close(fd);
val = strtoul(buf, NULL, 10);
SCX_BUG_ON(val < 0, "invalid num hotplug events: %lu", val);
errno = 0;
val = strtoul(buf, &endptr, 10);
SCX_BUG_ON(errno == ERANGE || endptr == buf ||
(*endptr != '\n' && *endptr != '\0'), "invalid num hotplug events: %ld", val);
return val;
}