WSL2-Linux-Kernel/net
Nathan Chancellor 461a4f333c xfrm: Avoid clang fortify warning in copy_to_user_tmpl()
commit 1a807e46aa93ebad1dfbed4f82dc3bf779423a6e upstream.

After a couple recent changes in LLVM, there is a warning (or error with
CONFIG_WERROR=y or W=e) from the compile time fortify source routines,
specifically the memset() in copy_to_user_tmpl().

  In file included from net/xfrm/xfrm_user.c:14:
  ...
  include/linux/fortify-string.h:438:4: error: call to '__write_overflow_field' declared with 'warning' attribute: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror,-Wattribute-warning]
    438 |                         __write_overflow_field(p_size_field, size);
        |                         ^
  1 error generated.

While ->xfrm_nr has been validated against XFRM_MAX_DEPTH when its value
is first assigned in copy_templates() by calling validate_tmpl() first
(so there should not be any issue in practice), LLVM/clang cannot really
deduce that across the boundaries of these functions. Without that
knowledge, it cannot assume that the loop stops before i is greater than
XFRM_MAX_DEPTH, which would indeed result a stack buffer overflow in the
memset().

To make the bounds of ->xfrm_nr clear to the compiler and add additional
defense in case copy_to_user_tmpl() is ever used in a path where
->xfrm_nr has not been properly validated against XFRM_MAX_DEPTH first,
add an explicit bound check and early return, which clears up the
warning.

Cc: stable@vger.kernel.org
Link: https://github.com/ClangBuiltLinux/linux/issues/1985
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-04-10 16:18:45 +02:00
..
6lowpan
9p
802
8021q vlan: skip nested type that is not IFLA_VLAN_QOS_MAPPING 2024-02-23 08:54:27 +01:00
appletalk
atm
ax25
batman-adv
bluetooth Bluetooth: hci_core: Fix possible buffer overflow 2024-03-26 18:21:22 -04:00
bpf
bpfilter
bridge netfilter: bridge: confirm multicast packets before passing them up the stack 2024-03-06 14:38:46 +00:00
caif
can can: j1939: Fix UAF in j1939_sk_match_filter during setsockopt(SO_J1939_FILTER) 2024-02-23 08:55:10 +01:00
ceph
core net: report RCU QS on threaded NAPI repolling 2024-03-26 18:21:37 -04:00
dcb
dccp
dns_resolver
dsa
ethernet
ethtool ethtool: netlink: Add missing ethnl_ops_begin/complete 2024-01-25 14:52:54 -08:00
hsr hsr: Handle failures in module init 2024-03-26 18:21:36 -04:00
ieee802154
ife
ipv4 udp: fix incorrect parameter validation in the udp_lib_getsockopt() function 2024-03-26 18:21:23 -04:00
ipv6 ipv6: fib6_rules: flush route cache when rule is changed 2024-03-26 18:21:22 -04:00
iucv net/iucv: fix the allocation size of iucv_path_table array 2024-03-26 18:21:13 -04:00
kcm net: kcm: fix incorrect parameter validation in the kcm_getsockopt) function 2024-03-26 18:21:23 -04:00
key
l2tp l2tp: fix incorrect parameter validation in the pppol2tp_getsockopt() function 2024-03-26 18:21:23 -04:00
l3mdev
lapb
llc llc: call sock_orphan() at release time 2024-02-23 08:54:54 +01:00
mac80211 wifi: mac80211: adding missing drv_mgd_complete_tx() call 2024-03-01 13:21:47 +01:00
mac802154 mac802154: fix llsec key resources release in mac802154_llsec_key_del 2024-04-10 16:18:39 +02:00
mctp
mpls
mptcp mptcp: fix double-free on socket dismantle 2024-03-06 14:38:51 +00:00
ncsi
netfilter netfilter: nf_tables: reject constant set with timeout 2024-04-10 16:18:44 +02:00
netlabel
netlink netlink: Fix kernel-infoleak-after-free in __skb_datagram_iter 2024-03-06 14:38:45 +00:00
netrom netrom: Fix data-races around sysctl_net_busy_read 2024-03-15 10:48:17 -04:00
nfc nfc: nci: free rx_data_reassembly skb on NCI device cleanup 2024-02-23 08:55:05 +01:00
nsh
openvswitch net: openvswitch: limit the number of recursions from action sets 2024-02-23 08:55:02 +01:00
packet packet: annotate data-races around ignore_outgoing 2024-03-26 18:21:35 -04:00
phonet
psample
qrtr
rds rds: introduce acquire/release ordering in acquire/release_in_xmit() 2024-03-26 18:21:36 -04:00
rfkill
rose
rxrpc rxrpc: Fix response to PING RESPONSE ACKs to a dead call 2024-02-23 08:54:58 +01:00
sched net/sched: Refactor qdisc_graft() for ingress and clsact Qdiscs 2024-03-01 13:21:54 +01:00
sctp
smc net/smc: fix illegal rmb_desc access in SMC-D connection dump 2024-02-23 08:54:27 +01:00
strparser
sunrpc net: sunrpc: Fix an off by one in rpc_sockaddr2uaddr() 2024-03-26 18:21:33 -04:00
switchdev
tipc tipc: Check the bearer type before calling tipc_udp_nl_bearer_add() 2024-02-23 08:54:58 +01:00
tls Revert "tls: rx: move counting TlsDecryptErrors for sync" 2024-03-06 14:38:51 +00:00
unix af_unix: Annotate data-race of gc_in_progress in wait_for_unix_gc(). 2024-03-26 18:21:17 -04:00
vmw_vsock
wireless wifi: nl80211: reject iftype change with mesh ID change 2024-03-06 14:38:48 +00:00
x25 net/x25: fix incorrect parameter validation in the x25_getsockopt() function 2024-03-26 18:21:23 -04:00
xdp
xfrm xfrm: Avoid clang fortify warning in copy_to_user_tmpl() 2024-04-10 16:18:45 +02:00
Kconfig
Makefile
compat.c
devres.c
socket.c
sysctl_net.c