From patchwork Fri Aug 25 21:39:57 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 806024 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@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; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="ENDDz3j5"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xfF2M2Zwpz9sRY for ; Sat, 26 Aug 2017 07:40:27 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934756AbdHYVkZ (ORCPT ); Fri, 25 Aug 2017 17:40:25 -0400 Received: from mail-pg0-f48.google.com ([74.125.83.48]:34926 "EHLO mail-pg0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932688AbdHYVkX (ORCPT ); Fri, 25 Aug 2017 17:40:23 -0400 Received: by mail-pg0-f48.google.com with SMTP id 63so5288730pgc.2 for ; Fri, 25 Aug 2017 14:40:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=R4vjESpUtjryOJNKYHPAJ0fljJrmNm0BCFHtrNHvAj8=; b=ENDDz3j5io3oyuh3XXfrqN7IEJCY50PWlnS3I3LU++sbYu/MglS4uSk8CoZi2Z8km/ Uv2ekcT7TQUr7uRSPDoVzA64+BCieEy3IaM76IVIq/uG65Zw59yCHUbGOnCHRqM9ZGuP VnXhaynHOKBnqK49o1ITxh6ie6vExLnDJRWvaayaL70IlYfU71Pe1/Q73NJ/fxIVp+D0 srzTqLgNDr3A4/sbUWbdsz7vXpdBd0v3rQNK0XcTPz2/0cdTQmXq4/RhQyY2FCgkgVoY zvNT4gy4NwcC2iWc3ok3w1oBlXt8xsENNvNGgiOkMoggIJqYIetwvhlZ62Ze5gYdkodF kojQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=R4vjESpUtjryOJNKYHPAJ0fljJrmNm0BCFHtrNHvAj8=; b=cCb7JJwWN3bc89aaEWh78qOAwADgVTz9pguzKuu4XPTgteVtNibTZYtshIFUxxx/hW BUl2Ynmx65zAl0fY9ellJCk4krWBzje1TNHunXvv/L6lGya8zjFqTD6l0WkfYn+PVsrE XptNRyN2l2mjRf2pfSPZQjR2SUiV11qzCuWu8iow79kYpV6Q0RBpxG7dkUPcsUkUTCP4 mzTUBFi1TWgFdzvn9MMKPE6GlHres+bxZvPrqAqso7VP93WzRAcAknqKLMt0Iwacl+p9 QmDP8MWHPRPZTnM2lAqxNgcTjo3Q7j5iQevTbh39Dc+WXZ98ufDtiE32sZbhhetFKU7v cKDA== X-Gm-Message-State: AHYfb5gBVRGX/SsEW6X/N56UQ+mYMCXPCB0pILelDnu+18kJNvdv9JLh luVhMOuU7xwJtGw9L9M= X-Received: by 10.99.114.29 with SMTP id n29mr10900306pgc.153.1503697222840; Fri, 25 Aug 2017 14:40:22 -0700 (PDT) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id w66sm12937667pfi.63.2017.08.25.14.40.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 25 Aug 2017 14:40:22 -0700 (PDT) From: Jakub Kicinski To: netdev@vger.kernel.org Cc: daniel@iogearbox.net, kafai@fb.com, oss-drivers@netronome.com, Jakub Kicinski Subject: [PATCH net-next] selftests/bpf: check the instruction dumps are populated Date: Fri, 25 Aug 2017 14:39:57 -0700 Message-Id: <20170825213957.4768-1-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.11.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add a basic test for checking whether kernel is populating the jited and xlated BPF images. It was used to confirm the behaviour change from commit d777b2ddbecf ("bpf: don't zero out the info struct in bpf_obj_get_info_by_fd()"), which made bpf_obj_get_info_by_fd() usable for retrieving the image dumps. Signed-off-by: Jakub Kicinski Acked-by: Daniel Borkmann Acked-by: Martin KaFai Lau --- tools/testing/selftests/bpf/test_progs.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/bpf/test_progs.c b/tools/testing/selftests/bpf/test_progs.c index 1cb037803679..11ee25cea227 100644 --- a/tools/testing/selftests/bpf/test_progs.c +++ b/tools/testing/selftests/bpf/test_progs.c @@ -279,7 +279,7 @@ static void test_bpf_obj_id(void) /* +1 to test for the info_len returned by kernel */ struct bpf_prog_info prog_infos[nr_iters + 1]; struct bpf_map_info map_infos[nr_iters + 1]; - char jited_insns[128], xlated_insns[128]; + char jited_insns[128], xlated_insns[128], zeros[128]; __u32 i, next_id, info_len, nr_id_found, duration = 0; int sysctl_fd, jit_enabled = 0, err = 0; __u64 array_value; @@ -305,6 +305,7 @@ static void test_bpf_obj_id(void) objs[i] = NULL; /* Check bpf_obj_get_info_by_fd() */ + bzero(zeros, sizeof(zeros)); for (i = 0; i < nr_iters; i++) { err = bpf_prog_load(file, BPF_PROG_TYPE_SOCKET_FILTER, &objs[i], &prog_fds[i]); @@ -318,6 +319,8 @@ static void test_bpf_obj_id(void) /* Check getting prog info */ info_len = sizeof(struct bpf_prog_info) * 2; bzero(&prog_infos[i], info_len); + bzero(jited_insns, sizeof(jited_insns)); + bzero(xlated_insns, sizeof(xlated_insns)); prog_infos[i].jited_prog_insns = ptr_to_u64(jited_insns); prog_infos[i].jited_prog_len = sizeof(jited_insns); prog_infos[i].xlated_prog_insns = ptr_to_u64(xlated_insns); @@ -328,15 +331,20 @@ static void test_bpf_obj_id(void) prog_infos[i].type != BPF_PROG_TYPE_SOCKET_FILTER || info_len != sizeof(struct bpf_prog_info) || (jit_enabled && !prog_infos[i].jited_prog_len) || - !prog_infos[i].xlated_prog_len, + (jit_enabled && + !memcmp(jited_insns, zeros, sizeof(zeros))) || + !prog_infos[i].xlated_prog_len || + !memcmp(xlated_insns, zeros, sizeof(zeros)), "get-prog-info(fd)", - "err %d errno %d i %d type %d(%d) info_len %u(%lu) jit_enabled %d jited_prog_len %u xlated_prog_len %u\n", + "err %d errno %d i %d type %d(%d) info_len %u(%lu) jit_enabled %d jited_prog_len %u xlated_prog_len %u jited_prog %d xlated_prog %d\n", err, errno, i, prog_infos[i].type, BPF_PROG_TYPE_SOCKET_FILTER, info_len, sizeof(struct bpf_prog_info), jit_enabled, prog_infos[i].jited_prog_len, - prog_infos[i].xlated_prog_len)) + prog_infos[i].xlated_prog_len, + !!memcmp(jited_insns, zeros, sizeof(zeros)), + !!memcmp(xlated_insns, zeros, sizeof(zeros)))) goto done; map_fds[i] = bpf_find_map(__func__, objs[i], "test_map_id");