Commit 032e084f authored by David Carlier's avatar David Carlier Committed by Tejun Heo
Browse files

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: default avatarDavid Carlier <devnexen@gmail.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent 749989b2
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -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;
}