projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
34b4688
)
net: sched: fix possible crash in tcf_action_destroy()
author
Eric Dumazet
<
[email protected]
>
Wed, 18 Sep 2019 19:57:04 +0000
(12:57 -0700)
committer
David S. Miller
<
[email protected]
>
Tue, 24 Sep 2019 14:33:57 +0000
(16:33 +0200)
If the allocation done in tcf_exts_init() failed,
we end up with a NULL pointer in exts->actions.
kasan: GPF could be caused by NULL-ptr deref or user memory access
general protection fault: 0000 [#1] PREEMPT SMP KASAN
CPU: 1 PID: 8198 Comm: syz-executor.3 Not tainted 5.3.0-rc8+ #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
RIP: 0010:tcf_action_destroy+0x71/0x160 net/sched/act_api.c:705
Code: c3 08 44 89 ee e8 4f cb bb fb 41 83 fd 20 0f 84 c9 00 00 00 e8 c0 c9 bb fb 48 89 d8 48 b9 00 00 00 00 00 fc ff df 48 c1 e8 03 <80> 3c 08 00 0f 85 c0 00 00 00 4c 8b 33 4d 85 f6 0f 84 9d 00 00 00
RSP: 0018:
ffff888096e16ff0
EFLAGS:
00010246
RAX:
0000000000000000
RBX:
0000000000000000
RCX:
dffffc0000000000
RDX:
0000000000040000
RSI:
ffffffff85b6ab30
RDI:
0000000000000000
RBP:
ffff888096e17020
R08:
ffff8880993f6140
R09:
fffffbfff11cae67
R10:
fffffbfff11cae66
R11:
ffffffff88e57333
R12:
0000000000000000
R13:
0000000000000000
R14:
ffff888096e177a0
R15:
0000000000000001
FS:
00007f62bc84a700
(0000) GS:
ffff8880ae900000
(0000) knlGS:
0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0:
0000000080050033
CR2:
0000000000758040
CR3:
0000000088b64000
CR4:
00000000001426e0
DR0:
0000000000000000
DR1:
0000000000000000
DR2:
0000000000000000
DR3:
0000000000000000
DR6:
00000000fffe0ff0
DR7:
0000000000000400
Call Trace:
tcf_exts_destroy+0x38/0xb0 net/sched/cls_api.c:3030
tcindex_set_parms+0xf7f/0x1e50 net/sched/cls_tcindex.c:488
tcindex_change+0x230/0x318 net/sched/cls_tcindex.c:519
tc_new_tfilter+0xa4b/0x1c70 net/sched/cls_api.c:2152
rtnetlink_rcv_msg+0x838/0xb00 net/core/rtnetlink.c:5214
netlink_rcv_skb+0x177/0x450 net/netlink/af_netlink.c:2477
rtnetlink_rcv+0x1d/0x30 net/core/rtnetlink.c:5241
netlink_unicast_kernel net/netlink/af_netlink.c:1302 [inline]
netlink_unicast+0x531/0x710 net/netlink/af_netlink.c:1328
netlink_sendmsg+0x8a5/0xd60 net/netlink/af_netlink.c:1917
sock_sendmsg_nosec net/socket.c:637 [inline]
sock_sendmsg+0xd7/0x130 net/socket.c:657
___sys_sendmsg+0x3e2/0x920 net/socket.c:2311
__sys_sendmmsg+0x1bf/0x4d0 net/socket.c:2413
__do_sys_sendmmsg net/socket.c:2442 [inline]
Fixes: 90b73b77d08e ("net: sched: change action API to use array of pointers to actions")
Signed-off-by: Eric Dumazet <
[email protected]
>
Reported-by: syzbot <
[email protected]
>
Cc: Vlad Buslov <
[email protected]
>
Cc: Jiri Pirko <
[email protected]
>
Signed-off-by: David S. Miller <
[email protected]
>
net/sched/cls_api.c
patch
|
blob
|
history
diff --git
a/net/sched/cls_api.c
b/net/sched/cls_api.c
index 32577c2489687bd9f19aa919f5926b5158eabbd3..64584a1df42548427014d98c4c8e088aa5351a6f 100644
(file)
--- a/
net/sched/cls_api.c
+++ b/
net/sched/cls_api.c
@@
-2894,8
+2894,10
@@
out:
void tcf_exts_destroy(struct tcf_exts *exts)
{
#ifdef CONFIG_NET_CLS_ACT
- tcf_action_destroy(exts->actions, TCA_ACT_UNBIND);
- kfree(exts->actions);
+ if (exts->actions) {
+ tcf_action_destroy(exts->actions, TCA_ACT_UNBIND);
+ kfree(exts->actions);
+ }
exts->nr_actions = 0;
#endif
}