android_kernel_motorola_sm6375/net
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Jiri Benc 65ad047fd8 net: gso: fix panic on frag_list with mixed head alloc types
[ Upstream commit 9e4b7a99a03aefd37ba7bb1f022c8efab5019165 ]

Since commit 3dcbdb134f ("net: gso: Fix skb_segment splat when
splitting gso_size mangled skb having linear-headed frag_list"), it is
allowed to change gso_size of a GRO packet. However, that commit assumes
that "checking the first list_skb member suffices; i.e if either of the
list_skb members have non head_frag head, then the first one has too".

It turns out this assumption does not hold. We've seen BUG_ON being hit
in skb_segment when skbs on the frag_list had differing head_frag with
the vmxnet3 driver. This happens because __netdev_alloc_skb and
__napi_alloc_skb can return a skb that is page backed or kmalloced
depending on the requested size. As the result, the last small skb in
the GRO packet can be kmalloced.

There are three different locations where this can be fixed:

(1) We could check head_frag in GRO and not allow GROing skbs with
    different head_frag. However, that would lead to performance
    regression on normal forward paths with unmodified gso_size, where
    !head_frag in the last packet is not a problem.

(2) Set a flag in bpf_skb_net_grow and bpf_skb_net_shrink indicating
    that NETIF_F_SG is undesirable. That would need to eat a bit in
    sk_buff. Furthermore, that flag can be unset when all skbs on the
    frag_list are page backed. To retain good performance,
    bpf_skb_net_grow/shrink would have to walk the frag_list.

(3) Walk the frag_list in skb_segment when determining whether
    NETIF_F_SG should be cleared. This of course slows things down.

This patch implements (3). To limit the performance impact in
skb_segment, the list is walked only for skbs with SKB_GSO_DODGY set
that have gso_size changed. Normal paths thus will not hit it.

We could check only the last skb but since we need to walk the whole
list anyway, let's stay on the safe side.

Fixes: 3dcbdb134f ("net: gso: Fix skb_segment splat when splitting gso_size mangled skb having linear-headed frag_list")
Signed-off-by: Jiri Benc <jbenc@redhat.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Link: https://lore.kernel.org/r/e04426a6a91baf4d1081e1b478c82b5de25fdf21.1667407944.git.jbenc@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-11-25 17:42:04 +01:00
..
6lowpan
9p net/9p: Initialize the iounit field during fid creation 2022-08-25 11:18:17 +02:00
802
8021q
appletalk
atm net/atm: fix proc_mpc_write incorrect return value 2022-10-29 10:20:35 +02:00
ax25
batman-adv batman-adv: Don't skb_split skbuffs with frag_list 2022-05-18 09:47:24 +02:00
bluetooth Bluetooth: L2CAP: Fix attempting to access uninitialized memory 2022-11-10 17:57:54 +01:00
bpf bpf: Don't redirect packets with invalid pkt_len 2022-09-05 10:27:46 +02:00
bpfilter
bridge netfilter: ebtables: fix memory leak when blob is malformed 2022-09-28 11:04:07 +02:00
caif
can can: j1939: transport: j1939_session_skb_drop_old(): spin_unlock_irqrestore() before kfree_skb() 2022-11-03 23:56:52 +09:00
ceph
core net: gso: fix panic on frag_list with mixed head alloc types 2022-11-25 17:42:04 +01:00
dcb
dccp dccp: put dccp_qpolicy_full() and dccp_qpolicy_push() in the same lock 2022-08-25 11:17:49 +02:00
decnet
dns_resolver
dsa
ethernet
hsr
ieee802154 net: ieee802154: fix error return code in dgram_bind() 2022-11-03 23:56:54 +09:00
ife
ipv4 bpf, sockmap: Fix the sk->sk_forward_alloc warning of sk_stream_kill_queues 2022-11-25 17:42:04 +01:00
ipv6 tcp/udp: Make early_demux back namespacified. 2022-11-10 17:57:55 +01:00
iucv
kcm kcm: annotate data-races around kcm->rx_wait 2022-11-03 23:56:55 +09:00
key af_key: Do not call xfrm_probe_algs in parallel 2022-09-05 10:27:40 +02:00
l2tp ipv6: Fix signed integer overflow in l2tp_ip6_sendmsg 2022-06-22 14:11:21 +02:00
l3mdev
lapb
llc
mac80211 wifi: mac80211: allow bw change during channel switch in mesh 2022-10-26 13:22:22 +02:00
mac802154 mac802154: Fix LQI recording 2022-11-03 23:56:53 +09:00
mpls
ncsi
netfilter ipvs: fix WARNING in ip_vs_app_net_cleanup() 2022-11-10 17:57:51 +01:00
netlabel
netlink netlink: do not reset transport header in netlink_recvmsg() 2022-05-18 09:47:25 +02:00
netrom
nfc NFC: NULL out the dev->rfkill to prevent UAF 2022-06-14 18:11:33 +02:00
nsh
openvswitch openvswitch: switch from WARN to pr_warn 2022-11-03 23:56:56 +09:00
packet net/af_packet: check len when min_header_len equals to 0 2022-09-05 10:27:48 +02:00
phonet
psample
qrtr
rds net: rds: don't hold sock lock when cancelling work from rds_tcp_reset_callbacks() 2022-10-26 13:22:26 +02:00
rfkill
rose rose: Fix NULL pointer dereference in rose_send_frame() 2022-11-10 17:57:51 +01:00
rxrpc rxrpc: Fix calc of resend age 2022-09-28 11:03:58 +02:00
sched net: sched: Fix use after free in red_enqueue() 2022-11-10 17:57:50 +01:00
sctp sctp: handle the error returned from sctp_auth_asoc_init_active_key 2022-10-26 13:22:26 +02:00
smc net/smc: Remove redundant refcount increase 2022-09-15 12:04:50 +02:00
strparser
sunrpc SUNRPC: RPC level errors should set task->tk_rpc_status 2022-09-05 10:27:40 +02:00
switchdev
tipc tipc: fix a null-ptr-deref in tipc_topsrv_accept 2022-11-03 23:56:55 +09:00
tls net/tls: Fix race in TLS device down flow 2022-07-29 17:14:12 +02:00
unix io_uring/af_unix: defer registered files gc to io_uring release 2022-10-26 13:22:59 +02:00
vmw_vsock vhost/vsock: Use kvmalloc/kvfree for larger packets. 2022-10-26 13:22:25 +02:00
wimax
wireless wifi: cfg80211: fix memory leak in query_regdb_file() 2022-11-25 17:42:04 +01:00
x25
xdp
xfrm xfrm: Update ipcomp_scratches with NULL when freed 2022-10-26 13:22:49 +02:00
compat.c
Kconfig
Makefile
socket.c net: Fix a data-race around sysctl_somaxconn. 2022-09-05 10:27:42 +02:00
sysctl_net.c