From nobody Fri Dec 19 22:01:11 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 46E88C38A2D for ; Mon, 24 Oct 2022 16:13:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232292AbiJXQNw (ORCPT ); Mon, 24 Oct 2022 12:13:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42640 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232556AbiJXQMG (ORCPT ); Mon, 24 Oct 2022 12:12:06 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 272F113E3F; Mon, 24 Oct 2022 08:01:39 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 52273B81612; Mon, 24 Oct 2022 12:14:25 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9E777C433C1; Mon, 24 Oct 2022 12:14:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1666613664; bh=ZrB31+NJNwQic7KGl2gvkCCBKpq/6mExqiYHUP8iVO4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MmLkCL+C2WKcEXWeBYOlvRhySTyQheX+LkX94v/6sxPuQhNNuNtTKQgOt++b6L6nx nDquEiZhLKO+1dNbOksWsjCsy3EjDgjTmBrbmuklEqQH9jnqbT8Eg7uz2QXVEgBmnQ FG+3WDFj2I6b3ZTssbp7z520wk9OeKN2QKt3S2Nk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Quentin Monnet , Daniel Borkmann , Sasha Levin Subject: [PATCH 5.4 192/255] bpftool: Clear errno after libcaps checks Date: Mon, 24 Oct 2022 13:31:42 +0200 Message-Id: <20221024113009.358175984@linuxfoundation.org> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221024113002.471093005@linuxfoundation.org> References: <20221024113002.471093005@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Quentin Monnet [ Upstream commit cea558855c39b7f1f02ff50dcf701ca6596bc964 ] When bpftool is linked against libcap, the library runs a "constructor" function to compute the number of capabilities of the running kernel [0], at the beginning of the execution of the program. As part of this, it performs multiple calls to prctl(). Some of these may fail, and set errno to a non-zero value: # strace -e prctl ./bpftool version prctl(PR_CAPBSET_READ, CAP_MAC_OVERRIDE) =3D 1 prctl(PR_CAPBSET_READ, 0x30 /* CAP_??? */) =3D -1 EINVAL (Invalid argum= ent) prctl(PR_CAPBSET_READ, CAP_CHECKPOINT_RESTORE) =3D 1 prctl(PR_CAPBSET_READ, 0x2c /* CAP_??? */) =3D -1 EINVAL (Invalid argum= ent) prctl(PR_CAPBSET_READ, 0x2a /* CAP_??? */) =3D -1 EINVAL (Invalid argum= ent) prctl(PR_CAPBSET_READ, 0x29 /* CAP_??? */) =3D -1 EINVAL (Invalid argum= ent) ** fprintf added at the top of main(): we have errno =3D=3D 1 ./bpftool v7.0.0 using libbpf v1.0 features: libbfd, libbpf_strict, skeletons +++ exited with 0 +++ This has been addressed in libcap 2.63 [1], but until this version is available everywhere, we can fix it on bpftool side. Let's clean errno at the beginning of the main() function, to make sure that these checks do not interfere with the batch mode, where we error out if errno is set after a bpftool command. [0] https://git.kernel.org/pub/scm/libs/libcap/libcap.git/tree/libcap/cap= _alloc.c?h=3Dlibcap-2.65#n20 [1] https://git.kernel.org/pub/scm/libs/libcap/libcap.git/commit/?id=3Df2= 5a1b7e69f7b33e6afb58b3e38f3450b7d2d9a0 Signed-off-by: Quentin Monnet Signed-off-by: Daniel Borkmann Link: https://lore.kernel.org/bpf/20220815162205.45043-1-quentin@isovalent.= com Signed-off-by: Sasha Levin --- tools/bpf/bpftool/main.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tools/bpf/bpftool/main.c b/tools/bpf/bpftool/main.c index 4b03983acbef..35984bd354cb 100644 --- a/tools/bpf/bpftool/main.c +++ b/tools/bpf/bpftool/main.c @@ -364,6 +364,16 @@ int main(int argc, char **argv) =20 setlinebuf(stdout); =20 +#ifdef USE_LIBCAP + /* Libcap < 2.63 hooks before main() to compute the number of + * capabilities of the running kernel, and doing so it calls prctl() + * which may fail and set errno to non-zero. + * Let's reset errno to make sure this does not interfere with the + * batch mode. + */ + errno =3D 0; +#endif + last_do_help =3D do_help; pretty_output =3D false; json_output =3D false; --=20 2.35.1