Commit e3989e6
committed
skbuff: skb_segment, Call zero copy functions before using skbuff frags
jira VULN-155407
cve CVE-2023-53354
commit-author Mohamed Khalfella <[email protected]>
commit 2ea3528
Commit bf5c25d ("skbuff: in skb_segment, call zerocopy functions
once per nskb") added the call to zero copy functions in skb_segment().
The change introduced a bug in skb_segment() because skb_orphan_frags()
may possibly change the number of fragments or allocate new fragments
altogether leaving nrfrags and frag to point to the old values. This can
cause a panic with stacktrace like the one below.
[ 193.894380] BUG: kernel NULL pointer dereference, address: 00000000000000bc
[ 193.895273] CPU: 13 PID: 18164 Comm: vh-net-17428 Kdump: loaded Tainted: G O 5.15.123+ #26
[ 193.903919] RIP: 0010:skb_segment+0xb0e/0x12f0
[ 194.021892] Call Trace:
[ 194.027422] <TASK>
[ 194.072861] tcp_gso_segment+0x107/0x540
[ 194.082031] inet_gso_segment+0x15c/0x3d0
[ 194.090783] skb_mac_gso_segment+0x9f/0x110
[ 194.095016] __skb_gso_segment+0xc1/0x190
[ 194.103131] netem_enqueue+0x290/0xb10 [sch_netem]
[ 194.107071] dev_qdisc_enqueue+0x16/0x70
[ 194.110884] __dev_queue_xmit+0x63b/0xb30
[ 194.121670] bond_start_xmit+0x159/0x380 [bonding]
[ 194.128506] dev_hard_start_xmit+0xc3/0x1e0
[ 194.131787] __dev_queue_xmit+0x8a0/0xb30
[ 194.138225] macvlan_start_xmit+0x4f/0x100 [macvlan]
[ 194.141477] dev_hard_start_xmit+0xc3/0x1e0
[ 194.144622] sch_direct_xmit+0xe3/0x280
[ 194.147748] __dev_queue_xmit+0x54a/0xb30
[ 194.154131] tap_get_user+0x2a8/0x9c0 [tap]
[ 194.157358] tap_sendmsg+0x52/0x8e0 [tap]
[ 194.167049] handle_tx_zerocopy+0x14e/0x4c0 [vhost_net]
[ 194.173631] handle_tx+0xcd/0xe0 [vhost_net]
[ 194.176959] vhost_worker+0x76/0xb0 [vhost]
[ 194.183667] kthread+0x118/0x140
[ 194.190358] ret_from_fork+0x1f/0x30
[ 194.193670] </TASK>
In this case calling skb_orphan_frags() updated nr_frags leaving nrfrags
local variable in skb_segment() stale. This resulted in the code hitting
i >= nrfrags prematurely and trying to move to next frag_skb using
list_skb pointer, which was NULL, and caused kernel panic. Move the call
to zero copy functions before using frags and nr_frags.
Fixes: bf5c25d ("skbuff: in skb_segment, call zerocopy functions once per nskb")
Signed-off-by: Mohamed Khalfella <[email protected]>
Reported-by: Amit Goyal <[email protected]>
Cc: [email protected]
Reviewed-by: Eric Dumazet <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
(cherry picked from commit 2ea3528)
Signed-off-by: Roxana Nicolescu <[email protected]>1 parent bcf7d6d commit e3989e6
1 file changed
+20
-14
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3864 | 3864 | | |
3865 | 3865 | | |
3866 | 3866 | | |
3867 | | - | |
3868 | 3867 | | |
3869 | 3868 | | |
3870 | | - | |
3871 | 3869 | | |
3872 | 3870 | | |
3873 | 3871 | | |
3874 | 3872 | | |
3875 | 3873 | | |
| 3874 | + | |
| 3875 | + | |
3876 | 3876 | | |
3877 | 3877 | | |
3878 | | - | |
3879 | 3878 | | |
3880 | 3879 | | |
3881 | | - | |
| 3880 | + | |
3882 | 3881 | | |
3883 | 3882 | | |
3884 | 3883 | | |
| |||
3955 | 3954 | | |
3956 | 3955 | | |
3957 | 3956 | | |
| 3957 | + | |
| 3958 | + | |
| 3959 | + | |
| 3960 | + | |
| 3961 | + | |
| 3962 | + | |
| 3963 | + | |
3958 | 3964 | | |
3959 | 3965 | | |
3960 | 3966 | | |
| |||
3979 | 3985 | | |
3980 | 3986 | | |
3981 | 3987 | | |
| 3988 | + | |
| 3989 | + | |
| 3990 | + | |
| 3991 | + | |
3982 | 3992 | | |
3983 | 3993 | | |
3984 | 3994 | | |
| |||
3997 | 4007 | | |
3998 | 4008 | | |
3999 | 4009 | | |
4000 | | - | |
4001 | 4010 | | |
4002 | 4011 | | |
4003 | | - | |
4004 | | - | |
4005 | | - | |
4006 | 4012 | | |
4007 | 4013 | | |
4008 | 4014 | | |
| |||
4067 | 4073 | | |
4068 | 4074 | | |
4069 | 4075 | | |
4070 | | - | |
4071 | | - | |
| 4076 | + | |
4072 | 4077 | | |
4073 | 4078 | | |
4074 | 4079 | | |
4075 | 4080 | | |
| 4081 | + | |
| 4082 | + | |
| 4083 | + | |
| 4084 | + | |
| 4085 | + | |
4076 | 4086 | | |
4077 | 4087 | | |
4078 | 4088 | | |
| |||
4086 | 4096 | | |
4087 | 4097 | | |
4088 | 4098 | | |
4089 | | - | |
4090 | | - | |
4091 | | - | |
4092 | | - | |
4093 | 4099 | | |
4094 | 4100 | | |
4095 | 4101 | | |
| |||
0 commit comments