From patchwork Mon Mar 29 07:58:22 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Greg Kroah-Hartman X-Patchwork-Id: 410821 Delivered-To: patch@linaro.org Received: by 2002:a02:8562:0:0:0:0:0 with SMTP id g89csp3436062jai; Mon, 29 Mar 2021 01:41:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyXKTKrEgFVr+HJPTQfdHlsfRcBdkHdL/0EI6r4v/xB6gtXCrc1EtK0pCim+sAsUR1Q9Lja X-Received: by 2002:a17:906:7194:: with SMTP id h20mr27309579ejk.154.1617007160481; Mon, 29 Mar 2021 01:39:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617007160; cv=none; d=google.com; s=arc-20160816; b=ngDydZOsVCYIwvEpIHAADHlRcII1DVGutu8iX0kwEXzUAFrYnuRyJbyR9/4pUXmAKA UMEGkH8uZI27dbpcy12a0vclc3lyMQ2jarwj/VXCHY02jTgRAii5DhsVm09i7fnFpNoI 9/UDOFSuOnZek0RHwmQf3AWTl3IyUsP8fCcsFkQeKlNd2jwiOh18q7S35wWZrUSF4ExJ nkdDel5GAPftIFfvQ5PeDTjg+yBXRDUJtVpOQZiZPXxCagW1kJvryqTCI3pxExK1Q6iO 2viv89HVdGFhFflcyRN34MEj2XsESBnrFkttOMmOlnegPnIWw3NGf+WyC9r+W759l5pq /GJg== 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=vV8Ud/oQDMqTHmpv/iiIBYQWASotlLGnmzDCDC7G8vI=; b=CRqdCyIQdEHEczYvpwxlf0fIHMJ+mtbJiV1yU5BFdDEJ4LJnrgMujRRxyX0c5frmXF PTMr1001e1I1ZTsX/Cyvubk+gOP91wktsPTvUlUfopbX/yUbtP8rafqJwk3htsdjsGP6 fLPz65qTtPfDEId78M+90D+aVwTfHmA7KdAwLoCR++RbXZuX4j6o/2KWhIUuJicKNgAc FvQMbUyl5APy2lBNyLhjC6whkVlEWLSQV8ftaEnjTrC0nKFJ3f5TS2tHScyi2DV2wgVq bk+3JUJOlX6VCluRj2SDbUDtgqtDUi4YV9CcbflInFMLToCPHQ6SgyvrAJYGO0LIIH6A 8bIQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=M7msx3aJ; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-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 t22si11690307ejj.746.2021.03.29.01.39.20; Mon, 29 Mar 2021 01:39:20 -0700 (PDT) Received-SPF: pass (google.com: domain of stable-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=M7msx3aJ; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-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 S234251AbhC2Iiv (ORCPT + 12 others); Mon, 29 Mar 2021 04:38:51 -0400 Received: from mail.kernel.org ([198.145.29.99]:55168 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234853AbhC2Ih1 (ORCPT ); Mon, 29 Mar 2021 04:37:27 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id B787F619C5; Mon, 29 Mar 2021 08:36:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1617007010; bh=yKav0Il29ZRjd7L2vycF4NIWmmq44ae3g5LHM4WhjrI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=M7msx3aJYsDmTjCKJRtRFZCvsIJNp3bQ2L0lF+IKsUyGMwHYFCxG3okWQftOmxMhg +Y7GFnz5B68yZbjEa+uK2FuzPg/IGbu81/T1NH/cykgXyZv2+8A8/RrS1QcfHj5Mdq OOIKr6VBQW8JPxcTb4iw82xVA/vHSudYxsBg4eoA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jean-Philippe Brucker , Andrii Nakryiko , Sasha Levin Subject: [PATCH 5.11 186/254] libbpf: Fix BTF dump of pointer-to-array-of-struct Date: Mon, 29 Mar 2021 09:58:22 +0200 Message-Id: <20210329075639.242606958@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210329075633.135869143@linuxfoundation.org> References: <20210329075633.135869143@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Jean-Philippe Brucker [ Upstream commit 901ee1d750f29a335423eeb9463c3ca461ca18c2 ] The vmlinux.h generated from BTF is invalid when building drivers/phy/ti/phy-gmii-sel.c with clang: vmlinux.h:61702:27: error: array type has incomplete element type ‘struct reg_field’ 61702 | const struct reg_field (*regfields)[3]; | ^~~~~~~~~ bpftool generates a forward declaration for this struct regfield, which compilers aren't happy about. Here's a simplified reproducer: struct inner { int val; }; struct outer { struct inner (*ptr_to_array)[2]; } A; After build with clang -> bpftool btf dump c -> clang/gcc: ./def-clang.h:11:23: error: array has incomplete element type 'struct inner' struct inner (*ptr_to_array)[2]; Member ptr_to_array of struct outer is a pointer to an array of struct inner. In the DWARF generated by clang, struct outer appears before struct inner, so when converting BTF of struct outer into C, bpftool issues a forward declaration to struct inner. With GCC the DWARF info is reversed so struct inner gets fully defined. That forward declaration is not sufficient when compilers handle an array of the struct, even when it's only used through a pointer. Note that we can trigger the same issue with an intermediate typedef: struct inner { int val; }; typedef struct inner inner2_t[2]; struct outer { inner2_t *ptr_to_array; } A; Becomes: struct inner; typedef struct inner inner2_t[2]; And causes: ./def-clang.h:10:30: error: array has incomplete element type 'struct inner' typedef struct inner inner2_t[2]; To fix this, clear through_ptr whenever we encounter an intermediate array, to make the inner struct part of a strong link and force full declaration. Fixes: 351131b51c7a ("libbpf: add btf_dump API for BTF-to-C conversion") Signed-off-by: Jean-Philippe Brucker Signed-off-by: Andrii Nakryiko Link: https://lore.kernel.org/bpf/20210319112554.794552-2-jean-philippe@linaro.org Signed-off-by: Sasha Levin --- tools/lib/bpf/btf_dump.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.30.1 diff --git a/tools/lib/bpf/btf_dump.c b/tools/lib/bpf/btf_dump.c index 2f9d685bd522..0911aea4cdbe 100644 --- a/tools/lib/bpf/btf_dump.c +++ b/tools/lib/bpf/btf_dump.c @@ -462,7 +462,7 @@ static int btf_dump_order_type(struct btf_dump *d, __u32 id, bool through_ptr) return err; case BTF_KIND_ARRAY: - return btf_dump_order_type(d, btf_array(t)->type, through_ptr); + return btf_dump_order_type(d, btf_array(t)->type, false); case BTF_KIND_STRUCT: case BTF_KIND_UNION: {