Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4694571pxj; Wed, 12 May 2021 11:04:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwViEUF25wXIldthIt+sgBrZo+ktkzN+SmCjofro0fauZFXDM+wxi1e0oQiDxSPkYJUh4FT X-Received: by 2002:aa7:c349:: with SMTP id j9mr44136893edr.230.1620842642502; Wed, 12 May 2021 11:04:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620842642; cv=none; d=google.com; s=arc-20160816; b=fXjKMPEMfrXbvOAnTCwegv6legYOf4af+Smg9tj85UjAP3ZMsU0WqMlySxi7riTYRt pA8VzkcrlvsMkKOVlTWQrI6JtU2ksmKxZ8zKzSFY/t0Asr9ZJVIdYLDiRr06cAQ0jVTM HrXYIiJLxaSTCgZ0Cd1+ODy/uszh8yW/tG76Uv0irTa5TrXlc2a05L208hUzIXxdNKs5 RC+ttbD0FoAp9A7nHOmuH+pduKlQIPGzh0fFxIL8erPloijI2iZlKi6FDpxleq+Dmmvs niOaePnq+dYlNUP749NFBzW2wbr3EXfDQ39xh9R69RbySxGP1JyDRjxeFe3BH/AN7/d6 /Oiw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=nwcAi0IP19a8R0Ee6LhnHPjvSbpNZzSiceDADx9xR3g=; b=gv4kJ4AcY0tZkjvUvEAxnwjoDZutAy3wFn1dxs3tS/QrV6zf6Y3XQVUyflgp16u5nS TCVUpKbnOVUhmg8yyK0mK4ZPuPcSzgqVBquInIj1ZZN7cUMacg9F4wirFT3++2d5QHs4 dU+G/5+qkkx1BJ96jLH3zeMZJJ+4RnN9HWyQWRswG3I/SwBGcp4d7ZjSSmB5kHMLlqY+ hy4TdNKRkz7J5vM5R2pNU36P5Rjs28i1S/wPjCrbDpW0R8jD9xCMWWdQFSw/lPV0ywh5 LdNGQVT2HEYDM+NvgQz9hDSLzHTJKzrt3mJE5LXzG9KhEwszikRN0YFhi5M5kU3r3wzu uRrw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=A4pEA7eL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b2si311027edy.80.2021.05.12.11.03.29; Wed, 12 May 2021 11:04:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=A4pEA7eL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350657AbhELRvg (ORCPT + 99 others); Wed, 12 May 2021 13:51:36 -0400 Received: from mail.kernel.org ([198.145.29.99]:34046 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236399AbhELQVy (ORCPT ); Wed, 12 May 2021 12:21:54 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 6CC89613B6; Wed, 12 May 2021 15:46:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620834407; bh=r7rS+19kqxRSOlQSTefVR0fY2SMfJkNMnf+0aGork74=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=A4pEA7eLuPnJlRo5H6wEh4B4jiItaMD2O/c+cmluOr3P61Qqdzlr7CLlnEKlI36O1 a36lYr8Mfk8a0reAYcYVbiazAGC8PMVpUvlRA/6NTvnAsNx1vRsYI0XpVIH5WaP+RU fc1aBeBpc6snyacMIwEJuFQPO97n7MQ1VpSOw2mo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Florent Revest , Alexei Starovoitov , Andrii Nakryiko , Sasha Levin Subject: [PATCH 5.11 532/601] libbpf: Initialize the bpf_seq_printf parameters array field by field Date: Wed, 12 May 2021 16:50:09 +0200 Message-Id: <20210512144845.374870140@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210512144827.811958675@linuxfoundation.org> References: <20210512144827.811958675@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Florent Revest [ Upstream commit 83cd92b46484aa8f64cdc0bff8ac6940d1f78519 ] When initializing the __param array with a one liner, if all args are const, the initial array value will be placed in the rodata section but because libbpf does not support relocation in the rodata section, any pointer in this array will stay NULL. Fixes: c09add2fbc5a ("tools/libbpf: Add bpf_iter support") Signed-off-by: Florent Revest Signed-off-by: Alexei Starovoitov Acked-by: Andrii Nakryiko Link: https://lore.kernel.org/bpf/20210419155243.1632274-5-revest@chromium.org Signed-off-by: Sasha Levin --- tools/lib/bpf/bpf_tracing.h | 40 +++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/tools/lib/bpf/bpf_tracing.h b/tools/lib/bpf/bpf_tracing.h index f9ef37707888..1c2e91ee041d 100644 --- a/tools/lib/bpf/bpf_tracing.h +++ b/tools/lib/bpf/bpf_tracing.h @@ -413,20 +413,38 @@ typeof(name(0)) name(struct pt_regs *ctx) \ } \ static __always_inline typeof(name(0)) ____##name(struct pt_regs *ctx, ##args) +#define ___bpf_fill0(arr, p, x) do {} while (0) +#define ___bpf_fill1(arr, p, x) arr[p] = x +#define ___bpf_fill2(arr, p, x, args...) arr[p] = x; ___bpf_fill1(arr, p + 1, args) +#define ___bpf_fill3(arr, p, x, args...) arr[p] = x; ___bpf_fill2(arr, p + 1, args) +#define ___bpf_fill4(arr, p, x, args...) arr[p] = x; ___bpf_fill3(arr, p + 1, args) +#define ___bpf_fill5(arr, p, x, args...) arr[p] = x; ___bpf_fill4(arr, p + 1, args) +#define ___bpf_fill6(arr, p, x, args...) arr[p] = x; ___bpf_fill5(arr, p + 1, args) +#define ___bpf_fill7(arr, p, x, args...) arr[p] = x; ___bpf_fill6(arr, p + 1, args) +#define ___bpf_fill8(arr, p, x, args...) arr[p] = x; ___bpf_fill7(arr, p + 1, args) +#define ___bpf_fill9(arr, p, x, args...) arr[p] = x; ___bpf_fill8(arr, p + 1, args) +#define ___bpf_fill10(arr, p, x, args...) arr[p] = x; ___bpf_fill9(arr, p + 1, args) +#define ___bpf_fill11(arr, p, x, args...) arr[p] = x; ___bpf_fill10(arr, p + 1, args) +#define ___bpf_fill12(arr, p, x, args...) arr[p] = x; ___bpf_fill11(arr, p + 1, args) +#define ___bpf_fill(arr, args...) \ + ___bpf_apply(___bpf_fill, ___bpf_narg(args))(arr, 0, args) + /* * BPF_SEQ_PRINTF to wrap bpf_seq_printf to-be-printed values * in a structure. */ -#define BPF_SEQ_PRINTF(seq, fmt, args...) \ - ({ \ - _Pragma("GCC diagnostic push") \ - _Pragma("GCC diagnostic ignored \"-Wint-conversion\"") \ - static const char ___fmt[] = fmt; \ - unsigned long long ___param[] = { args }; \ - _Pragma("GCC diagnostic pop") \ - int ___ret = bpf_seq_printf(seq, ___fmt, sizeof(___fmt), \ - ___param, sizeof(___param)); \ - ___ret; \ - }) +#define BPF_SEQ_PRINTF(seq, fmt, args...) \ +({ \ + static const char ___fmt[] = fmt; \ + unsigned long long ___param[___bpf_narg(args)]; \ + \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wint-conversion\"") \ + ___bpf_fill(___param, args); \ + _Pragma("GCC diagnostic pop") \ + \ + bpf_seq_printf(seq, ___fmt, sizeof(___fmt), \ + ___param, sizeof(___param)); \ +}) #endif -- 2.30.2