Received: by 2002:a05:6358:1087:b0:cb:c9d3:cd90 with SMTP id j7csp7392027rwi; Mon, 24 Oct 2022 14:03:30 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5KqDbhX7MoIUtZ/rGs6wksFXkiN/oj0Q0PJgDl2G01YVsiJl0RdhDvY851ztpIqoLCFpQy X-Received: by 2002:a17:906:ef90:b0:7ab:1b2c:b654 with SMTP id ze16-20020a170906ef9000b007ab1b2cb654mr2252830ejb.627.1666645410520; Mon, 24 Oct 2022 14:03:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666645410; cv=none; d=google.com; s=arc-20160816; b=oJiapWzqIyvpe6TKPMFAbJ/8wgWCvRNlBu2rWGtLtBgijFx+XdNNRzCkizuNAHEso+ hNuORuK8U03HdZ5Z43117dgLqDIgLIk19V2zoqu6HDGrTFq/mnwKUh1/0LZBaidDv7QZ yPXMFn1E0TAkYQEvuMka8S0d+lrq6UlZNuVezFHyTxqRLwqtGDyB28iqEyGOzDYtEjOJ Irmxe9xYHpZusdnTlV1UP5xXCOp9m57G1oF6oaEWRlm0fwFGZbrMQUYPKk3MNK4hhI/H 8IpOdHnWPeKrZOzz0KwEM/bKAC8LVudVR+NtropM5YQNdG9qmJaiIpGe673SlHlhlNGW fudQ== 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=HSl7N68XEC5VuMr8FnPyRBUmHj74XuGFkTEaBeXafPo=; b=rzo8FvgNwoBO/B4mk0yehSbT1VmsJC/vCfguAv92Qiu8jARCDAozPq1uhPmEZmyUT+ CwsqYvDplD+gR0YEDegx75oCp5Cv8aOTssm2iN2Mm0DYxY032lf3/xVnLJYn1p5ChWGe d9CNhpmYnuTK083FrRWwBRch3m0IUBcXjIZhxUOs9qmkS44/FoNmqrnHBf/B4b506tvc RVzLYhJFLXhbxZa3yhvCoEBCro5VpedWYgtUAYzhFBe4IIR6u4pqzp3WKmbgdUbQYPpD QjfJ0LKNeeZ3mM30ZnwqMw9OB3tOu7UMr8/Yq7TpL72DMrM5ZuUGe2P4BxBnoa2Hq+Jz yk9w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=0a0rc916; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id sh19-20020a1709076e9300b007a072b8240csi744477ejc.927.2022.10.24.14.03.05; Mon, 24 Oct 2022 14:03:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=0a0rc916; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S234692AbiJXUjA (ORCPT + 99 others); Mon, 24 Oct 2022 16:39:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40002 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234610AbiJXUiL (ORCPT ); Mon, 24 Oct 2022 16:38:11 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 256C4F593; Mon, 24 Oct 2022 11:49:27 -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 dfw.source.kernel.org (Postfix) with ESMTPS id 4A59B61257; Mon, 24 Oct 2022 12:51:15 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5A7D0C43470; Mon, 24 Oct 2022 12:51:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1666615874; bh=wptZSXMfTHCS8yg64d9eFyNTCBSG3MYIcBN8bHhvfOk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=0a0rc916Il6gPiPiiUaBeGDGNpOYd1b1LEf+EVXVD+sl5krvtSci3UNNCvFa3tDH0 4Qu71VF3YsZjKAL0IPKWvE7OGOC1SZVH+qwfWUUDmYhpXdohRc0Og+81C0gDvv9yO2 doAFKU6fzcu4vLMHK4NRjEHejdbFE4mRDQPYQ4Iw= 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.15 416/530] bpftool: Clear errno after libcaps checks Date: Mon, 24 Oct 2022 13:32:40 +0200 Message-Id: <20221024113103.925205821@linuxfoundation.org> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221024113044.976326639@linuxfoundation.org> References: <20221024113044.976326639@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.6 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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) = 1 prctl(PR_CAPBSET_READ, 0x30 /* CAP_??? */) = -1 EINVAL (Invalid argument) prctl(PR_CAPBSET_READ, CAP_CHECKPOINT_RESTORE) = 1 prctl(PR_CAPBSET_READ, 0x2c /* CAP_??? */) = -1 EINVAL (Invalid argument) prctl(PR_CAPBSET_READ, 0x2a /* CAP_??? */) = -1 EINVAL (Invalid argument) prctl(PR_CAPBSET_READ, 0x29 /* CAP_??? */) = -1 EINVAL (Invalid argument) ** fprintf added at the top of main(): we have errno == 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=libcap-2.65#n20 [1] https://git.kernel.org/pub/scm/libs/libcap/libcap.git/commit/?id=f25a1b7e69f7b33e6afb58b3e38f3450b7d2d9a0 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 d27ec4f852bb..b70c023f3a57 100644 --- a/tools/bpf/bpftool/main.c +++ b/tools/bpf/bpftool/main.c @@ -404,6 +404,16 @@ int main(int argc, char **argv) setlinebuf(stdout); +#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 = 0; +#endif + last_do_help = do_help; pretty_output = false; json_output = false; -- 2.35.1