From patchwork Wed Jan 10 12:26:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Quentin Monnet X-Patchwork-Id: 858246 X-Patchwork-Delegate: bpf@iogearbox.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="y24ZdZLG"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zGpDv29BPz9t0m for ; Wed, 10 Jan 2018 23:27:43 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965263AbeAJM1k (ORCPT ); Wed, 10 Jan 2018 07:27:40 -0500 Received: from mail-wr0-f196.google.com ([209.85.128.196]:43779 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934488AbeAJM1h (ORCPT ); Wed, 10 Jan 2018 07:27:37 -0500 Received: by mail-wr0-f196.google.com with SMTP id s13so14749855wra.10 for ; Wed, 10 Jan 2018 04:27:37 -0800 (PST) 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:in-reply-to:references; bh=gChFzq8Q5xge8KB2bt0CQROpm0q0Ffc4c4X4Ea5Y3ko=; b=y24ZdZLGIGiug6Bk07yHhTasW3zXUiQ+UZwuofRgY02WfV0cDqUT2Mo9k8p+hOuzTk 1GGy8uebJzyy8Q5xd8ayFove6aO/jdtKZ4x1ce1WMtjqqKjabcRIEdyf7wzJXlSdTKtO V6q3X8BhRRRVw2cW6qoCi908i6hqTHW2qjpwUcF8GndTmx+ZtMulDcXP4hxGPfrBLniR k19D8+02pyj1yhYHHTZo+blUoDye8tz3tNq2yZzzv3/W2mP1BLRQWQDAYbZRVpymhpKN 5RLaZeM8Jw0eweN0m28dxCctyqRiB7/7aoKGE58sQvOOkOddHTXN5SeBWNnVLVg4Hr3h MRNg== 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:in-reply-to :references; bh=gChFzq8Q5xge8KB2bt0CQROpm0q0Ffc4c4X4Ea5Y3ko=; b=e97jBTHFRCC+cWCn3JLbghGf7f+zhOD3sY8dxddNH8+GQgqFhlxy/3mWn/P/OH8dWC wcimQq36Xixe5NkhzA77swXBlrQdObxfk3DHJR/rFv6amg30QasBa8ECmhrLOTXnhlka wCwlfl5+ORJixMYocYGWyGVjVLm2eggAPUSGPhZYwUX8dvW1lR2HSQxzPzQ9rwsaQAe2 2X9v26Fm3fandCAXQDG92ACNpjtbQbOKGF4Xm/K/wolCU4tAkjc8qqfW8+ihCwmuI8qn oYQSnOgHtowH0CMz8byfBvKZdgqZ8s398+lTx66yW9VhONRhEXfxyH3GlPV6Dw4femhR c+vQ== X-Gm-Message-State: AKGB3mIjcqTvKTLBnyFQBkjdDvTYKAtp8sE8kG1RZdltzl57Wb56piuY KyxbkWv0iLnzL9iDggoZ51mR8w== X-Google-Smtp-Source: ACJfBovrFGQI8sgwsGy5ggxpc3Ri3vfN7ox6pJI3iYGsuSo01CZ+va6yD2J/IhEJmZeCLzjyiqq/eA== X-Received: by 10.223.184.175 with SMTP id i44mr7031318wrf.253.1515587256395; Wed, 10 Jan 2018 04:27:36 -0800 (PST) Received: from cbtest8.netronome.com (host-79-78-33-110.static.as9105.net. [79.78.33.110]) by smtp.gmail.com with ESMTPSA id q186sm16907279wmb.6.2018.01.10.04.27.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 10 Jan 2018 04:27:35 -0800 (PST) From: Quentin Monnet To: daniel@iogearbox.net, alexei.starovoitov@gmail.com, netdev@vger.kernel.org Cc: oss-drivers@netronome.com, jakub.kicinski@netronome.com Subject: [PATCH bpf-next v2 14/14] nfp: bpf: reuse verifier log for debug messages Date: Wed, 10 Jan 2018 12:26:07 +0000 Message-Id: <1515587167-1959-15-git-send-email-quentin.monnet@netronome.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1515587167-1959-1-git-send-email-quentin.monnet@netronome.com> References: <1515587167-1959-1-git-send-email-quentin.monnet@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Now that `bpf_verifier_log_write()` is exported from the verifier and makes it possible to reuse the verifier log to print messages to the standard output, use this instead of the kernel logs in the nfp driver for printing error messages occurring at verification time. Signed-off-by: Quentin Monnet Reviewed-by: Jakub Kicinski --- drivers/net/ethernet/netronome/nfp/bpf/verifier.c | 30 ++++++++++++----------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/drivers/net/ethernet/netronome/nfp/bpf/verifier.c b/drivers/net/ethernet/netronome/nfp/bpf/verifier.c index d8870c2f11f3..7890d95d4018 100644 --- a/drivers/net/ethernet/netronome/nfp/bpf/verifier.c +++ b/drivers/net/ethernet/netronome/nfp/bpf/verifier.c @@ -31,8 +31,6 @@ * SOFTWARE. */ -#define pr_fmt(fmt) "NFP net bpf: " fmt - #include #include #include @@ -41,6 +39,9 @@ #include "fw.h" #include "main.h" +#define pr_vlog(env, fmt, ...) \ + bpf_verifier_log_write(env, "[nfp] " fmt, ##__VA_ARGS__) + struct nfp_insn_meta * nfp_bpf_goto_meta(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta, unsigned int insn_idx, unsigned int n_insns) @@ -116,18 +117,18 @@ nfp_bpf_check_call(struct nfp_prog *nfp_prog, struct bpf_verifier_env *env, switch (func_id) { case BPF_FUNC_xdp_adjust_head: if (!bpf->adjust_head.off_max) { - pr_warn("adjust_head not supported by FW\n"); + pr_vlog(env, "adjust_head not supported by FW\n"); return -EOPNOTSUPP; } if (!(bpf->adjust_head.flags & NFP_BPF_ADJUST_HEAD_NO_META)) { - pr_warn("adjust_head: FW requires shifting metadata, not supported by the driver\n"); + pr_vlog(env, "adjust_head: FW requires shifting metadata, not supported by the driver\n"); return -EOPNOTSUPP; } nfp_record_adjust_head(bpf, nfp_prog, meta, reg2); break; default: - pr_warn("unsupported function id: %d\n", func_id); + pr_vlog(env, "unsupported function id: %d\n", func_id); return -EOPNOTSUPP; } @@ -150,7 +151,7 @@ nfp_bpf_check_exit(struct nfp_prog *nfp_prog, char tn_buf[48]; tnum_strn(tn_buf, sizeof(tn_buf), reg0->var_off); - pr_info("unsupported exit state: %d, var_off: %s\n", + pr_vlog(env, "unsupported exit state: %d, var_off: %s\n", reg0->type, tn_buf); return -EINVAL; } @@ -160,7 +161,7 @@ nfp_bpf_check_exit(struct nfp_prog *nfp_prog, imm <= TC_ACT_REDIRECT && imm != TC_ACT_SHOT && imm != TC_ACT_STOLEN && imm != TC_ACT_QUEUED) { - pr_info("unsupported exit state: %d, imm: %llx\n", + pr_vlog(env, "unsupported exit state: %d, imm: %llx\n", reg0->type, imm); return -EINVAL; } @@ -171,12 +172,13 @@ nfp_bpf_check_exit(struct nfp_prog *nfp_prog, static int nfp_bpf_check_stack_access(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta, - const struct bpf_reg_state *reg) + const struct bpf_reg_state *reg, + struct bpf_verifier_env *env) { s32 old_off, new_off; if (!tnum_is_const(reg->var_off)) { - pr_info("variable ptr stack access\n"); + pr_vlog(env, "variable ptr stack access\n"); return -EINVAL; } @@ -194,7 +196,7 @@ nfp_bpf_check_stack_access(struct nfp_prog *nfp_prog, if (old_off % 4 == new_off % 4) return 0; - pr_info("stack access changed location was:%d is:%d\n", + pr_vlog(env, "stack access changed location was:%d is:%d\n", old_off, new_off); return -EINVAL; } @@ -209,18 +211,18 @@ nfp_bpf_check_ptr(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta, if (reg->type != PTR_TO_CTX && reg->type != PTR_TO_STACK && reg->type != PTR_TO_PACKET) { - pr_info("unsupported ptr type: %d\n", reg->type); + pr_vlog(env, "unsupported ptr type: %d\n", reg->type); return -EINVAL; } if (reg->type == PTR_TO_STACK) { - err = nfp_bpf_check_stack_access(nfp_prog, meta, reg); + err = nfp_bpf_check_stack_access(nfp_prog, meta, reg, env); if (err) return err; } if (meta->ptr.type != NOT_INIT && meta->ptr.type != reg->type) { - pr_info("ptr type changed for instruction %d -> %d\n", + pr_vlog(env, "ptr type changed for instruction %d -> %d\n", meta->ptr.type, reg->type); return -EINVAL; } @@ -241,7 +243,7 @@ nfp_verify_insn(struct bpf_verifier_env *env, int insn_idx, int prev_insn_idx) if (meta->insn.src_reg >= MAX_BPF_REG || meta->insn.dst_reg >= MAX_BPF_REG) { - pr_err("program uses extended registers - jit hardening?\n"); + pr_vlog(env, "program uses extended registers - jit hardening?\n"); return -EINVAL; }