Eric Dumazet
96e5ae4e76
bpf: fix numa_node validation
...
syzkaller reported crashes in bpf map creation or map update [1]
Problem is that nr_node_ids is a signed integer,
NUMA_NO_NODE is also an integer, so it is very tempting
to declare numa_node as a signed integer.
This means the typical test to validate a user provided value :
if (numa_node != NUMA_NO_NODE &&
(numa_node >= nr_node_ids ||
!node_online(numa_node)))
must be written :
if (numa_node != NUMA_NO_NODE &&
((unsigned int)numa_node >= nr_node_ids ||
!node_online(numa_node)))
[1]
kernel BUG at mm/slab.c:3256!
invalid opcode: 0000 [#1 ] SMP KASAN
Dumping ftrace buffer:
(ftrace buffer empty)
Modules linked in:
CPU: 0 PID: 2946 Comm: syzkaller916108 Not tainted 4.13.0-rc7+ #35
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
task: ffff8801d2bc60c0 task.stack: ffff8801c0c90000
RIP: 0010:____cache_alloc_node+0x1d4/0x1e0 mm/slab.c:3292
RSP: 0018:ffff8801c0c97638 EFLAGS: 00010096
RAX: ffffffffffff8b7b RBX: 0000000001080220 RCX: 0000000000000000
RDX: 00000000ffff8b7b RSI: 0000000001080220 RDI: ffff8801dac00040
RBP: ffff8801c0c976c0 R08: 0000000000000000 R09: 0000000000000000
R10: ffff8801c0c97620 R11: 0000000000000001 R12: ffff8801dac00040
R13: ffff8801dac00040 R14: 0000000000000000 R15: 00000000ffff8b7b
FS: 0000000002119940(0000) GS:ffff8801db200000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000020001fec CR3: 00000001d2980000 CR4: 00000000001406f0
Call Trace:
__do_kmalloc_node mm/slab.c:3688 [inline]
__kmalloc_node+0x33/0x70 mm/slab.c:3696
kmalloc_node include/linux/slab.h:535 [inline]
alloc_htab_elem+0x2a8/0x480 kernel/bpf/hashtab.c:740
htab_map_update_elem+0x740/0xb80 kernel/bpf/hashtab.c:820
map_update_elem kernel/bpf/syscall.c:587 [inline]
SYSC_bpf kernel/bpf/syscall.c:1468 [inline]
SyS_bpf+0x20c5/0x4c40 kernel/bpf/syscall.c:1443
entry_SYSCALL_64_fastpath+0x1f/0xbe
RIP: 0033:0x440409
RSP: 002b:00007ffd1f1792b8 EFLAGS: 00000246 ORIG_RAX: 0000000000000141
RAX: ffffffffffffffda RBX: 00000000004002c8 RCX: 0000000000440409
RDX: 0000000000000020 RSI: 0000000020006000 RDI: 0000000000000002
RBP: 0000000000000086 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000401d70
R13: 0000000000401e00 R14: 0000000000000000 R15: 0000000000000000
Code: 83 c2 01 89 50 18 4c 03 70 08 e8 38 f4 ff ff 4d 85 f6 0f 85 3e ff ff ff 44 89 fe 4c 89 ef e8 94 fb ff ff 49 89 c6 e9 2b ff ff ff <0f> 0b 0f 0b 0f 0b 66 0f 1f 44 00 00 55 48 89 e5 41 57 41 56 41
RIP: ____cache_alloc_node+0x1d4/0x1e0 mm/slab.c:3292 RSP: ffff8801c0c97638
---[ end trace d745f355da2e33ce ]---
Kernel panic - not syncing: Fatal exception
Fixes: 96eabe7a40
("bpf: Allow selecting numa node during map creation")
Signed-off-by: Eric Dumazet <edumazet@google.com >
Cc: Martin KaFai Lau <kafai@fb.com >
Cc: Alexei Starovoitov <ast@fb.com >
Cc: Daniel Borkmann <daniel@iogearbox.net >
Acked-by: Daniel Borkmann <daniel@iogearbox.net >
Acked-by: Alexei Starovoitov <ast@kernel.org >
Signed-off-by: David S. Miller <davem@davemloft.net >
2017-09-05 09:10:02 -07:00
..
2017-09-05 09:10:02 -07:00
2017-08-29 11:16:21 -07:00
2017-06-09 11:47:38 +02:00
2017-03-02 08:42:34 +01:00
2017-09-01 17:42:05 -07:00
2017-05-12 15:57:15 -07:00
2017-08-20 10:49:05 +02:00
2017-06-20 10:42:19 +02:00
2017-07-21 11:11:23 -07:00
2017-08-10 15:54:06 -07:00
2017-07-05 11:11:26 -07:00
2017-06-08 18:52:45 -07:00
2017-08-27 13:55:12 -07:00
2017-08-24 11:40:18 +02:00
2017-09-01 17:42:05 -07:00
2017-03-02 08:42:39 +01:00
2017-05-23 10:01:37 +02:00
2017-05-03 11:05:15 -07:00
2017-05-03 11:05:15 -07:00
2017-08-16 16:48:34 -07:00
2017-07-20 10:22:26 -07:00
2017-06-12 18:07:43 -04:00
2017-05-02 10:16:05 -04:00
2017-07-05 11:24:05 -07:00
2017-01-12 07:01:56 -07:00
2017-07-06 20:57:13 -07:00
2016-12-24 11:46:01 -08:00
2017-07-11 22:25:44 +02:00
2017-07-12 16:26:00 -07:00
2017-05-18 10:30:19 -06:00
2017-03-02 08:42:39 +01:00
2017-07-10 16:32:36 -07:00
2017-07-10 16:32:35 -07:00
2017-08-31 16:33:15 -07:00
2016-12-24 11:46:01 -08:00
2017-08-09 14:00:54 -07:00
2017-07-10 16:32:34 -07:00
2017-05-08 17:15:10 -07:00
2017-05-26 10:10:45 +02:00
2017-07-10 16:32:34 -07:00
2017-07-12 16:26:01 -07:00
2016-10-25 11:31:51 +02:00
2017-05-08 17:15:12 -07:00
2017-07-12 16:26:00 -07:00
2017-07-12 16:26:02 -07:00
2017-07-12 16:26:02 -07:00
2017-07-12 16:26:00 -07:00
2017-08-18 15:32:01 -07:00
2017-07-08 11:05:35 +02:00
2017-07-12 16:25:59 -07:00
2017-08-31 16:33:15 -07:00
2017-03-02 08:42:39 +01:00
2017-07-12 16:26:02 -07:00
2017-01-23 11:32:16 -08:00
2017-07-06 16:24:32 -07:00
2017-07-12 17:22:01 -07:00
2017-02-24 17:46:56 -08:00
2017-03-13 15:57:41 -03:00
2017-05-26 10:10:37 +02:00
2017-03-02 08:42:34 +01:00
2017-04-18 10:37:13 +02:00
2017-05-13 17:26:01 -05:00
2017-08-21 12:47:31 -07:00
2017-03-02 08:42:39 +01:00
2017-05-23 07:40:44 -05:00
2017-05-02 11:38:06 -07:00
2017-06-26 09:24:00 -07:00
2017-08-18 15:32:02 -07:00
2017-05-23 10:01:32 +02:00
2017-03-02 08:42:35 +01:00
2017-04-11 09:06:32 +02:00
2017-03-08 09:18:02 +01:00
2017-05-26 10:10:36 +02:00
2016-12-22 22:58:37 -05:00
2017-07-12 09:15:00 -07:00
2017-07-12 16:26:00 -07:00
2017-07-12 16:26:02 -07:00
2017-05-08 17:15:12 -07:00
2017-03-02 08:42:27 +01:00
2017-03-02 08:42:35 +01:00
2017-03-02 08:42:39 +01:00
2017-03-06 15:26:37 -06:00
2017-03-02 08:42:31 +01:00
2016-09-05 13:52:39 +02:00
2017-03-02 08:42:29 +01:00
2017-03-02 08:42:29 +01:00
2017-03-03 01:45:36 +01:00
2017-03-02 08:42:38 +01:00
2017-08-18 12:35:02 +02:00
2017-08-18 12:35:02 +02:00
2017-07-28 11:05:52 -04:00