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 0512EC4829A for ; Tue, 13 Feb 2024 23:15:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 829A98D001C; Tue, 13 Feb 2024 18:15:08 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 7D5A28D000E; Tue, 13 Feb 2024 18:15:08 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 677168D001C; Tue, 13 Feb 2024 18:15:08 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 537D38D000E for ; Tue, 13 Feb 2024 18:15:08 -0500 (EST) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id EF2F31C1132 for ; Tue, 13 Feb 2024 23:15:07 +0000 (UTC) X-FDA: 81788338254.21.313252E Received: from mail-pg1-f175.google.com (mail-pg1-f175.google.com [209.85.215.175]) by imf06.hostedemail.com (Postfix) with ESMTP id 205B9180005 for ; Tue, 13 Feb 2024 23:15:05 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=iOudOp9A; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf06.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.215.175 as permitted sender) smtp.mailfrom=andrii.nakryiko@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1707866106; 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=8OEKfcCmXlb4wWGiTUjfKHFZp2kD3XANacG8DRhPJEM=; b=THEwkn8z2uD0HrE/sGapT232/4AdH2CVULvry0BNjpwGssGe6LVONZpJXZtuhxpxoKfkmq wwULWV7xtseMeu3GhhX+T5Noth++V0dg/KhFUN/FijHrcNDUVj/YTkSMYkYWcJD6oOYiE1 Y+jUkV1IUnruaaUfnruNxz/WZWWni5g= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=iOudOp9A; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf06.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.215.175 as permitted sender) smtp.mailfrom=andrii.nakryiko@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1707866106; a=rsa-sha256; cv=none; b=XIcvdJAWBpcTIbda/ONfcwqR0yKYAg2USZfQSd5xuzwL+t2kzSjM8g9t9Q67iHftUR30HT sRvIKf1pQkYBJfg84noa95NvHeu+ppaUJ/6czkpPyyzPJI2JzajEb+OpeGQFU8RTwdHo1S icm5M1qbpXWisK/lu1nh0I1X1D6/oas= Received: by mail-pg1-f175.google.com with SMTP id 41be03b00d2f7-5d42e7ab8a9so3023119a12.3 for ; Tue, 13 Feb 2024 15:15:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1707866105; x=1708470905; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=8OEKfcCmXlb4wWGiTUjfKHFZp2kD3XANacG8DRhPJEM=; b=iOudOp9A/o/OHnkOoA5K4laQpFuUq5CW0BQmu4C8rgkeDDJoVlY36ZKADJX50lWQxK 80M1DwwxzZad3qtDJLyUX8ftEMHyYAlKpWpx5zDfMZYEdNljewtBwGiGGUDh8YJ2aE5O gmHaMieaVWMslZDgjtE4vD1fB4TUzBy3GxPxxu33vaRanBsqKfGLsG2J8WkLnv6sULxy gQqqh+jVF0jHTf0yH+0990WA79usb3T7y3qJQSWXzLoJYiy8Tj3osCvlYZnGA7dPgvNE YqvIZPwagOu7M1miG/2Ba/iBfVu0hGFZDn/S0OF1hrepKIkALkOccI2BdOb1LbPxAmF+ QlxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707866105; x=1708470905; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8OEKfcCmXlb4wWGiTUjfKHFZp2kD3XANacG8DRhPJEM=; b=W6lPilwVArOGY2xO7JCtxCkMOY057CKdk0Ipb7T6spejzIhOj0Vo5vlsqcVSZ/4+76 L9IlqcCJuaJ6tvylL6+fB3lO4FyR9hp/eiadCiehs1BQpbZYf+oEk1PVEVWQ76+21Lbr DMP1CJiGXzyQQJ1Ex+jQ52BniE2YC65zzOKIlH43aj1heD8CLuvA4dYFcwXGJwczAzTJ 57K4p0UO6QcajGrL+0YXeMZbNYT9Hw6hdbz57jevxNR70o9/wJyDOpqOjnCneHVKq5eu VayxZtnAaujaE9BtITKqmy19BMi3FG8xYVVmohfe51qeaRnsONzOUhqnXdA7cFpSLL58 FZIQ== X-Forwarded-Encrypted: i=1; AJvYcCWLV7tUX39tdVKcj4bbK1W4tCLqDMY/KBo/tTB8LgQEa4hlpKUF30kvgzHR3i7K2X1+c1uHFKJLiR1tswo5GsQpTvY= X-Gm-Message-State: AOJu0YzJIZqnHPY4oJiJIOG9B920/exnETAQbopyb9m96Hq9ROYmzcXc UEgassvTiKeLjPYGDfgRCb/Q4USzkjJzYLfttoe1FQaWIsEKOoM0enT8SIZoFizVGDj+Kn0d8Mz +Lp65d8oIp/VfuHRtkqZLaovbbAs= X-Google-Smtp-Source: AGHT+IE3RLo6cFKzVSEIsAkFOiDmgzqiSvpBC0ef7oaO0CGfM0GnCrWvurVzyvblR91XCTA7611s69nZsXHYHQX6qgc= X-Received: by 2002:a05:6a20:9585:b0:19e:ce54:4746 with SMTP id iu5-20020a056a20958500b0019ece544746mr1371092pzb.9.1707866104871; Tue, 13 Feb 2024 15:15:04 -0800 (PST) MIME-Version: 1.0 References: <20240209040608.98927-1-alexei.starovoitov@gmail.com> <20240209040608.98927-11-alexei.starovoitov@gmail.com> In-Reply-To: <20240209040608.98927-11-alexei.starovoitov@gmail.com> From: Andrii Nakryiko Date: Tue, 13 Feb 2024 15:14:51 -0800 Message-ID: Subject: Re: [PATCH v2 bpf-next 10/20] bpf: Recognize btf_decl_tag("arg:arena") as PTR_TO_ARENA. To: Alexei Starovoitov Cc: bpf@vger.kernel.org, daniel@iogearbox.net, andrii@kernel.org, memxor@gmail.com, eddyz87@gmail.com, tj@kernel.org, brho@google.com, hannes@cmpxchg.org, lstoakes@gmail.com, akpm@linux-foundation.org, urezki@gmail.com, hch@infradead.org, linux-mm@kvack.org, kernel-team@fb.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 205B9180005 X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: mmf381ndtrgjxnxma8uw4dwoj8a8pbco X-HE-Tag: 1707866105-502167 X-HE-Meta: U2FsdGVkX19wGvSo0/x5dIaZ4f7N7KJK+RCrbHw546B8FZijNIv7lwZwibJgAISYuNCiWPbdIZUN22gwU5B7xONnUbY7aSbVEh7UFX3IGbJhrGS2/FXXD8O728B2ODMcRlC43/ayGAiYDT/pP7fyeP2AXzZ51/RVossfyPJEhWnjHipmEQp3p76+PVGXaRLWOgMX/fQSsvYCfNsxyfbAe6/P9jGlBUG5XEqnNLQfzYbki8pcxxAvlGLJI8q7gDu9mYxADvio9y3+CeMFTnGh/jG/5MGGA5x/k7ND74ksUm2ODsxm1HxILrYAyiB/V7U/w7i3ZJiDAezudpoilyI6mWnkCfOdWz4ezDp7js6PXeJX4T0doviFR0og1ZlIXZB9SYpyjOg7gI+iTpWnIVYNkGapx5eEa1IS0YSUpYqMi7ssNjsPMkkjnTnZxyQMmQWXuEsqb9/jjq3VNOZ2Gr3uHCahiDQHZYsbb3v7Db4WOEpq/68QUHVAYLj9EOR9ry/ggg7+YkX2Xome5UIi1CYFTTh7bZk+llA2BofrXGdeBFegfIffoV65FyPc9j7mrxTK5nlSHYynrwpG3T4xZ17AhxI0Wp/GKasvFPS2OomAQ+JxS3S8XDWEIS5sZ2ZbiZrwOmuxQwi6FzTxrKVJrrUXddr2RhOy+Ifyh6rK4DuSJE8XYwmZF63wIsymgRMMov/SePCweVM9r/kItm8dn90X7Ap7brzO/NH5mT22hCZiFLA/dsQiNb6qlJ6wRXDoMx3wjpbjgEcqvlmLLs1o/lp1jMRBnqt0JtmrgcwVb4ECRtZH5yX4E1IA5LrkW67nH+hwOGTBu5kFu9lHI/L2MzS0dNvkU7OrhFkitxA0xbYWBxMeus5iwDt7EERAVJdhe+9Tj2Wzrg8Yt4YnRXmZze9vJskSgzNQK57OGiiqQkkmICEvfuBXvgjUqk9i7zI5hlF532KMXJO/Sh7wsKV+V30 mHELo6wJ 3BdGUZn3+tmkJ+kBUTQP/5ednWKesvpDH5ZMqNa/vOwdwwpzIH2cJtoDC1BevvpoAfHG10r95P/yeFyanhvHvWUMWh7r7hFEexp2ldcV4FbyniH381mQfecdu6qFSa6tk3+qj4SmyYFc2XTOkENRCUS22oU3pTfFb0NBtTN1FiZ7/AonYaDFIJMC6gSTbmY2v2hbXDUJ3Z0runB8GsyvRGCrqBryrkr6RqGH1Jwg4fEnSLvHvx7/jgfj7TOWJVAIscox0PeMUclDxfqAaFfN8Swvf/y129qE8AdXOY05m8gMoaQJvxYYqFV8ZQtb9XseydNU+T6kW9VcLq2B26Jt/Z9d5hwFtagWT33mvgHm0HQWfBLFZkNaVNpTimFSowUWNKLTzDtKKbGeFSXtj/Ogh9amRPlgEhfOHmpgVc9/lT64ADsGNjpIw88xcM3rIvH/KykE7ypUf/fmjf+TSqsDYUFS3pITDBeRrZwvBRfYk7sPqpEfaOLOu4Ecy4brDt2TYT/qA5kuLc2DSiBIbihZD+/zIAgUgrdXyd0YuKHyD3Feuf1zslQtEMIdSbWkQVCNS9nCyAE+dB9Hx2jw= 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 Thu, Feb 8, 2024 at 8:06=E2=80=AFPM Alexei Starovoitov wrote: > > From: Alexei Starovoitov > > In global bpf functions recognize btf_decl_tag("arg:arena") as PTR_TO_ARE= NA. > > Note, when the verifier sees: > > __weak void foo(struct bar *p) > > it recognizes 'p' as PTR_TO_MEM and 'struct bar' has to be a struct with = scalars. > Hence the only way to use arena pointers in global functions is to tag th= em with "arg:arena". > > Signed-off-by: Alexei Starovoitov > --- > include/linux/bpf.h | 1 + > kernel/bpf/btf.c | 19 +++++++++++++++---- > kernel/bpf/verifier.c | 15 +++++++++++++++ > 3 files changed, 31 insertions(+), 4 deletions(-) > [...] > diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c > index 5eeb9bf7e324..fa49602194d5 100644 > --- a/kernel/bpf/verifier.c > +++ b/kernel/bpf/verifier.c > @@ -9348,6 +9348,18 @@ static int btf_check_func_arg_match(struct bpf_ver= ifier_env *env, int subprog, > bpf_log(log, "arg#%d is expected to be no= n-NULL\n", i); > return -EINVAL; > } > + } else if (base_type(arg->arg_type) =3D=3D ARG_PTR_TO_ARE= NA) { > + /* > + * Can pass any value and the kernel won't crash,= but > + * only PTR_TO_ARENA or SCALAR make sense. Everyt= hing > + * else is a bug in the bpf program. Point it out= to > + * the user at the verification time instead of > + * run-time debug nightmare. > + */ > + if (reg->type !=3D PTR_TO_ARENA && reg->type !=3D= SCALAR_VALUE) { the comment above doesn't explain why it's ok to pass SCALAR_VALUE. Is it because PTR_TO_ARENA will become SCALAR_VALUE after some arithmetic operations and we don't want to regress user experience? If that's the case, what's the way for user to convert SCALAR_VALUE back to PTR_TO_ARENA without going through global subprog? bpf_cast_xxx instruction through assembly? > + bpf_log(log, "R%d is not a pointer to are= na or scalar.\n", regno); > + return -EINVAL; > + } > } else if (arg->arg_type =3D=3D (ARG_PTR_TO_DYNPTR | MEM_= RDONLY)) { > ret =3D process_dynptr_func(env, regno, -1, arg->= arg_type, 0); > if (ret) > @@ -20329,6 +20341,9 @@ static int do_check_common(struct bpf_verifier_en= v *env, int subprog) > reg->btf =3D bpf_get_btf_vmlinux(); /* ca= n't fail at this point */ > reg->btf_id =3D arg->btf_id; > reg->id =3D ++env->id_gen; > + } else if (base_type(arg->arg_type) =3D=3D ARG_PT= R_TO_ARENA) { > + /* caller can pass either PTR_TO_ARENA or= SCALAR */ > + mark_reg_unknown(env, regs, i); shouldn't we set the register type to PTR_TO_ARENA here? > } else { > WARN_ONCE(1, "BUG: unhandled arg#%d type = %d\n", > i - BPF_REG_1, arg->arg_type); > -- > 2.34.1 >