Received: by 2002:a05:6358:e9c4:b0:b2:91dc:71ab with SMTP id hc4csp5786119rwb; Tue, 9 Aug 2022 04:12:50 -0700 (PDT) X-Google-Smtp-Source: AA6agR7GJ0k9Ma+nURGZcYMApP0mt52B+s1BTfymmBKNBNnXaK6l3+bHVdNztvvIWZ+iX8WycClj X-Received: by 2002:a62:52c3:0:b0:52d:c062:27d2 with SMTP id g186-20020a6252c3000000b0052dc06227d2mr22936782pfb.53.1660043569800; Tue, 09 Aug 2022 04:12:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660043569; cv=none; d=google.com; s=arc-20160816; b=IvdFRS6dN+8aaxyh4lq8E4mjrays3FI3bnl96PO5HhrlA74sgmygK/BkM8mckaawpD erxNcxXRtm2CjoVZrBdQMjVbb99t0VsGtQSzixZOsS4Og/bkBcetzs/l7tdTOfkY4Oii 0L1gAhj9JfR0zMpitlsKE0k3Se2KNdYJMOr5QQbao+DfBGIQRtHpcQuy/KZFl+muox5l +wsoL/c0MBoTJzSDe/GqX1FuBnemQWyE3XcaqppzdIPmzFPBbsg8Pg7njsZz11wjK4fs ti2Makz+M88AoOoRXZhMy0sGChEdVnymJt37zCCE51eP6dIOYr7XBQUiD6ymItavxtgE X05A== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=WaEXy7Gazz4beNS9Fpdj2dSn18vbZzjbZY+Q8mZr2QE=; b=RyOAyQ5aIPwvE3O4DRSLxOGDf+BmcRw0RwpyvieJsGlfcBHN37lk2MXAgzBkQHjvs8 UkE9jK3NpUz1usv6LyFNW6VdokSk13l/H3loAchyzpgnmFMNEJsmjUabhoOH33up7yCE BGUAbPDUv1UvDKT8WpxZlbysB1a1WY6nF/ZRLrVXsgLo8J9uXn+9iUAiIYg5St/9rToo hkUgAyAhMTNQZcs0W6RopnQPr9DwhA3Ab4CxZr8ywcjBgHFub0sxCNR8OmgZzfMWlPBr 0grhlqJTykopnZnKgMi9wVC5aPYo61WOreOX73jFx0f5k2yb8upWK9kZ8RB3YiHw0y+J u5LA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=BgCAgZ2a; 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=redhat.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n8-20020a63b448000000b0041be4782428si13126304pgu.122.2022.08.09.04.12.35; Tue, 09 Aug 2022 04:12:49 -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=@redhat.com header.s=mimecast20190719 header.b=BgCAgZ2a; 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=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242672AbiHIKxh (ORCPT + 99 others); Tue, 9 Aug 2022 06:53:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59632 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235826AbiHIKxY (ORCPT ); Tue, 9 Aug 2022 06:53:24 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id B4DA9389F for ; Tue, 9 Aug 2022 03:53:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1660042402; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=WaEXy7Gazz4beNS9Fpdj2dSn18vbZzjbZY+Q8mZr2QE=; b=BgCAgZ2aa1zwxEBnamupojxNIgO9S/veVDptZdoLDC9/n+hdANZstHiIFd4JrUXAQilbY8 1wiTyR78LbMq5hQjms5ajuAWdX3fnUgkZaD/OmLd9aslI+iMoAEp6REe5ZwxUOSpnM+UwB kujXjDtsWKzAdL5xzCbh00JwDR4wKok= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-92-OIl218LZOsKVWjxw_wETlA-1; Tue, 09 Aug 2022 06:53:19 -0400 X-MC-Unique: OIl218LZOsKVWjxw_wETlA-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 3F6693801168; Tue, 9 Aug 2022 10:53:19 +0000 (UTC) Received: from shodan.usersys.redhat.com (unknown [10.43.17.22]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E77D3C15BA1; Tue, 9 Aug 2022 10:53:18 +0000 (UTC) Received: by shodan.usersys.redhat.com (Postfix, from userid 1000) id E67FE1C02A6; Tue, 9 Aug 2022 12:53:17 +0200 (CEST) From: Artem Savkov To: Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , bpf@vger.kernel.org, netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Andrea Arcangeli , Daniel Vacek , Jiri Olsa , Song Liu , Daniel Xu , Kumar Kartikeya Dwivedi , Artem Savkov Subject: [PATCH bpf-next v4 1/3] bpf: add destructive kfunc flag Date: Tue, 9 Aug 2022 12:53:15 +0200 Message-Id: <20220809105317.436682-2-asavkov@redhat.com> In-Reply-To: <20220809105317.436682-1-asavkov@redhat.com> References: <20220809105317.436682-1-asavkov@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE 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 Add KF_DESTRUCTIVE flag for destructive functions. Functions with this flag set will require CAP_SYS_BOOT capabilities. Signed-off-by: Artem Savkov --- Documentation/bpf/kfuncs.rst | 9 +++++++++ include/linux/btf.h | 1 + kernel/bpf/verifier.c | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/Documentation/bpf/kfuncs.rst b/Documentation/bpf/kfuncs.rst index c0b7dae6dbf5..2e97e08be7de 100644 --- a/Documentation/bpf/kfuncs.rst +++ b/Documentation/bpf/kfuncs.rst @@ -146,6 +146,15 @@ that operate (change some property, perform some operation) on an object that was obtained using an acquire kfunc. Such kfuncs need an unchanged pointer to ensure the integrity of the operation being performed on the expected object. +2.4.5 KF_DESTRUCTIVE flag +-------------------------- + +The KF_DESTRUCTIVE flag is used to indicate functions calling which is +destructive to the system. For example such a call can result in system +rebooting or panicking. Due to this additional restrictions apply to these +calls. At the moment they only require CAP_SYS_BOOT capability, but more can be +added later. + 2.5 Registering the kfuncs -------------------------- diff --git a/include/linux/btf.h b/include/linux/btf.h index cdb376d53238..51a0961c84e3 100644 --- a/include/linux/btf.h +++ b/include/linux/btf.h @@ -49,6 +49,7 @@ * for this case. */ #define KF_TRUSTED_ARGS (1 << 4) /* kfunc only takes trusted pointer arguments */ +#define KF_DESTRUCTIVE (1 << 5) /* kfunc performs destructive actions */ struct btf; struct btf_member; diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 843a966cd02b..163cc0a2dc5a 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -7598,6 +7598,11 @@ static int check_kfunc_call(struct bpf_verifier_env *env, struct bpf_insn *insn, func_name); return -EACCES; } + if (*kfunc_flags & KF_DESTRUCTIVE && !capable(CAP_SYS_BOOT)) { + verbose(env, "destructive kfunc calls require CAP_SYS_BOOT capabilities\n"); + return -EACCES; + } + acq = *kfunc_flags & KF_ACQUIRE; /* Check the arguments */ -- 2.37.1