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=-8.8 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT 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 5CA9CC282CE for ; Tue, 12 Feb 2019 00:47:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2C778217FA for ; Tue, 12 Feb 2019 00:47:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lX1i9UzO" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728078AbfBLArr (ORCPT ); Mon, 11 Feb 2019 19:47:47 -0500 Received: from mail-it1-f194.google.com ([209.85.166.194]:40491 "EHLO mail-it1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728050AbfBLAro (ORCPT ); Mon, 11 Feb 2019 19:47:44 -0500 Received: by mail-it1-f194.google.com with SMTP id i2so3125194ite.5; Mon, 11 Feb 2019 16:47:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lccaXsM6GtqA0x1y9aLbTMuQXwnbt4xZvfRFCA4SW1U=; b=lX1i9UzOeAd/2gbhIBLQnD8zGGwWgk8f5YCTXiWwd+oabNtkqPxzO52bi0rxOUDEQK EfSMU3C9NrDKLkidPTdkTwE9Dyq6Ww/SfvNEjm5x57b7uBn/KQnjcsq/quDfnrv8WbdK mgvEhJgW7Hq46wRRQamJhMP9pORsi1iw3/KM5YZVlCGXMFw1EQjm5nTHgWO9EnHj9XE+ mrnMJN7GWJILPryE4f2qRWdR5NDikn449SadyFMniGmdBWGQeaXhQWw6gWNJNVMmoZ9e LVTR5QEUzk7GjHmnw2ay7VQ0i8ofupEKiXIvaDzoaD9NyxNCVy/mSSqxSs7REdbFMpK4 +nrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=lccaXsM6GtqA0x1y9aLbTMuQXwnbt4xZvfRFCA4SW1U=; b=VyMWlpBPOrjDfqqPREtb2rtZQBi6uTS49wjfkhPwTPLIQSobTMathO+PlST20H1HIl 6l2TD2Hse+rgNXrZ1u5hC9ShcXkzl9qQngYMF6MHwhb5g9qNVrS9qdiB7942fyFyqel2 NNcGZ4UFP5QISNdDL3ZAp6tcA8pV5GoLheGZ97fA3SZX3f0rZPbgEL/qrlrOCqlFIk5c 5tEjAU7gHgeRMo5rL3O/TjfKqceBGN4oZeYOB7DncwezXlQu4YYNBBeZBDsDuD5H1CK3 wPHWo+WzPvgT8Q4FrT5ZwbsScdRzjAM9UUeem5AUdq+96nHUHh+SJfU3gPd1XfKgSHja 4QhQ== X-Gm-Message-State: AHQUAubAAXk1ZK3hOL4RcJs6gTqdp0lIqf748Ovqu3uri2X6v2E1bIbA Ucrjqzcb0rjp4HR4crBaReJIgRyS X-Google-Smtp-Source: AHgI3IahFsXwpc7fdPVb0lh/GB1tlari9L84ks3UBnsa1sGWY+oTShBONBPvtf7dHsTch20ZNRAQyw== X-Received: by 2002:a24:97c3:: with SMTP id k186mr576395ite.125.1549932462490; Mon, 11 Feb 2019 16:47:42 -0800 (PST) Received: from localhost.localdomain (mr-urb-183-235.dmisinetworks.net. [66.253.183.235]) by smtp.gmail.com with ESMTPSA id v193sm766829itv.32.2019.02.11.16.47.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 11 Feb 2019 16:47:41 -0800 (PST) From: Joe Stringer To: bpf@vger.kernel.org Cc: netdev@vger.kernel.org, daniel@iogearbox.net, ast@kernel.org Subject: [PATCH bpf-next 4/4] selftests/bpf: Test static data relocation Date: Mon, 11 Feb 2019 16:47:29 -0800 Message-Id: <20190212004729.535-5-joe@wand.net.nz> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190212004729.535-1-joe@wand.net.nz> References: <20190212004729.535-1-joe@wand.net.nz> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add tests for libbpf relocation of static variable references into the .data and .bss sections of the ELF. Signed-off-by: Joe Stringer --- tools/testing/selftests/bpf/Makefile | 2 +- tools/testing/selftests/bpf/test_progs.c | 44 +++++++++++++++++ .../selftests/bpf/test_static_data_kern.c | 47 +++++++++++++++++++ 3 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 tools/testing/selftests/bpf/test_static_data_kern.c diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile index c7e1e3255448..ef52a58e2368 100644 --- a/tools/testing/selftests/bpf/Makefile +++ b/tools/testing/selftests/bpf/Makefile @@ -36,7 +36,7 @@ BPF_OBJ_FILES = \ get_cgroup_id_kern.o socket_cookie_prog.o test_select_reuseport_kern.o \ test_skb_cgroup_id_kern.o bpf_flow.o netcnt_prog.o test_xdp_vlan.o \ xdp_dummy.o test_map_in_map.o test_spin_lock.o test_map_lock.o \ - test_sock_fields_kern.o + test_sock_fields_kern.o test_static_data_kern.o # Objects are built with default compilation flags and with sub-register # code-gen enabled. diff --git a/tools/testing/selftests/bpf/test_progs.c b/tools/testing/selftests/bpf/test_progs.c index c52bd90fbb34..72899d58a77c 100644 --- a/tools/testing/selftests/bpf/test_progs.c +++ b/tools/testing/selftests/bpf/test_progs.c @@ -736,6 +736,49 @@ static void test_pkt_md_access(void) bpf_object__close(obj); } +static void test_static_data_access(void) +{ + const char *file = "./test_static_data_kern.o"; + struct bpf_object *obj; + __u32 duration = 0, retval; + int i, err, prog_fd, map_fd; + uint32_t value; + + err = bpf_prog_load(file, BPF_PROG_TYPE_SCHED_CLS, &obj, &prog_fd); + if (CHECK(err, "load program", "error %d loading %s\n", err, file)) + return; + + map_fd = bpf_find_map(__func__, obj, "result"); + if (map_fd < 0) { + error_cnt++; + goto close_prog; + } + + err = bpf_prog_test_run(prog_fd, 1, &pkt_v4, sizeof(pkt_v4), + NULL, NULL, &retval, &duration); + CHECK(err || retval, "pass packet", + "err %d errno %d retval %d duration %d\n", + err, errno, retval, duration); + + struct { + char *name; + uint32_t key; + uint32_t value; + } tests[] = { + { "relocate .bss reference", 0, 0 }, + { "relocate .data reference", 1, 42 }, + }; + for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) { + err = bpf_map_lookup_elem(map_fd, &tests[i].key, &value); + CHECK (err || value != tests[i].value, tests[i].name, + "err %d result %d expected %d\n", + err, value, tests[i].value); + } + +close_prog: + bpf_object__close(obj); +} + static void test_obj_name(void) { struct { @@ -2138,6 +2181,7 @@ int main(void) test_flow_dissector(); test_spinlock(); test_map_lock(); + test_static_data_access(); printf("Summary: %d PASSED, %d FAILED\n", pass_cnt, error_cnt); return error_cnt ? EXIT_FAILURE : EXIT_SUCCESS; diff --git a/tools/testing/selftests/bpf/test_static_data_kern.c b/tools/testing/selftests/bpf/test_static_data_kern.c new file mode 100644 index 000000000000..f2485af6bd0b --- /dev/null +++ b/tools/testing/selftests/bpf/test_static_data_kern.c @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (c) 2019 Isovalent, Inc. + +#include +#include + +#include + +#include "bpf_helpers.h" + +#define NUM_CGROUP_LEVELS 4 + +struct bpf_map_def SEC("maps") result = { + .type = BPF_MAP_TYPE_ARRAY, + .key_size = sizeof(__u32), + .value_size = sizeof(__u32), + .max_entries = 2, +}; + +#define __fetch(x) (__u32)(&(x)) + +static __u32 static_bss = 0; /* Reloc reference to .bss section */ +static __u32 static_data = 42; /* Reloc reference to .data section */ + +/** + * Load a u32 value from a static variable into a map, for the userland test + * program to validate. + */ +SEC("static_data_load") +int load_static_data(struct __sk_buff *skb) +{ + __u32 key, value; + + key = 0; + value = __fetch(static_bss); + bpf_map_update_elem(&result, &key, &value, 0); + + key = 1; + value = __fetch(static_data); + bpf_map_update_elem(&result, &key, &value, 0); + + return TC_ACT_OK; +} + +int _version SEC("version") = 1; + +char _license[] SEC("license") = "GPL"; -- 2.19.1