From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.6 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id ED410C282C8 for ; Mon, 28 Jan 2019 17:21:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id BB8CA20989 for ; Mon, 28 Jan 2019 17:21:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Kts8mhnf" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731853AbfA1RVb (ORCPT ); Mon, 28 Jan 2019 12:21:31 -0500 Received: from mail-pg1-f201.google.com ([209.85.215.201]:42355 "EHLO mail-pg1-f201.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731667AbfA1RVa (ORCPT ); Mon, 28 Jan 2019 12:21:30 -0500 Received: by mail-pg1-f201.google.com with SMTP id q62so11947686pgq.9 for ; Mon, 28 Jan 2019 09:21:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=OGSXEcQpf8ihqx7CcNdpGs0SglTTVWzaPcCAzInX3a0=; b=Kts8mhnfeSjC72d8INK1NW2OMeZcx6DSwQ7pzXUo3JG/bkPPtj1JOAa4hBJzGRULL4 7iLk8+FCSoEahjpMtE/kYDkFsF6cuvwmyNTDc33lJvKcn/OD4lMg2lY9AXqbu3OIGFK4 eioKCq8EF2FnSwxMS0Izm7Yh7run6ZvduPa+7D2cChNCVXTqwE/7fTbw+hAmY2EDBZe5 a68Krmi4mmNgRLiic0eRCEyiea2HEHka9YS8ZQbSUXye18jh7FqJ3R2mZOhTtSMQwgEj OUJrKST76aVofMqU7riaGDbafgzEEsOhHkr7rClZVpsgtR/iqkte0mb6R6iJsTOnw5rW wvTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=OGSXEcQpf8ihqx7CcNdpGs0SglTTVWzaPcCAzInX3a0=; b=ryBIMCUSK8RDJIFeUOQ90fksxIsrhnjThCKr0Szi9qUW68faeWMQU+3kKvp1QHijZb mD1EG4LwIpXexzhotbcPVvSTyfXBf4mjuv7ZtdhLMjhJEFE9QCHKumW9dwnPYETODRXI VPz0yBbDUK5pU3nokTrPduKcEGH0TqXYoQJkYtCes2eqGtJoSu9nUCHG/zggeMCM08E2 pIFsaiyJ30DENB7Ho5g4rI6PvCjjbcKIK2xKe0jvp04Gej8L/2Ri20Y3IXQPsL6L7K1g d4TX6cx8tK6kmQIHGIltcXyNasu9H2OHHERtvC+mxM+/BKe0+eYIYrDZkFcLYFEtrXul ZZbA== X-Gm-Message-State: AHQUAuaoxXjSMaU/I3zjA3WRsmZ7WmlRfWaU9OR6fbq/O678HcOJF3UU oWt6fKszH5mpLoo2zwKzrX75wR4pOOytcc/NhmYRZGW+Qv3zOvBq4ZQHlvxpHRWigfPyv9iW8XG VlPMTCS3ZO/+3GvaPFM3d66NlCm63agcxzxX1lj8CNEfnnTc228D9JQ== X-Google-Smtp-Source: AHgI3IZg2OOW+iFtJCxg54YGbDvSA0ZnUxLeqpN36bZODDFT3mNvo2lnceW1pEJDhEKIq8vlRpniT3g= X-Received: by 2002:a63:b941:: with SMTP id v1mr354905pgo.54.1548696089361; Mon, 28 Jan 2019 09:21:29 -0800 (PST) Date: Mon, 28 Jan 2019 09:21:17 -0800 In-Reply-To: <20190128172119.12105-1-sdf@google.com> Message-Id: <20190128172119.12105-4-sdf@google.com> Mime-Version: 1.0 References: <20190128172119.12105-1-sdf@google.com> X-Mailer: git-send-email 2.20.1.495.gaa96b0ce6b-goog Subject: [PATCH bpf-next v3 3/5] selftests/bpf: skip verifier tests for unsupported map types From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, ast@kernel.org, daniel@iogearbox.net, Stanislav Fomichev Content-Type: text/plain; charset="UTF-8" Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Use recently introduced bpf_probe_map_type() to skip tests in the test_verifier if map creation (create_map) fails. It's handled explicitly for each fixup, i.e. if bpf_create_map returns negative fd, we probe the kernel for the appropriate map support and skip the test is map type is not supported. Signed-off-by: Stanislav Fomichev --- tools/testing/selftests/bpf/test_verifier.c | 36 +++++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/bpf/test_verifier.c b/tools/testing/selftests/bpf/test_verifier.c index 2a36f9f2ee8f..97188dbe80bd 100644 --- a/tools/testing/selftests/bpf/test_verifier.c +++ b/tools/testing/selftests/bpf/test_verifier.c @@ -265,6 +265,16 @@ static int probe_filter_length(const struct bpf_insn *fp) return len + 1; } +static bool skip_unsupported_map(enum bpf_map_type map_type) +{ + if (!bpf_probe_map_type(map_type, 0)) { + printf("SKIP (unsupported map type %d)\n", map_type); + skips++; + return true; + } + return false; +} + static int create_map(uint32_t type, uint32_t size_key, uint32_t size_value, uint32_t max_elem) { @@ -272,8 +282,11 @@ static int create_map(uint32_t type, uint32_t size_key, fd = bpf_create_map(type, size_key, size_value, max_elem, type == BPF_MAP_TYPE_HASH ? BPF_F_NO_PREALLOC : 0); - if (fd < 0) + if (fd < 0) { + if (skip_unsupported_map(type)) + return -1; printf("Failed to create hash map '%s'!\n", strerror(errno)); + } return fd; } @@ -323,6 +336,8 @@ static int create_prog_array(enum bpf_prog_type prog_type, uint32_t max_elem, mfd = bpf_create_map(BPF_MAP_TYPE_PROG_ARRAY, sizeof(int), sizeof(int), max_elem, 0); if (mfd < 0) { + if (skip_unsupported_map(BPF_MAP_TYPE_PROG_ARRAY)) + return -1; printf("Failed to create prog array '%s'!\n", strerror(errno)); return -1; } @@ -353,15 +368,20 @@ static int create_map_in_map(void) inner_map_fd = bpf_create_map(BPF_MAP_TYPE_ARRAY, sizeof(int), sizeof(int), 1, 0); if (inner_map_fd < 0) { + if (skip_unsupported_map(BPF_MAP_TYPE_ARRAY)) + return -1; printf("Failed to create array '%s'!\n", strerror(errno)); return inner_map_fd; } outer_map_fd = bpf_create_map_in_map(BPF_MAP_TYPE_ARRAY_OF_MAPS, NULL, sizeof(int), inner_map_fd, 1, 0); - if (outer_map_fd < 0) + if (outer_map_fd < 0) { + if (skip_unsupported_map(BPF_MAP_TYPE_ARRAY_OF_MAPS)) + return -1; printf("Failed to create array of maps '%s'!\n", strerror(errno)); + } close(inner_map_fd); @@ -376,9 +396,12 @@ static int create_cgroup_storage(bool percpu) fd = bpf_create_map(type, sizeof(struct bpf_cgroup_storage_key), TEST_DATA_LEN, 0, 0); - if (fd < 0) + if (fd < 0) { + if (skip_unsupported_map(type)) + return -1; printf("Failed to create cgroup storage '%s'!\n", strerror(errno)); + } return fd; } @@ -582,6 +605,7 @@ static void do_test_single(struct bpf_test *test, bool unpriv, int run_errs, run_successes; int map_fds[MAX_NR_MAPS]; const char *expected_err; + int fixup_skips; __u32 pflags; int i, err; @@ -590,7 +614,13 @@ static void do_test_single(struct bpf_test *test, bool unpriv, if (!prog_type) prog_type = BPF_PROG_TYPE_SOCKET_FILTER; + fixup_skips = skips; do_test_fixup(test, prog_type, prog, map_fds); + /* If there were some map skips during fixup due to missing bpf + * features, skip this test. + */ + if (fixup_skips != skips) + return; prog_len = probe_filter_length(prog); pflags = 0; -- 2.20.1.495.gaa96b0ce6b-goog