projects
/
linux-2.6-microblaze.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
78a3613
)
net: ip: fix unexpected return in fib_validate_source()
author
Menglong Dong
<menglong8.dong@gmail.com>
Mon, 18 Nov 2024 09:14:27 +0000
(17:14 +0800)
committer
Jakub Kicinski
<kuba@kernel.org>
Tue, 19 Nov 2024 02:57:00 +0000
(18:57 -0800)
The errno should be replaced with drop reasons in fib_validate_source(),
and the "-EINVAL" shouldn't be returned. And this causes a warning, which
is reported by syzkaller:
netlink: 'syz-executor371': attribute type 4 has an invalid length.
------------[ cut here ]------------
WARNING: CPU: 0 PID: 5842 at net/core/skbuff.c:1219 __sk_skb_reason_drop net/core/skbuff.c:1216 [inline]
WARNING: CPU: 0 PID: 5842 at net/core/skbuff.c:1219 sk_skb_reason_drop+0x87/0x380 net/core/skbuff.c:1241
Modules linked in:
CPU: 0 UID: 0 PID: 5842 Comm: syz-executor371 Not tainted
6.12.0-rc6-syzkaller-01362-ga58f00ed24b8
#0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/30/2024
RIP: 0010:__sk_skb_reason_drop net/core/skbuff.c:1216 [inline]
RIP: 0010:sk_skb_reason_drop+0x87/0x380 net/core/skbuff.c:1241
Code: 00 00 00 fc ff df 41 8d 9e 00 00 fc ff bf 01 00 fc ff 89 de e8 ea 9f 08 f8 81 fb 00 00 fc ff 77 3a 4c 89 e5 e8 9a 9b 08 f8 90 <0f> 0b 90 eb 5e bf 01 00 00 00 89 ee e8 c8 9f 08 f8 85 ed 0f 8e 49
RSP: 0018:
ffffc90003d57078
EFLAGS:
00010293
RAX:
ffffffff898c3ec6
RBX:
00000000fffbffea
RCX:
ffff8880347a5a00
RDX:
0000000000000000
RSI:
00000000fffbffea
RDI:
00000000fffc0001
RBP:
dffffc0000000000
R08:
ffffffff898c3eb6
R09:
1ffff110023eb7d4
R10:
dffffc0000000000
R11:
ffffed10023eb7d5
R12:
dffffc0000000000
R13:
ffff888011f5bdc0
R14:
00000000ffffffea
R15:
0000000000000000
FS:
000055557d41e380
(0000) GS:
ffff8880b8600000
(0000) knlGS:
0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0:
0000000080050033
CR2:
000056519d31d608
CR3:
000000007854e000
CR4:
00000000003526f0
DR0:
0000000000000000
DR1:
0000000000000000
DR2:
0000000000000000
DR3:
0000000000000000
DR6:
00000000fffe0ff0
DR7:
0000000000000400
Call Trace:
<TASK>
kfree_skb_reason include/linux/skbuff.h:1263 [inline]
ip_rcv_finish_core+0xfde/0x1b50 net/ipv4/ip_input.c:424
ip_list_rcv_finish net/ipv4/ip_input.c:610 [inline]
ip_sublist_rcv+0x3b1/0xab0 net/ipv4/ip_input.c:636
ip_list_rcv+0x42b/0x480 net/ipv4/ip_input.c:670
__netif_receive_skb_list_ptype net/core/dev.c:5715 [inline]
__netif_receive_skb_list_core+0x94e/0x980 net/core/dev.c:5762
__netif_receive_skb_list net/core/dev.c:5814 [inline]
netif_receive_skb_list_internal+0xa51/0xe30 net/core/dev.c:5905
netif_receive_skb_list+0x55/0x4b0 net/core/dev.c:5957
xdp_recv_frames net/bpf/test_run.c:280 [inline]
xdp_test_run_batch net/bpf/test_run.c:361 [inline]
bpf_test_run_xdp_live+0x1b5e/0x21b0 net/bpf/test_run.c:390
bpf_prog_test_run_xdp+0x805/0x11e0 net/bpf/test_run.c:1318
bpf_prog_test_run+0x2e4/0x360 kernel/bpf/syscall.c:4266
__sys_bpf+0x48d/0x810 kernel/bpf/syscall.c:5671
__do_sys_bpf kernel/bpf/syscall.c:5760 [inline]
__se_sys_bpf kernel/bpf/syscall.c:5758 [inline]
__x64_sys_bpf+0x7c/0x90 kernel/bpf/syscall.c:5758
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f18af25a8e9
Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:
00007ffee4090af8
EFLAGS:
00000246
ORIG_RAX:
0000000000000141
RAX:
ffffffffffffffda
RBX:
0000000000000000
RCX:
00007f18af25a8e9
RDX:
0000000000000048
RSI:
0000000020000600
RDI:
000000000000000a
RBP:
0000000000000000
R08:
0000000000000000
R09:
0000000000000000
R10:
0000000000000000
R11:
0000000000000246
R12:
0000000000000000
R13:
0000000000000000
R14:
0000000000000000
R15:
0000000000000000
Fix it by returning "-SKB_DROP_REASON_IP_LOCAL_SOURCE" instead of
"-EINVAL" in fib_validate_source().
Reported-by: syzbot+52fbd90f020788ec7709@syzkaller.appspotmail.com
Closes: https://lore.kernel.org/netdev/
6738e539
.
050a0220
.e1c64.0002.GAE@google.com/
Fixes:
82d9983ebeb8
("net: ip: make ip_route_input_noref() return drop reasons")
Signed-off-by: Menglong Dong <dongml2@chinatelecom.cn>
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ipv4/fib_frontend.c
patch
|
blob
|
history
diff --git
a/net/ipv4/fib_frontend.c
b/net/ipv4/fib_frontend.c
index
87bb36a
..
272e42d
100644
(file)
--- a/
net/ipv4/fib_frontend.c
+++ b/
net/ipv4/fib_frontend.c
@@
-447,7
+447,7
@@
int fib_validate_source(struct sk_buff *skb, __be32 src, __be32 dst,
* and the same host but different containers are not.
*/
if (inet_lookup_ifaddr_rcu(net, src))
- return -
EINVAL
;
+ return -
SKB_DROP_REASON_IP_LOCAL_SOURCE
;
ok:
*itag = 0;