Alexei Starovoitov
d45ed4a4e3
net: fix unsafe set_memory_rw from softirq
on x86 system with net.core.bpf_jit_enable = 1
sudo tcpdump -i eth1 'tcp port 22'
causes the warning:
[ 56.766097] Possible unsafe locking scenario:
[ 56.766097]
[ 56.780146] CPU0
[ 56.786807] ----
[ 56.793188] lock(&(&vb->lock)->rlock);
[ 56.799593] <Interrupt>
[ 56.805889] lock(&(&vb->lock)->rlock);
[ 56.812266]
[ 56.812266] *** DEADLOCK ***
[ 56.812266]
[ 56.830670] 1 lock held by ksoftirqd/1/13:
[ 56.836838] #0: (rcu_read_lock){.+.+..}, at: [<ffffffff8118f44c>] vm_unmap_aliases+0x8c/0x380
[ 56.849757]
[ 56.849757] stack backtrace:
[ 56.862194] CPU: 1 PID: 13 Comm: ksoftirqd/1 Not tainted 3.12.0-rc3+ #45
[ 56.868721] Hardware name: System manufacturer System Product Name/P8Z77 WS, BIOS 3007 07/26/2012
[ 56.882004] ffffffff821944c0 ffff88080bbdb8c8 ffffffff8175a145 0000000000000007
[ 56.895630] ffff88080bbd5f40 ffff88080bbdb928 ffffffff81755b14 0000000000000001
[ 56.909313] ffff880800000001 ffff880800000000 ffffffff8101178f 0000000000000001
[ 56.923006] Call Trace:
[ 56.929532] [<ffffffff8175a145>] dump_stack+0x55/0x76
[ 56.936067] [<ffffffff81755b14>] print_usage_bug+0x1f7/0x208
[ 56.942445] [<ffffffff8101178f>] ? save_stack_trace+0x2f/0x50
[ 56.948932] [<ffffffff810cc0a0>] ? check_usage_backwards+0x150/0x150
[ 56.955470] [<ffffffff810ccb52>] mark_lock+0x282/0x2c0
[ 56.961945] [<ffffffff810ccfed>] __lock_acquire+0x45d/0x1d50
[ 56.968474] [<ffffffff810cce6e>] ? __lock_acquire+0x2de/0x1d50
[ 56.975140] [<ffffffff81393bf5>] ? cpumask_next_and+0x55/0x90
[ 56.981942] [<ffffffff810cef72>] lock_acquire+0x92/0x1d0
[ 56.988745] [<ffffffff8118f52a>] ? vm_unmap_aliases+0x16a/0x380
[ 56.995619] [<ffffffff817628f1>] _raw_spin_lock+0x41/0x50
[ 57.002493] [<ffffffff8118f52a>] ? vm_unmap_aliases+0x16a/0x380
[ 57.009447] [<ffffffff8118f52a>] vm_unmap_aliases+0x16a/0x380
[ 57.016477] [<ffffffff8118f44c>] ? vm_unmap_aliases+0x8c/0x380
[ 57.023607] [<ffffffff810436b0>] change_page_attr_set_clr+0xc0/0x460
[ 57.030818] [<ffffffff810cfb8d>] ? trace_hardirqs_on+0xd/0x10
[ 57.037896] [<ffffffff811a8330>] ? kmem_cache_free+0xb0/0x2b0
[ 57.044789] [<ffffffff811b59c3>] ? free_object_rcu+0x93/0xa0
[ 57.051720] [<ffffffff81043d9f>] set_memory_rw+0x2f/0x40
[ 57.058727] [<ffffffff8104e17c>] bpf_jit_free+0x2c/0x40
[ 57.065577] [<ffffffff81642cba>] sk_filter_release_rcu+0x1a/0x30
[ 57.072338] [<ffffffff811108e2>] rcu_process_callbacks+0x202/0x7c0
[ 57.078962] [<ffffffff81057f17>] __do_softirq+0xf7/0x3f0
[ 57.085373] [<ffffffff81058245>] run_ksoftirqd+0x35/0x70
cannot reuse jited filter memory, since it's readonly,
so use original bpf insns memory to hold work_struct
defer kfree of sk_filter until jit completed freeing
tested on x86_64 and i386
Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2013-10-07 15:16:45 -04:00
..
2013-09-02 11:49:56 +05:30
2013-09-26 14:02:33 -04:00
2013-08-21 09:28:29 +02:00
2013-09-09 11:15:49 -07:00
2013-07-03 11:54:50 -07:00
2013-07-09 10:33:30 -07:00
2013-08-14 13:55:15 +05:30
2013-08-05 08:52:45 +09:00
2013-08-19 14:20:21 +05:30
2013-09-06 13:21:16 -07:00
2013-08-17 19:34:52 +01:00
2013-07-10 11:10:27 -07:00
2013-09-09 16:35:29 -07:00
2013-09-10 13:33:09 -07:00
2013-09-05 14:54:29 -07:00
2013-08-15 15:42:57 -07:00
2013-08-26 11:32:07 -04:00
2013-08-30 21:37:01 +01:00
2013-09-16 20:35:55 +02:00
2013-08-28 13:34:41 +02:00
2013-09-12 11:35:33 -07:00
2013-08-30 17:34:52 -07:00
2013-09-10 13:03:41 -07:00
2013-09-17 11:49:25 +01:00
2013-09-10 13:33:09 -07:00
2013-09-10 20:04:59 -07:00
2013-09-28 15:42:49 -04:00
2013-08-02 12:33:54 -07:00
2013-07-31 14:20:39 +02:00
2013-07-03 16:31:35 -07:00
2013-07-30 11:53:12 -04:00
2013-07-16 09:32:17 -04:00
2013-07-03 16:07:42 -07:00
2013-08-25 09:39:12 -04:00
2013-07-29 13:04:12 -07:00
2013-07-15 11:07:56 +01:00
2013-07-09 10:33:19 -07:00
2013-09-11 15:58:04 -07:00
2013-07-03 16:07:43 -07:00
2013-09-30 14:31:02 -07:00
2013-09-11 15:59:04 -07:00
2013-07-08 01:23:15 -07:00
2013-09-21 13:57:47 -06:00
2013-07-03 16:07:39 -07:00
2013-09-04 09:23:46 -04:00
2013-08-30 23:44:11 -07:00
2013-07-09 16:30:35 -07:00
2013-08-26 18:40:56 -04:00
2013-08-19 12:27:17 -07:00
2013-08-27 17:50:38 -07:00
2013-07-05 11:09:28 +02:00
2013-09-11 15:56:57 -07:00
2013-07-30 11:11:44 +02:00
2013-09-11 15:58:25 -07:00
2013-08-14 17:14:51 +02:00
2013-08-14 17:14:54 +02:00
2013-07-08 10:13:40 -04:00
2013-09-13 15:09:52 +02:00
2013-08-27 01:44:40 +02:00
2013-09-10 02:54:50 +02:00
2013-07-15 02:09:47 +02:00
2013-09-11 15:59:10 -07:00
2013-09-07 12:56:26 +10:00
2013-09-10 18:56:29 -04:00
2013-08-27 22:09:12 -07:00
2013-08-18 17:39:55 -07:00
2013-09-20 10:36:34 -04:00
2013-09-09 10:26:33 -07:00
2013-08-02 12:33:54 -07:00
2013-08-27 09:18:29 +02:00
2013-08-29 21:55:23 -04:00
2013-09-10 13:37:36 -07:00
2013-06-28 16:04:36 +02:00
2013-06-28 16:04:36 +02:00
2013-06-28 16:04:36 +02:00
2013-07-06 14:09:38 -07:00
2013-07-23 16:01:28 -07:00
2013-07-06 14:09:38 -07:00
2013-07-03 13:25:24 +02:00
2013-07-15 11:25:00 +09:30
2013-09-03 20:57:49 -04:00
2013-09-07 19:54:57 -04:00
2013-08-26 20:15:23 +09:00
2013-10-07 15:16:45 -04:00
2013-07-27 20:24:36 +02:00
2013-08-22 22:13:54 -07:00
2013-09-12 10:12:47 -07:00
2013-09-13 23:06:40 -04:00
2013-09-06 09:17:30 +01:00
2013-09-06 09:17:30 +01:00
2013-06-29 12:57:13 +04:00
2013-09-03 07:41:11 +02:00
2013-09-11 15:57:35 -07:00
2013-07-09 10:33:21 -07:00
2013-09-13 15:09:52 +02:00
2013-08-30 08:42:01 +10:00
2013-08-26 13:46:11 +02:00
2013-08-26 13:46:11 +02:00
2013-09-13 15:11:21 +02:00
2013-08-26 21:40:24 +02:00
2013-09-12 15:38:03 -07:00
2013-09-11 15:57:49 -07:00
2013-09-26 14:20:21 -07:00
2013-08-23 10:22:29 +02:00
2013-08-26 09:30:03 -07:00
2013-08-29 14:08:24 -04:00
2013-07-23 16:52:47 -07:00
2013-07-18 13:05:23 -07:00
2013-07-23 16:52:47 -07:00
2013-08-22 20:30:15 -07:00
2013-09-11 15:59:37 -07:00
2013-09-13 15:09:52 +02:00
2013-08-14 11:38:34 +02:00
2013-09-11 15:59:42 -07:00
2013-08-29 15:32:08 -04:00
2013-09-13 15:09:52 +02:00
2013-09-13 15:09:52 +02:00
2013-09-13 15:09:52 +02:00
2013-07-01 08:12:41 -04:00
2013-08-09 10:49:00 +02:00
2013-08-20 11:46:54 -07:00
2013-08-09 07:53:54 -07:00
2013-08-09 07:53:54 -07:00
2013-07-26 16:19:48 -07:00
2013-09-13 15:09:52 +02:00
2013-09-20 15:38:26 -04:00
2013-08-28 21:35:14 -07:00
2013-07-25 15:39:04 -07:00
2013-09-11 15:58:52 -07:00
2013-07-25 12:35:39 +02:00
2013-09-17 12:52:31 +03:00
2013-07-03 16:07:43 -07:00
2013-08-25 09:39:12 -04:00
2013-09-10 18:56:32 -04:00
2013-07-16 22:00:14 -07:00
2013-07-23 16:47:08 -07:00
2013-07-12 13:51:18 +02:00
2013-09-07 15:49:18 -07:00
2013-09-11 15:59:45 -07:00
2013-08-23 09:02:14 -04:00
2013-08-06 14:10:45 +00:00
2013-09-11 15:57:51 -07:00
2013-09-24 17:00:26 -07:00
2013-08-21 11:52:20 -07:00
2013-09-11 15:57:48 -07:00
2013-08-22 23:20:54 +08:00
2013-09-13 10:55:58 -07:00
2013-09-11 15:58:01 -07:00
2013-09-13 10:55:58 -07:00
2013-09-12 15:38:03 -07:00
2013-07-03 16:07:32 -07:00
2013-09-11 15:58:01 -07:00
2013-09-07 09:48:41 -07:00
2013-09-03 16:35:47 +09:30
2013-08-20 15:37:42 +09:30
2013-07-24 09:14:46 -07:00
2013-08-12 15:27:01 +00:00
2013-09-28 12:46:21 +02:00
2013-08-02 12:33:54 -07:00
2013-09-08 20:20:23 -04:00
2013-07-03 16:08:05 -07:00
2013-10-07 12:29:26 -04:00
2013-08-28 00:26:48 +02:00
2013-06-27 22:44:16 -07:00
2013-09-06 14:49:16 -04:00
2013-09-03 15:26:29 -04:00
2013-09-26 10:20:18 -04:00
2013-07-25 21:54:01 +02:00
2013-08-27 13:52:52 -04:00
2013-09-03 16:40:32 -04:00
2013-08-21 10:29:51 +01:00
2013-09-10 13:53:52 -07:00
2013-09-24 21:12:32 -05:00
2013-08-28 20:50:19 +01:00
2013-08-12 15:27:01 +00:00
2013-08-27 10:53:44 +02:00
2013-09-10 13:53:52 -07:00
2013-08-15 17:22:27 -07:00
2013-09-03 22:52:48 -04:00
2013-07-03 16:07:32 -07:00
2013-07-03 16:07:31 -07:00
2013-09-05 14:54:29 -07:00
2013-09-15 17:41:30 -04:00
2013-07-23 03:58:42 +02:00
2013-09-06 13:30:06 -07:00
2013-09-09 14:29:15 -07:00
2013-08-23 16:08:27 -04:00
2013-09-04 11:55:10 -07:00
2013-07-03 16:08:03 -07:00
2013-07-04 15:51:45 -07:00
2013-07-15 01:31:37 +02:00
2013-07-03 16:16:20 +02:00
2013-08-27 18:42:48 -07:00
2013-08-19 21:22:34 -07:00
2013-08-14 17:14:52 +02:00
2013-08-06 14:21:01 -07:00
2013-08-19 10:18:11 -07:00
2013-07-09 10:33:26 -07:00
2013-06-28 23:15:06 +02:00
2013-08-14 19:54:30 +01:00
2013-08-20 16:53:58 -05:00
2013-08-17 09:32:32 -04:00
2013-09-11 15:59:36 -07:00
2013-09-11 15:59:37 -07:00
2013-09-11 15:59:20 -07:00
2013-08-18 17:40:16 -07:00
2013-08-31 14:43:50 -07:00
2013-07-09 10:33:29 -07:00
2013-09-03 10:07:40 -07:00
2013-09-12 15:38:02 -07:00
2013-07-12 12:07:46 +02:00
2013-07-03 16:08:05 -07:00
2013-07-03 16:08:05 -07:00
2013-07-09 10:33:30 -07:00
2013-09-12 15:38:02 -07:00
2013-07-25 19:30:03 +10:00
2013-07-09 10:33:28 -07:00
2013-07-08 13:36:41 +04:00
2013-09-12 09:25:23 -07:00
2013-08-27 14:25:27 +05:30
2013-08-20 17:10:41 -07:00
2013-08-27 14:25:09 +05:30
2013-09-10 18:56:32 -04:00
2013-09-01 14:16:33 -07:00
2013-09-30 22:32:39 -07:00
2013-09-04 20:51:33 +03:00
2013-09-04 23:11:42 +03:00
2013-09-04 20:53:16 +03:00
2013-09-24 17:00:25 -07:00
2013-08-02 12:33:54 -07:00
2013-08-07 16:52:33 -07:00
2013-08-13 08:19:26 -07:00
2013-08-30 17:26:09 -04:00
2013-09-12 15:38:02 -07:00
2013-08-13 17:57:47 -07:00
2013-09-11 15:58:25 -07:00
2013-08-28 09:51:41 -07:00
2013-07-31 12:16:45 -07:00
2013-08-29 13:54:34 -07:00
2013-09-03 09:10:24 -04:00
2013-08-14 17:58:56 +02:00
2013-09-12 07:49:51 +02:00
2013-07-23 16:47:10 -07:00
2013-07-23 16:42:59 -07:00
2013-07-24 15:12:53 -07:00
2013-08-12 11:56:16 -07:00
2013-09-07 14:35:32 -07:00
2013-07-09 10:33:29 -07:00
2013-08-05 10:52:36 -06:00
2013-08-29 13:30:21 +10:00
2013-09-03 19:17:59 +02:00
2013-07-09 10:47:53 +09:30
2013-07-09 18:24:39 -07:00
2013-09-11 15:57:09 -07:00
2013-07-09 10:33:21 -07:00
2013-09-03 18:25:03 -07:00
2013-09-11 15:58:01 -07:00
2013-08-14 17:14:54 +02:00
2013-08-22 08:53:30 -07:00
2013-07-30 08:30:16 -04:00
2013-09-11 15:58:02 -07:00
2013-07-12 12:07:46 +02:00
2013-07-25 19:30:03 +10:00
2013-07-10 18:11:34 -07:00