From patchwork Mon Dec 17 18:25:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislav Fomichev X-Patchwork-Id: 1014663 Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="tD4e0BSA"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43JV3K3b5Sz9s3q for ; Tue, 18 Dec 2018 05:26:21 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388929AbeLQS0T (ORCPT ); Mon, 17 Dec 2018 13:26:19 -0500 Received: from mail-qk1-f202.google.com ([209.85.222.202]:36746 "EHLO mail-qk1-f202.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388923AbeLQS0T (ORCPT ); Mon, 17 Dec 2018 13:26:19 -0500 Received: by mail-qk1-f202.google.com with SMTP id b185so16185860qkc.3 for ; Mon, 17 Dec 2018 10:26:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=9rnF+qJsQ+GEz9EaqNv8tyc2yya7wtRdoxNp/ISf7Pg=; b=tD4e0BSAOjhzE4SD2opltY5gVf7z7lG5edzcJdLNbPa3FZ4YN+7LJ+sk9yzHbkbFas B5OAFkz+a4/TkdowuIw/mTWncM0fhdXwS02Xs1zkUtwao9PQ3qeF8HIt6nQa/Ug9jv9f xZFmdaL5I2RaeIw81b3NJeqxo298LS80nwiyd6hAYq7zgtzyrR37tjJW58F14l4+NR9h GcFx2Rx9iPmAo/s3pzPrz03QVpqwyFKX//anekJH2rFec7m9R4C+HiWuKY391rm/tpzn SYK6+5PWvpV2Q1WLkJpQutGZOFxznlbr836o1g/vtRkKG9ssReJyzgzIqsGw+HE4CcOy D5/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=9rnF+qJsQ+GEz9EaqNv8tyc2yya7wtRdoxNp/ISf7Pg=; b=dOuZLPGYZzb0Tx/DS+3aYy/HlbFHMImgrVEfEZPaY7779QG9qkSkUD00d7HS3knPrp xToJ9aTcyAhnOSAdStk5tzAlrxpEw6pUbGkqP0z7burNdpXUm27nTffLpovT4T8DdYQi UoRN3n1s8d4EDubt5ww2ZpBJN2o6sVrD/KwfiJzhtYysqTnBQvEKqAhVYooe2QTboWIM Rl84XugeX8glCwNy8aT5U2tbdpdqG8Wd0zkHdz15qOcWpD2BBVOcDGHgyhvt1rOrPpoU i3ewqyj5a7lUX0E2wuQp1ttnbAXiZq4/RIeq75Gy+OQgZDGhHRi/xjRoCwu5/7Ir8y8j PhPA== X-Gm-Message-State: AA+aEWY11QCSrkHSCjq/qz3FKkCEgn/d/csLGzXEa4MsDfPBSfhCGkTZ zxtFNb4P6/OysCITFSFEHnHnwddobWgIKVerl9HH0Vb9H8z0wNLqt06ma2F3PgexGiv1RW82hF8 D4s4lTCNJOyNHtnDRGwfDLC3l8WPcSLL74i5yyPlCvHmCNAlz4T49IA== X-Google-Smtp-Source: AFSGD/XlcQ4ND1MXfZ4TtsHhdEYUKWjrsysYlKHUDB108IpNGnOiagWABQSJmjN5XvUkOq3/SnwAEm4= X-Received: by 2002:ac8:2194:: with SMTP id 20mr15494641qty.51.1545071178266; Mon, 17 Dec 2018 10:26:18 -0800 (PST) Date: Mon, 17 Dec 2018 10:25:48 -0800 Message-Id: <20181217182554.52170-1-sdf@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.20.0.405.gbc1bbc6f85-goog Subject: [PATCH bpf-next v2 0/6] skip verifier/map tests if kernel support is missing From: Stanislav Fomichev To: netdev@vger.kernel.org, ast@kernel.org Cc: davem@davemloft.net, daniel@iogearbox.net, ecree@solarflare.com, quentin.monnet@netronome.com, Stanislav Fomichev Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org If test_maps/test_verifier is running against the kernel which doesn't have _all_ BPF features enabled, it fails with an error. This patch series tries to probe kernel support for each failed test and skip it instead. This lets users run BPF selftests in the not-all-bpf-yes environments and received correct PASS/NON-PASS result. See https://www.spinics.net/lists/netdev/msg539331.html for more context. The series goes like this: * patch #1 adds bpf_prog_type_supported() and bpf_map_type_supported() which query the kernel (insert 'return 0' program or try to create empty map with correct key/value sizes) and return supported/unsupported. Note: this functionality can later be reimplemented on top of Quentin's recent 'bpftool feature' patchset if he decides to move the probes into libbpf. * patch #2 skips sockmap tests in test_maps.c if BPF_MAP_TYPE_SOCKMAP map is not supported (if bpf_create_map fails, we probe the kernel for support) * patch #3 skips verifier tests if test->prog_type is not supported (if bpf_verify_program fails, we probe the kernel for support) * patch #4 skips verifier tests if test fixup map is not supported (if create_map fails, we probe the kernel for support) Note: we can probably move this probe into create_map helper and return some argument instead of adding skip_unsupported_map() to each fixup; but I'm not sure it's better. Also note: in current implementation we still print 'Failed to create hash map' from the create_map, but still skip the test. * next patches fix various small issues that arise from the first four: * patch #5 sets "unknown func bpf_trace_printk#6" prog_type to BPF_PROG_TYPE_TRACEPOINT so it is correctly skipped in CONFIG_BPF_EVENTS=n case * patch #6 exposes BPF_PROG_TYPE_CGROUP_{SKB,SOCK,SOCK_ADDR} only when CONFIG_CGROUP_BPF=y, this makes verifier correctly skip appropriate tests v2 changes: * don't sprinkle "ifdef CONFIG_CGROUP_BPF" all around net/core/filter.c, doing it only in the bpf_types.h is enough to disable BPF_PROG_TYPE_CGROUP_{SKB,SOCK,SOCK_ADDR} prog types for non-cgroup enabled kernels Stanislav Fomichev (6): selftests/bpf: add map/prog type probe helpers selftests/bpf: skip sockmap in test_maps if kernel doesn't have support selftests/bpf: skip verifier tests for unsupported program types selftests/bpf: skip verifier tests for unsupported map types selftests/bpf: mark verifier test that uses bpf_trace_printk as BPF_PROG_TYPE_TRACEPOINT bpf: BPF_PROG_TYPE_CGROUP_{SKB,SOCK,SOCK_ADDR} require cgroups enabled include/linux/bpf_types.h | 2 + tools/testing/selftests/bpf/Makefile | 2 + tools/testing/selftests/bpf/probe_helpers.c | 68 +++++++++++++++++++++ tools/testing/selftests/bpf/probe_helpers.h | 10 +++ tools/testing/selftests/bpf/test_maps.c | 14 ++++- tools/testing/selftests/bpf/test_verifier.c | 44 +++++++++++-- 6 files changed, 135 insertions(+), 5 deletions(-) create mode 100644 tools/testing/selftests/bpf/probe_helpers.c create mode 100644 tools/testing/selftests/bpf/probe_helpers.h