Martin KaFai Lau
c9a368f1c0
bpf: net: Avoid incorrect bpf_sk_reuseport_detach call
...
bpf_sk_reuseport_detach is currently called when sk->sk_user_data
is not NULL. It is incorrect because sk->sk_user_data may not be
managed by the bpf's reuseport_array. It has been reported in [1] that,
the bpf_sk_reuseport_detach() which is called from udp_lib_unhash() has
corrupted the sk_user_data managed by l2tp.
This patch solves it by using another bit (defined as SK_USER_DATA_BPF)
of the sk_user_data pointer value. It marks that a sk_user_data is
managed/owned by BPF.
The patch depends on a PTRMASK introduced in
commit f1ff5ce2cd5e ("net, sk_msg: Clear sk_user_data pointer on clone if tagged").
[ Note: sk->sk_user_data is used by bpf's reuseport_array only when a sk is
added to the bpf's reuseport_array.
i.e. doing setsockopt(SO_REUSEPORT) and having "sk->sk_reuseport == 1"
alone will not stop sk->sk_user_data being used by other means. ]
[1]: https://lore.kernel.org/netdev/20200706121259.GA20199@katalix.com/
Fixes: 5dc4c4b7d4e8 ("bpf: Introduce BPF_MAP_TYPE_REUSEPORT_SOCKARRAY")
Reported-by: James Chapman <jchapman@katalix.com>
Reported-by: syzbot+9f092552ba9a5efca5df@syzkaller.appspotmail.com
Signed-off-by: Martin KaFai Lau <kafai@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Tested-by: James Chapman <jchapman@katalix.com>
Acked-by: James Chapman <jchapman@katalix.com>
Link: https://lore.kernel.org/bpf/20200709061110.4019316-1-kafai@fb.com
2020-07-09 22:03:31 +02:00
..
2020-03-27 09:29:57 +00:00
2020-05-20 16:30:33 +02:00
2019-05-30 11:29:22 -07:00
2020-05-19 12:50:14 -07:00
2020-06-15 18:06:52 -07:00
2020-06-30 10:45:08 -07:00
2020-02-27 12:06:20 -08:00
2019-06-05 17:37:07 +02:00
2020-06-25 16:11:33 -07:00
2020-06-15 18:06:52 -07:00
2020-02-28 14:51:30 +01:00
2020-05-24 13:47:27 -07:00
2020-04-23 12:29:21 -07:00
2019-05-30 11:26:41 -07:00
2020-05-28 11:11:46 -07:00
2020-02-28 12:12:53 -08:00
2019-12-11 15:01:23 -08:00
2019-11-06 16:14:48 -08:00
2019-01-23 11:18:00 -08:00
2019-06-19 17:09:55 +02:00
2020-05-22 16:46:16 -07:00
2019-05-24 17:37:53 +02:00
2020-05-01 12:15:37 -07:00
2019-07-04 12:30:48 -07:00
2020-05-09 01:05:30 -07:00
2020-02-27 18:50:19 -08:00
2019-10-30 17:34:35 -07:00
2019-05-21 11:28:45 +02:00
2019-06-19 17:09:55 +02:00
2020-06-05 09:22:00 +02:00
2020-02-29 14:39:08 +01:00
2020-05-29 16:11:50 -04:00
2019-05-21 11:28:45 +02:00
2020-03-27 19:40:38 -07:00
2020-05-20 20:31:32 -04:00
2019-05-30 11:29:52 -07:00
2019-05-30 11:29:52 -07:00
2020-06-01 11:49:23 -07:00
2020-02-29 21:52:20 -08:00
2019-05-21 11:52:39 +02:00
2019-05-21 11:52:39 +02:00
2020-03-31 17:29:33 -07:00
2020-05-12 13:08:07 -07:00
2019-12-16 16:09:44 -08:00
2018-03-05 12:52:45 -05:00
2020-05-08 21:33:33 -07:00
2020-07-07 15:33:28 -07:00
2020-05-05 13:23:29 -07:00
2020-02-19 13:52:32 +01:00
2020-04-20 07:34:16 +02:00
2019-06-19 17:09:55 +02:00
2018-05-28 22:59:54 -04:00
2019-12-24 22:37:30 -08:00
2020-03-03 13:28:48 -08:00
2020-06-30 10:45:07 -07:00
2020-06-19 20:12:58 -07:00
2019-02-27 12:50:17 -08:00
2019-11-08 09:11:49 +01:00
2019-10-23 20:13:22 -07:00
2019-12-09 10:36:44 -08:00
2019-11-05 18:20:55 -08:00
2020-07-01 15:49:11 -07:00
2019-03-22 12:09:31 -07:00
2018-12-10 15:53:04 -08:00
2020-06-22 21:12:44 -07:00
2019-10-25 16:24:32 -07:00
2020-02-13 14:19:00 -08:00
2019-02-22 12:56:24 -08:00
2019-05-30 11:26:41 -07:00
2020-05-11 13:18:54 -07:00
2019-04-22 21:50:53 -07:00
2019-05-30 11:26:32 -07:00
2019-05-30 11:26:32 -07:00
2020-03-30 13:45:04 -07:00
2020-05-09 00:48:20 +02:00
2020-06-04 15:59:56 -07:00
2020-07-03 14:34:53 -07:00
2019-08-08 15:55:10 -07:00
2020-06-09 13:26:23 -07:00
2020-03-02 11:16:28 -08:00
2019-09-27 12:05:02 +02:00
2019-02-08 21:50:15 -08:00
2020-02-19 11:20:59 -08:00
2020-05-22 14:00:38 -07:00
2020-05-18 17:35:02 -07:00
2019-06-18 20:48:45 -04:00
2020-05-26 16:06:07 -07:00
2020-06-30 12:29:39 -07:00
2019-11-02 13:54:56 -07:00
2020-05-28 11:11:45 -07:00
2019-06-19 11:37:47 -04:00
2020-05-29 13:02:33 -07:00
2020-05-28 11:11:46 -07:00
2020-02-05 14:28:09 +01:00
2018-03-27 09:51:23 +02:00
2019-06-19 17:09:55 +02:00
2019-05-30 11:26:32 -07:00
2018-07-11 23:10:19 -07:00
2019-10-08 13:23:05 -07:00
2018-09-13 09:04:58 -07:00
2020-03-29 22:30:57 -07:00
2020-05-31 11:27:03 +02:00
2019-05-30 11:26:41 -07:00
2020-03-26 20:17:36 -07:00
2020-03-02 11:16:27 -08:00
2020-02-29 21:52:20 -08:00
2020-02-28 12:08:37 -08:00
2020-05-29 21:20:20 -07:00
2020-05-16 13:51:10 -07:00
2019-12-09 10:36:44 -08:00
2020-04-22 12:15:07 -07:00
2020-06-08 10:13:56 -04:00
2018-05-28 22:59:54 -04:00
2020-06-01 15:21:02 -07:00
2018-08-01 09:52:30 -07:00
2019-05-21 11:28:45 +02:00
2020-04-30 17:51:42 -07:00
2019-11-12 08:18:03 -08:00
2019-04-11 13:59:49 -07:00
2020-06-10 13:20:20 -07:00
2020-02-20 10:09:25 -08:00
2020-03-04 13:25:55 -08:00
2019-05-30 11:26:32 -07:00
2020-05-15 10:23:11 -07:00
2020-07-03 14:34:53 -07:00
2019-05-30 11:26:32 -07:00
2019-09-16 09:18:03 +02:00
2019-05-30 11:26:32 -07:00
2020-03-14 21:03:46 -07:00
2020-04-24 12:33:43 +02:00
2019-10-09 21:34:31 -07:00
2018-05-16 07:23:35 +02:00
2020-03-23 21:57:44 -07:00
2020-03-29 22:30:57 -07:00
2018-03-13 18:37:02 +02:00
2018-11-06 15:00:45 -08:00
2019-04-22 21:47:25 -07:00
2020-05-15 10:23:11 -07:00
2018-07-21 10:43:12 -05:00
2019-05-30 11:26:32 -07:00
2019-05-30 11:26:32 -07:00
2020-06-04 15:39:32 -07:00
2018-04-11 10:33:46 -04:00
2019-11-15 12:28:28 -08:00
2019-10-05 16:29:00 -07:00
2020-02-29 21:52:19 -08:00
2020-07-09 22:03:31 +02:00
2018-03-01 21:21:36 -05:00
2019-06-19 17:09:55 +02:00
2020-06-01 11:56:11 -07:00
2019-05-30 11:26:32 -07:00
2020-06-03 16:27:18 -07:00
2019-05-30 11:26:32 -07:00
2018-05-08 00:02:41 -04:00
2019-10-04 14:07:07 -07:00
2020-06-01 14:48:32 -07:00
2018-07-07 10:58:49 +09:00
2020-05-07 17:28:18 -07:00
2020-03-09 22:34:58 +01:00
2018-02-16 15:57:42 -05:00
2019-11-14 18:12:17 -08:00
2020-05-22 14:00:38 -07:00
2018-01-24 19:13:45 -05:00
2019-06-05 17:30:29 +02:00
2019-12-09 10:28:43 -08:00
2019-11-16 12:39:10 -08:00
2020-05-21 17:31:27 -07:00
2020-05-21 17:31:27 -07:00
2020-06-01 15:02:53 -07:00
2020-06-04 10:45:14 +02:00
2020-06-30 15:44:03 +02:00