From mboxrd@z Thu Jan 1 00:00:00 1970 From: Prashant Bhole Subject: Re: [RFC bpf-next 2/4] bpf: return EOPNOTSUPP when map lookup isn't supported Date: Thu, 20 Sep 2018 11:44:46 +0900 Message-ID: <031efea7-9209-2f9b-a97c-62b5d0a1d954@lab.ntt.co.jp> References: <20180919075143.9308-1-bhole_prashant_q7@lab.ntt.co.jp> <20180919075143.9308-3-bhole_prashant_q7@lab.ntt.co.jp> <20180919151422.tysdcku2hxaq37xw@ast-mbp> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Cc: Alexei Starovoitov , Daniel Borkmann , Jakub Kicinski , Quentin Monnet , "David S . Miller" , netdev@vger.kernel.org To: Alexei Starovoitov Return-path: Received: from tama500.ecl.ntt.co.jp ([129.60.39.148]:49182 "EHLO tama500.ecl.ntt.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726065AbeITI0u (ORCPT ); Thu, 20 Sep 2018 04:26:50 -0400 In-Reply-To: <20180919151422.tysdcku2hxaq37xw@ast-mbp> Content-Language: en-US Sender: netdev-owner@vger.kernel.org List-ID: On 9/20/2018 12:14 AM, Alexei Starovoitov wrote: > On Wed, Sep 19, 2018 at 04:51:41PM +0900, Prashant Bhole wrote: >> Return ERR_PTR(-EOPNOTSUPP) from map_lookup_elem() methods of below >> map types: >> - BPF_MAP_TYPE_PROG_ARRAY >> - BPF_MAP_TYPE_STACK_TRACE >> - BPF_MAP_TYPE_XSKMAP >> - BPF_MAP_TYPE_SOCKMAP/BPF_MAP_TYPE_SOCKHASH >> >> Signed-off-by: Prashant Bhole >> --- >> kernel/bpf/arraymap.c | 2 +- >> kernel/bpf/sockmap.c | 2 +- >> kernel/bpf/stackmap.c | 2 +- >> kernel/bpf/xskmap.c | 2 +- >> 4 files changed, 4 insertions(+), 4 deletions(-) >> >> diff --git a/kernel/bpf/arraymap.c b/kernel/bpf/arraymap.c >> index dded84cbe814..24583da9ffd1 100644 >> --- a/kernel/bpf/arraymap.c >> +++ b/kernel/bpf/arraymap.c >> @@ -449,7 +449,7 @@ static void fd_array_map_free(struct bpf_map *map) >> >> static void *fd_array_map_lookup_elem(struct bpf_map *map, void *key) >> { >> - return NULL; >> + return ERR_PTR(-EOPNOTSUPP); >> } > > conceptually the set looks good to me. > Please add a test to test_verifier.c to make sure > that these lookup helpers cannot be called from BPF program. > Otherwise this diff may cause crashes. Thanks for reviewing. Is the verifier change below sufficient? --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -2128,10 +2128,18 @@ static int check_map_func_compatibility(struct bpf_verifier_env *env, if (env->subprog_cnt > 1) { verbose(env, "tail_calls are not allowed in programs with bpf-to-bpf calls\n"); return -EINVAL; } break; + case BPF_FUNC_map_lookup_elem: + if (map->map_type == BPF_MAP_TYPE_PROG_ARRAY || + map->map_type == BPF_MAP_TYPE_STACK_TRACE || + map->map_type == BPF_MAP_TYPE_XSKMAP || + map->map_type == BPF_MAP_TYPE_SOCKMAP || + map->map_type == BPF_MAP_TYPE_SOCKHASH) + goto error; + break; case BPF_FUNC_perf_event_read: case BPF_FUNC_perf_event_output: case BPF_FUNC_perf_event_read_value: if (map->map_type != BPF_MAP_TYPE_PERF_EVENT_ARRAY) goto error; -Prashant