Recently I have reviewed quite a few fixes for variable overflows caused
by config values, i.e. a value set from sysctl, module params or netlink
that is accepted as valid but later overflows when it is used in a
calculation. I believe there are more of these still out there, so I
used an LLM to dig through the code and it found the issues fixed in
this series.
All of them have been reproduced and verified in QEMU.
v2:
- gc_elasticity, mld_qrv, igmp_qrv: store the sysctl as u8 and use
proc_dou8vec_minmax(), as suggested by Kuniyuki
- docs: add the missing "Maximum: 255" to the mld_qrv and igmp_qrv
entries in ip-sysctl.rst
- message_cost: add proc_dointvec_jiffies_minmax() instead of a local
handler, as Joel suggested
- redirect_load: reject negative values as well
- kept Fernando's Reviewed-by on gc_elasticity, mld_qrv and igmp_qrv:
v2 narrows the storage type to u8, the fix itself is the same
v1: https://lore.kernel.org/netdev/20261023091419.167088-1-jiayuan.chen@linux.dev/ (local)
Jiayuan Chen (5):
ipv6: restrict gc_elasticity to 31
ipv4: fix shift-out-of-bounds in ip_rt_send_redirect()
ipv6: restrict mld_qrv to 255
ipv4: restrict igmp_qrv to 255
net: restrict message_cost and message_burst to non-negative values
Documentation/networking/ip-sysctl.rst | 4 ++
.../net_cachelines/netns_ipv4_sysctl.rst | 2 +-
include/linux/jiffies.h | 2 +
include/net/ipv6.h | 2 +-
include/net/netns/ipv4.h | 2 +-
include/net/netns/ipv6.h | 2 +-
kernel/time/jiffies.c | 40 +++++++++++++++++++
net/core/sysctl_net_core.c | 6 ++-
net/ipv4/route.c | 10 +++--
net/ipv4/sysctl_net_ipv4.c | 4 +-
net/ipv6/mcast.c | 2 +-
net/ipv6/route.c | 7 +++-
net/ipv6/sysctl_net_ipv6.c | 4 +-
13 files changed, 70 insertions(+), 17 deletions(-)
--
2.43.0