linux/net
Nathan Chancellor b3913c90c6 xfrm: Avoid clang fortify warning in copy_to_user_tmpl()
commit 1a807e46aa 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-03 15:11:36 +02:00
..
6lowpan
9p net: 9p: avoid freeing uninit memory in p9pdu_vreadf 2023-12-13 05:44:30 +09:00
802 net: fill in MODULE_DESCRIPTION()s under net/802* 2023-10-28 11:29:28 +01:00
8021q vlan: skip nested type that is not IFLA_VLAN_QOS_MAPPING 2024-01-31 16:21:05 -08:00
appletalk appletalk: Fix Use-After-Free in atalk_ioctl 2023-12-14 12:02:45 +01:00
atm atm: Fix Use-After-Free in do_vcc_ioctl 2023-12-12 13:14:08 +01:00
ax25 net: implement lockless SO_PRIORITY 2023-10-01 19:09:54 +01:00
batman-adv Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2023-08-24 10:51:39 -07:00
bluetooth Bluetooth: Fix eir name length 2024-03-26 18:18:25 -04:00
bpf bpf: Fix a few selftest failures due to llvm18 change 2024-02-05 20:16:51 +00:00
bpfilter
bridge netfilter: bridge: confirm multicast packets before passing them up the stack 2024-03-06 14:53:51 +00:00
caif
can can: j1939: Fix UAF in j1939_sk_match_filter during setsockopt(SO_J1939_FILTER) 2024-02-23 09:51:57 +01:00
ceph libceph: fail sparse-read if the data length doesn't match 2024-03-01 13:41:43 +01:00
core net: report RCU QS on threaded NAPI repolling 2024-03-26 18:18:59 -04:00
dcb net: dcb: choose correct policy to parse DCB_ATTR_BCN 2023-08-01 21:07:46 -07:00
dccp dccp/tcp: Call security_inet_conn_request() after setting IPv6 addresses. 2023-11-02 12:56:03 +01:00
devlink devlink: fix port new reply cmd type 2024-03-26 18:18:58 -04:00
dns_resolver keys, dns: Fix size check of V1 server-list header 2024-01-25 15:44:44 -08:00
dsa net: dsa: fix netdev_priv() dereference before check on non-DSA netdevice events 2024-01-25 15:45:26 -08:00
ethernet
ethtool ethtool: netlink: Add missing ethnl_ops_begin/complete 2024-01-25 15:45:30 -08:00
handshake net/handshake: Fix handshake_req_destroy_test1 2024-02-23 09:51:24 +01:00
hsr hsr: Handle failures in module init 2024-03-26 18:18:57 -04:00
ieee802154 sysctl-6.6-rc1 2023-08-29 17:39:15 -07:00
ife net: sched: ife: fix potential use-after-free 2023-12-15 10:50:18 +00:00
ipv4 net: esp: fix bad handling of pages from page_pool 2024-04-03 15:11:29 +02:00
ipv6 net: esp: fix bad handling of pages from page_pool 2024-04-03 15:11:29 +02:00
iucv net/iucv: fix the allocation size of iucv_path_table array 2024-03-26 18:17:52 -04:00
kcm net: kcm: fix incorrect parameter validation in the kcm_getsockopt) function 2024-03-26 18:18:26 -04:00
key Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2023-08-18 12:44:56 -07:00
l2tp l2tp: fix incorrect parameter validation in the pppol2tp_getsockopt() function 2024-03-26 18:18:26 -04:00
l3mdev
lapb
llc llc: call sock_orphan() at release time 2024-02-05 20:17:09 +00:00
mac80211 wifi: mac80211: track capability/opmode NSS separately 2024-04-03 15:11:15 +02:00
mac802154 mac802154: fix llsec key resources release in mac802154_llsec_key_del 2024-04-03 15:11:19 +02:00
mctp net: mctp: copy skb ext data when fragmenting 2024-03-26 18:18:19 -04:00
mpls networking: Update to register_net_sysctl_sz 2023-08-15 15:26:18 -07:00
mptcp mptcp: fix possible deadlock in subflow diag 2024-03-06 14:53:58 +00:00
ncsi net/ncsi: Fix netlink major/minor version numbers 2024-01-25 15:44:45 -08:00
netfilter netfilter: nf_tables: reject constant set with timeout 2024-04-03 15:11:35 +02:00
netlabel calipso: fix memory leak in netlbl_calipso_add_pass() 2024-01-25 15:44:39 -08:00
netlink netlink: Fix kernel-infoleak-after-free in __skb_datagram_iter 2024-03-06 14:53:49 +00:00
netrom netrom: Fix data-races around sysctl_net_busy_read 2024-03-15 10:48:22 -04:00
nfc nfc: nci: free rx_data_reassembly skb on NCI device cleanup 2024-02-23 09:51:38 +01:00
nsh
openvswitch net: openvswitch: limit the number of recursions from action sets 2024-02-23 09:51:26 +01:00
packet packet: annotate data-races around ignore_outgoing 2024-03-26 18:18:56 -04:00
phonet phonet/pep: fix racy skb_queue_empty() use 2024-03-01 13:41:58 +01:00
psample psample: Require 'CAP_NET_ADMIN' when joining "packets" group 2023-12-07 09:54:02 -08:00
qrtr net: qrtr: ns: Return 0 if server port is not present 2024-01-01 18:41:29 +00:00
rds rds: introduce acquire/release ordering in acquire/release_in_xmit() 2024-03-26 18:18:57 -04:00
rfkill net: rfkill: gpio: set GPIO direction 2023-12-12 10:14:57 +01:00
rose net/rose: fix races in rose_kill_by_device() 2023-12-15 11:59:53 +00:00
rxrpc rxrpc: Fix counting of new acks and nacks 2024-02-16 19:14:23 +01:00
sched net/sched: taprio: proper TCA_TAPRIO_TC_ENTRY_INDEX check 2024-03-26 18:18:53 -04:00
sctp sctp: fix busy polling 2024-01-25 15:44:56 -08:00
smc net/smc: disable SEID on non-s390 archs where virtual ISM may be used 2024-02-05 20:16:56 +00:00
strparser
sunrpc net: sunrpc: Fix an off by one in rpc_sockaddr2uaddr() 2024-03-26 18:18:47 -04:00
switchdev net: bridge: switchdev: Skip MDB replays of deferred events on offload 2024-03-01 13:41:54 +01:00
tipc tipc: Check the bearer type before calling tipc_udp_nl_bearer_add() 2024-02-16 19:14:23 +01:00
tls tls: fix use-after-free on failed backlog decryption 2024-03-06 14:53:52 +00:00
unix af_unix: Annotate data-race of gc_in_progress in wait_for_unix_gc(). 2024-03-26 18:18:05 -04:00
vmw_vsock virtio/vsock: send credit update during setting SO_RCVLOWAT 2024-01-25 15:44:52 -08:00
wireless wifi: nl80211: reject iftype change with mesh ID change 2024-03-06 14:53:55 +00:00
x25 net/x25: fix incorrect parameter validation in the x25_getsockopt() function 2024-03-26 18:18:27 -04:00
xdp xsk: Add truesize to skb_add_rx_frag(). 2024-03-01 13:41:53 +01:00
xfrm xfrm: Avoid clang fortify warning in copy_to_user_tmpl() 2024-04-03 15:11:36 +02:00
compat.c
devres.c
Kconfig net: add skb_segment kunit test 2023-10-11 10:39:01 +01:00
Kconfig.debug
Makefile
socket.c net: Save and restore msg_namelen in sock_sendmsg 2024-01-03 11:37:57 +00:00
sysctl_net.c sysctl: Add size to register_net_sysctl function 2023-08-15 15:26:17 -07:00