From mboxrd@z Thu Jan 1 00:00:00 1970 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1B910CF884F for ; Sat, 5 Oct 2024 00:06:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 61EF76B0364; Fri, 4 Oct 2024 20:06:24 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5A9BF6B0365; Fri, 4 Oct 2024 20:06:24 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 447D86B0366; Fri, 4 Oct 2024 20:06:24 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 235846B0364 for ; Fri, 4 Oct 2024 20:06:24 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id C15951A0685 for ; Fri, 4 Oct 2024 23:57:13 +0000 (UTC) X-FDA: 82637583546.09.68E322F Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf15.hostedemail.com (Postfix) with ESMTP id C554BA0004 for ; Fri, 4 Oct 2024 23:57:11 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=gUh6INGL; spf=pass (imf15.hostedemail.com: domain of song@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=song@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1728086190; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=vq6t7Sxfvbo2tbkPZkdR9JzMjc6rK+0WGvfWm6IN+vo=; b=brrao3caBjXRpV3DfR8RGJiDh798E7gkFeKiA/vyFXt/g867hBByIU+BgjOnTcv2oVKr7p KnnJIs8szHYhdOy2skUE7cHBjJEmYYO5jJad0jgsxAqhBsAtvoomTh2vvhbKjVe8DYz2aZ mWnx6CWWIak4YVcRV8qOlpPtu6sDmqE= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=gUh6INGL; spf=pass (imf15.hostedemail.com: domain of song@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=song@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1728086190; a=rsa-sha256; cv=none; b=sK3k6eBgGU28xKTiG5hzYf7H6W+/PDA+NS8gaq0fOvosR9UC/sbUIxaddNtDCa5PF8mO2J o2LSD8tndZCvTCPiTB4YAXdnMblJCFmHlzAVkw7/2lWWhiIwmJZa8FTSFzw+cr+lDJ0nbf 1HpeYxrvKI63SkP5UnCl4DW3uNa6z+w= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 7A8505C5BC8 for ; Fri, 4 Oct 2024 23:57:06 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 15E4DC4CED4 for ; Fri, 4 Oct 2024 23:57:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1728086230; bh=4hUROC6DIqthBNdPrjAkuLOYME9aDS8/AsLjsPBVw98=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=gUh6INGLLnvy7dBIymE9edcFKxmbRQqM8wMFskO2/RDmWX8yDEFNfcCjcNh6uh3nY Zt4Rc066ej2w6ySG6CdkKFzEdGGLWqeCxtfIQQJCWdUDbSbZq010e9BJwHTVvaU770 b7BskwNywhXAgGuN8PQ5b3cO5FolUJd7/jCPoE0PZFwRjhmMkyiUJxJL8mtq5U4yUP hovFXCfJTL2Y3mNxEqpDYdSCjTEQSatOk8LOP0gKnI6c9e+cmKr7nWfIaXFkomUgnp hPhFd4pBxdAPo9oe9zRLpuzcdkicjAaSig1Koey5oTwsNscC3kMkG+GwVt6baEpYOB HtkYlYbu+reDw== Received: by mail-il1-f175.google.com with SMTP id e9e14a558f8ab-3a0cc384a85so11599005ab.1 for ; Fri, 04 Oct 2024 16:57:10 -0700 (PDT) X-Forwarded-Encrypted: i=1; AJvYcCUju9HQvMD/BaeZ2VhFdu0FQ11oc/mzzVXvRwmsI2sgDsC1M5MitFfI8TJKnWPhnuL9133DByvIwA==@kvack.org X-Gm-Message-State: AOJu0Yx4DDR6LeUVI+ujUfuvR1U0SXl8DSW8hcma4F+Gr4qif3V1tFqa nUfj+slQQxFpDRFsxJ7fYbvZMwmpC6uoGNJ40GYmNz38zLQQ7iNNEECToqQ5M4V0Ok+7AMQKMCb sWxe0IdghK1Q2Kg+VK3NLX9s6LQ8= X-Google-Smtp-Source: AGHT+IFcsGHVrHHVnjJ64LBTXNmEoO3SYFvavCZqFJHGHWwaRA2sGiCLcet+688mt3P53rIGxuvTLw01D3IM/zCyNlw= X-Received: by 2002:a05:6e02:1fcd:b0:39f:558a:e404 with SMTP id e9e14a558f8ab-3a3759780bemr46249655ab.4.1728086229441; Fri, 04 Oct 2024 16:57:09 -0700 (PDT) MIME-Version: 1.0 References: <20241002180956.1781008-1-namhyung@kernel.org> <20241002180956.1781008-3-namhyung@kernel.org> In-Reply-To: From: Song Liu Date: Fri, 4 Oct 2024 16:56:57 -0700 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v4 bpf-next 2/3] mm/bpf: Add bpf_get_kmem_cache() kfunc To: Alexei Starovoitov Cc: Namhyung Kim , Roman Gushchin , Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Martin KaFai Lau , Eduard Zingerman , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , LKML , bpf , Andrew Morton , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Vlastimil Babka , Hyeonggon Yoo <42.hyeyoo@gmail.com>, linux-mm , Arnaldo Carvalho de Melo , Kees Cook Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Stat-Signature: 6ot76ieuxosr1uhxkc1t7qny9bds4z6a X-Rspamd-Queue-Id: C554BA0004 X-Rspamd-Server: rspam11 X-HE-Tag: 1728086231-615159 X-HE-Meta: U2FsdGVkX19VMgEIKgGpYfFM44G9VlsKRITkL0owCSDbwGmlbPUGPtL1pmgcJ0yYHjdSyqic48h3GVmX9EWvVDtICtJmZOZ2AKVZVrrfG98V7e8xbIk17MmutyXrh+qSZil7k1O2g/yN5yAVKOhP+Jt/kq5ekhM2HE/4P3r/hs/xAFKUSuXYnC1jmOiJ/1zcrmDAH5KorFTiSOm4kvaX6jcfkitHRfTjTP/typXvvDRxs0ZHJ0sRaszP34jX63WtNo+paqpNhIMK8zTOf9pemt+bH/jyPaLdPnOEGbLONURvpSPMQpV0FuVGoL3zF+VH1juAnso3DIz8Bc5MRlP1M+YsGOEtXiBCaeVmQgbNgKFvU/PgGZL1xiNM5IQlhnpc3N9f+qGciuJyCYk3yNN3o540XJzayGh3dk5lp4H1jiXz99CgvQfI+2yUuXTKcbVYA5nAWYeiXKywtMGbBo8RI3k80/4NeUdoTVgxgZ+LZ6WRHWOtsbNHxhXGezfOcqHPVJGolktgW3CpJSD4QjfwFe1zryWdD++68lj6mSO+pYoW6HXIt6mh8qE8N6Cv+OQtQIXN5GHTB2RSP34+TEl9926WFrC1n7j+xAxNZS1Vi72oHhbETGP2YgMeKE29TE+8hXSkeLIfGaOn3tDbiUuh4OSJrC6OYHsurS3tcAo3ktEmXXwajhu/dwxFlcOniv2XE9VttNT1qwNCgUX9ptvCnpn3sRja3ypzTCf5SUt/pyqHp3kSg+VwPXVh3zpLfXbPGatZNTW//+mEZTDkOV0bTlQcyYPxzrXG2bFZvgSLBoohyEFsEuzwdZ7nwsu1w99MUhOgkGyU/m7l5kroqNSuMT605rDedlZbyM8xtedoWGf6W++j60R0AEtD6Fi662inbVK3UtbPpEDyw7FyEED7Ndp3FJjwxDWzv8dyw+BRdV1hqPRMcJSNrYdW0j1CjXuxPzmk4iXyYXkm9Dyexa9 irL/VAmg EHdLrgXKCAqSzcIJrfx/n3ku6hDtZrBtbKcFN6M2PthBh7k0Ai3P3BYr1h7HtCns92UZKmAAY9H+tjw7durcWfZxSTnV45RjQApshnZWqmLMVe+4rU4tnYSaREWwQ8Y302xJi7n/Q9E0406yKG0aZjZJLZb4uaI7Q1V03NClNOEY8pMPFDBX6AeH/PlIUE1SfsY/HQsn/RE0vsrhiqNjRcyv6fTCCzKkp/5xSuDRpm7d65HZuaRBIyBQeBuvT9bPTeWNWpNSqcLyw3T3DtPmniOuChWkM5cQhvl4l/sn0DupbUlCBEFj2SkwEuxVzzrn5mV2ba4c2w87HBQ6hf7/iUYwCCC/U9FNEg6XjgCziqb+2y1prWeMJM32w4V6Is2/Uu+IwSdTWFP1QP1TfRBjESBPUkt1qu13LrblYICN1/pNgoYk= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Fri, Oct 4, 2024 at 4:44=E2=80=AFPM Alexei Starovoitov wrote: [...] > > diff --git i/kernel/bpf/helpers.c w/kernel/bpf/helpers.c > > index 3709fb142881..7311a26ecb01 100644 > > --- i/kernel/bpf/helpers.c > > +++ w/kernel/bpf/helpers.c > > @@ -3090,7 +3090,7 @@ BTF_ID_FLAGS(func, bpf_iter_bits_new, KF_ITER_NEW= ) > > BTF_ID_FLAGS(func, bpf_iter_bits_next, KF_ITER_NEXT | KF_RET_NULL) > > BTF_ID_FLAGS(func, bpf_iter_bits_destroy, KF_ITER_DESTROY) > > BTF_ID_FLAGS(func, bpf_copy_from_user_str, KF_SLEEPABLE) > > -BTF_ID_FLAGS(func, bpf_get_kmem_cache, KF_RET_NULL) > > +BTF_ID_FLAGS(func, bpf_get_kmem_cache, KF_RET_NULL | KF_TRUSTED_ARGS > > | KF_RCU_PROTECTED) > > I don't think KF_TRUSTED_ARGS approach would fit here. > Namhyung's use case is tracing. The 'addr' will be some potentially > arbitrary address from somewhere. The chance to see a trusted pointer > is probably very low in such a tracing use case. I thought the primary use case was to trace lock contention, for example, queued_spin_lock_slowpath(). Of course, a more general solution is better. > > The verifier change can mainly be the following: > > diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c > index 7d9b38ffd220..e09eb108e956 100644 > --- a/kernel/bpf/verifier.c > +++ b/kernel/bpf/verifier.c > @@ -12834,6 +12834,9 @@ static int check_kfunc_call(struct > bpf_verifier_env *env, struct bpf_insn *insn, > regs[BPF_REG_0].type =3D PTR_TO_BTF_ID; > regs[BPF_REG_0].btf_id =3D ptr_type_id; > > + if (meta.func_id =3D=3D > special_kfunc_list[KF_get_kmem_cache]) > + regs[BPF_REG_0].type |=3D PTR_UNTRUSTED; > + > if (is_iter_next_kfunc(&meta)) { > struct bpf_reg_state *cur_iter; This is easier than I thought. Thanks, Song > The returned 'struct kmem_cache *' won't be refcnt-ed (acquired). > It will be readonly via ptr_to_btf_id logic. > s->flags; > s->size; > s->offset; > access will be allowed but the verifier will sanitize them > with an inlined version of probe_read_kernel. > Even KF_RET_NULL can be dropped.