[PATCH 0/3] two small fixes out of kernel/sys.c

From: Bradley Morgan

Date: Wed Nov 04 2026 - 19:38:14 EST


Two unrelated things that came out of reading kernel/sys.c line by line.
They are in one series only because they came from the same read, patch 3
stands on its own and can be taken without the other two.

Patches 1 and 2 have to go in that order. PR_FUTEX_HASH is the only case
in the prctl switch that does not check the args it does not use, arg5
does not even reach futex_hash_prctl(). Patch 2 adds the checks. Patch 1
goes first because prctl() is variadic, so the two callers under tools/
leave the args they do not pass as whatever those registers hold, and
patch 2 would fail them at random without it.

Patch 3 is compat_sysinfo(). It scales the 64 bit memory values down so
they fit the 32 bit fields, and stops when the unit reaches PAGE_SIZE.
But do_sysinfo() hands it bytes with mem_unit at 1, so on a box with
enough ram it stops far too early and drops the high bits. 16 TiB reads
back as 0 and 17 TiB reads back as 1 TiB. The loop only runs longer on
the path that was already wrong, nothing that works today changes.

Tested on ppc64.

Bradley Morgan (3):
tools: pass the unused prctl() args explicitly for PR_FUTEX_HASH
futex: reject the unused PR_FUTEX_HASH arguments
compat: make compat_sysinfo() scale far enough to actually fit

include/linux/futex.h | 6 ++--
kernel/futex/core.c | 7 +++--
kernel/sys.c | 28 +++++++++----------
tools/perf/bench/futex.c | 4 +--
.../futex/functional/futex_priv_hash.c | 4 +--
5 files changed, 26 insertions(+), 23 deletions(-)

--
2.53.0