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 575D8C02181 for ; Sat, 25 Jan 2025 00:11:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D418B2800C3; Fri, 24 Jan 2025 19:11:55 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id CCAEE2800B0; Fri, 24 Jan 2025 19:11:55 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B449B2800C3; Fri, 24 Jan 2025 19:11:55 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 929DE2800B0 for ; Fri, 24 Jan 2025 19:11:55 -0500 (EST) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 3D0FCB2021 for ; Sat, 25 Jan 2025 00:11:55 +0000 (UTC) X-FDA: 83044046190.07.8CB6A2F Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) by imf20.hostedemail.com (Postfix) with ESMTP id 476CA1C0013 for ; Sat, 25 Jan 2025 00:11:53 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=MnGXM+Bu; spf=pass (imf20.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.218.46 as permitted sender) smtp.mailfrom=andrii.nakryiko@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1737763913; 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=pDKhjtLDoAEYrS8Cw95F5DbSI5uvabYE9192eO3X0yY=; b=f3qc+CvcAMZpXPsWaUZdO2sXGhPxRqeoIy+5AspLj5voGQ3puA/bdw0NYhdT0Q5n1/EZSH 7WNPWq1ApQzKl4u+LwpnnJ1HeQeED4Mb9+h5+SmylMcA7wcR/W29F0G4uaGD7RoXcGuC6r Q5u8f3asu7f5hd5A4hAbaJs8s1p0p4c= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=MnGXM+Bu; spf=pass (imf20.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.218.46 as permitted sender) smtp.mailfrom=andrii.nakryiko@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1737763913; a=rsa-sha256; cv=none; b=Zju8yex4kX2bHkSZ509HWMBGu0mgP8bOMfZIUNtR8HJbfVfY9LZUi6lT1Z9H5AR+a+kMA8 wnFRs4TVz2hvR+7O92FX4d2rikdeLWRKAMxBLNCubSRh4IIiQZ3mLBB4eWdb4bWbP2yo1h LMaXiKkUD4Hx5l70BhnLLYTsO5UMvMo= Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-aaee2c5ee6eso545844866b.1 for ; Fri, 24 Jan 2025 16:11:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1737763912; x=1738368712; 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=pDKhjtLDoAEYrS8Cw95F5DbSI5uvabYE9192eO3X0yY=; b=MnGXM+ButUhrMVPBoxihtQoQPZ4ENZmQzYsArKw31mqS3lejEHVvQjPPy6M91pOqbf ew2kvyh2VsWaVvSzzuSdeOsWM2IUxdbTRHzmWrKZdzrl/ECgL+lVzDbx//tHTI6PIt8m e3UenEnXBg0fj3QJwBsM1zeDln4Iw9tkgw427KQOlKkAwZHIJJdgJ54S4unRNwGTBA68 ne704cRt/2pqG5i1FKEK5TqwbzFGYZRHhJ75OK+bxj2KXwhGZD2d+K4AI+WmP4GKvlYj 84g4tfj3jy3QpXO59Lzp06ZjUA1VMmt+ouFg5y2N4ltpnBhznjnDOfobIbATkhH1BBvq Kxbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737763912; x=1738368712; 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=pDKhjtLDoAEYrS8Cw95F5DbSI5uvabYE9192eO3X0yY=; b=ift0Z2/xUfUxJtqusTtkgKOcAqfkyP8EmhZCv2+8etce2WEAUtfcoRfC9qM49rI5WW rdoNn9xem8hFDHk2mjFZKSoXkqp19YicMZoX3PP9GQVHRZpZ6J3QM+3vvWsMwCpVdvkO KRlV9U+upZLSxTRuTE3LaH4tDO15wAuuh+eyg+XjES/lKFQb64uhFGhJsKh63BgnhISd EyUKWkeOEE56GC29XDIi9QtUpSCO8k9KuGPGl8j+VidQc13tHSdSqjiudEeAi6EW2cpE 9iANrPe57Am+Bxj+3GQ8Tfm/coDfMkH/+v2z639Lekuc0Qr+dEUGLo/3B5Vok8d8AQV4 WJIQ== X-Forwarded-Encrypted: i=1; AJvYcCUIKfoeAJriap0TVbksnM1rqgvsdfji6YX2GIb+nUwP40Zt5HAcNraiF9Mg6FUOsiZthLkpBxamwg==@kvack.org X-Gm-Message-State: AOJu0YzNhcIexQA/8nj1BiHlFxwem4o9yJQYEViNUA3i8KvWMT1ob3/n tAWzgsLDOotzuu8ZXlYQcu41+rnxLZC0g4GxK/2qgZyN7wkfLALKEyJh31O288q+eBzabLOPWZe TpqK9bxR5tbDmn9rCrDYDLk8cYis= X-Gm-Gg: ASbGncvYosMhb+vF+HuGbV01meHUzbR7vMIRGrZzZt3pTrzmHSITmOgKeh4rSBeOSlb VhE+t/mgIf5wC1QWTfYH+iar3D/L1fdm9/yfyMLL6K3BRPgLxJz5QZS0N/CmD X-Google-Smtp-Source: AGHT+IG6ZIhMPdpyE98BhykyhS7JaWHcS3SY2WdVzNeGbZGNB9Uuq5zeoeynQ6YX7KkFz07DPJNOt6qN3AJBNiv90Qs= X-Received: by 2002:a17:906:f58a:b0:aa6:ac9b:6822 with SMTP id a640c23a62f3a-ab38b0b80efmr3141975566b.12.1737763911586; Fri, 24 Jan 2025 16:11:51 -0800 (PST) MIME-Version: 1.0 References: <20250124183303.2019147-1-linux@jordanrome.com> In-Reply-To: <20250124183303.2019147-1-linux@jordanrome.com> From: Andrii Nakryiko Date: Fri, 24 Jan 2025 16:11:36 -0800 X-Gm-Features: AWEUYZlJInUVwmDrmIniFcyJ27py2tS5N7zpBW_MrbNudUS5BkS1G7RweizA1e4 Message-ID: Subject: Re: [bpf-next v3 2/3] bpf: Add bpf_copy_from_user_task_str kfunc To: Jordan Rome Cc: bpf@vger.kernel.org, linux-mm@kvack.org, Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Kernel Team , Andrew Morton , Shakeel Butt , Alexander Potapenko Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 476CA1C0013 X-Stat-Signature: 9ixmcafmdiotct45xy9u5kxg3fycskws X-Rspamd-Server: rspam08 X-Rspam-User: X-HE-Tag: 1737763913-533431 X-HE-Meta: U2FsdGVkX1841oQvMAQICCvk16Vx99kvnDqK+M0co9hG6m0l2pQAujzVzujP+efwWs5UYYctfwA9BPApbYAq2M/kr+SoxfdmidqbVSE89AehN1ACj1sEh3br+Ig6v+5/J6CXEuGTZfoRdZJZv9lJql+0X/i7TIOTECdMZ6YqcWSc6cUZcDmUHigjIx/rc9fFiTYJTRdM+oUavMbfzCSYPFXiLf9oBobkGZmL9PjUsy1VhG9ZBOc0SrmiR+AVpF9YXFygsReJxe+JPslgAXnNkEUUnRbNTYLvRqhjvYcT6ZQPjV1f71O/WZO6EK844KGPlZ+8fmaUJPhn+2NFdDkOhZUxYEZSOKbLw9isncuvFvQKg6F3bzFwLtjVbmEYJQCXWSmIdLrN0UxYCEokoRVxCfOL4PTcuK+wzHAEKh2dRlKoK3SAoh3mhNuFRZdV2LgPU1wubK1T4uJNuLTFmmCmsV39+d+4ZRe4xFNOAu+EMJ7L7zcrNtmqdHOJYfYdGGqe9g7KPlKxFjq8sJPC5JUtqZ45OF592yqL0k84hcLV4AMoK6/Pahr/szzuN8TBJUfW5d0mbw0tGNkEaMGdUJhNiMFJlQMGVoTKBQVGSdqqQ0Xe1VNyGIQsA+Hhze9jMhYui5IkgFTQI4LedVMKMNy8UjWIByU+wKLewaHfNy0Gmx6fptZyo89OZq3FvPbaE7nzFrMpla724fxpvvbB9xhTuy9W11XjccAUBCcEnDklgpw/WUItakxNIAdgmVAPxOpWNq6S64g77+O38k4vHmwYu9A/zYz+Oo4KVOCQ+VzskLx/yEKWAhs2isI3q/XASRkyBBLviCGMxoTYkaE7I1Sl18fW9U9ZJDa9BhsGXgmrudzHPdNEketxqWreX1wzaZxWISMWCXIHp50+7OFKCw34BYanDeUFgt3db69tXv57wR978iik5J8EWOy7V/A2K1iinRrhGg0BZDPaoLnb3GD yl6Fmg5o d06maNN1LRsXXNhDJ1Q3F84bfXwff9Eqp3PePHLbOkPz1ThuvP/SYF7yxoZUc+RdNRlHtx/lAZGZMgKUzlQIvczB63M61NpauFnQOv2cc0mUW3np594O40W2O8rCHgbBp9xLgSLWNu/38fBsujf8wYjxsleIAR+enMp/nZ0pxBwfbzvJM/pP0rftxmg0Ls/fTQHYLTge3P5+z6qc9pGGUKt0KvXhgDubpX3O1FSM701tVu930OFXfEua0Uj1PiTmwK/0r7C4Cah7ybmjen6R2ZNxQo9G+TaEEdOiApE1MPi760MuSMkFhiRxGfh52lGnOXAU7xYC4TEX+sAhsQICE+aEWblf8S2qCeTnIbiAoJ5RZJPzY6yvULHRi5IclCLzq+NNBgA+WDu7R21QeAt3Xq0ND2oHRDmJhZltn55EVztzkjXxfe2DDAQab8XCxMfkdb5ihQcKhO4C9DTw9bx/hs3XkutWmOPI0kK6O 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, Jan 24, 2025 at 10:33=E2=80=AFAM Jordan Rome = wrote: > > This new kfunc will be able to copy a string > from another process's/task's address space. > This is similar to `bpf_copy_from_user_str` > but accepts a `struct task_struct*` argument. > > Signed-off-by: Jordan Rome > --- > kernel/bpf/helpers.c | 51 ++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 51 insertions(+) > > diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c > index f27ce162427a..c26fabf97afd 100644 > --- a/kernel/bpf/helpers.c > +++ b/kernel/bpf/helpers.c > @@ -3082,6 +3082,56 @@ __bpf_kfunc void bpf_local_irq_restore(unsigned lo= ng *flags__irq_flag) > local_irq_restore(*flags__irq_flag); > } > > +/** > + * bpf_copy_from_user_task_str() - Copy a string from an task's address = space > + * @dst: Destination address, in kernel space. This buffer = must be > + * at least @dst__sz bytes long. > + * @dst__sz: Maximum number of bytes to copy, includes the trail= ing NUL. > + * @unsafe_ptr__ign: Source address in the task's address space. > + * @tsk: The task whose address space will be used > + * @flags: The only supported flag is BPF_F_PAD_ZEROS > + * > + * Copies a NULL-terminated string from a task's address space to *dst* = buffer. > + * If user string is too long this will still ensure zero termination in= the > + * dst buffer unless buffer size is 0. > + * > + * If BPF_F_PAD_ZEROS flag is set, memset the tail of @dst to 0 on succe= ss and > + * memset all of @dst on failure. > + * > + * Return: The number of copied bytes on success, including the NULL-ter= minator. s/NULL/NUL/ Other than that, LGTM: Acked-by: Andrii Nakryiko > + * A negative error code on failure. > + */ > +__bpf_kfunc int bpf_copy_from_user_task_str(void *dst, > + u32 dst__sz, > + const void __user *unsafe_ptr= __ign, > + struct task_struct *tsk, > + u64 flags) > +{ > + int ret =3D 0; nit: no need to zero initialize, you'll overwrite it unconditionally below > + > + if (unlikely(flags & ~BPF_F_PAD_ZEROS)) > + return -EINVAL; > + > + if (unlikely(!dst__sz)) > + return 0; > + > + ret =3D copy_remote_vm_str(tsk, (unsigned long)unsafe_ptr__ign, d= st, dst__sz, 0); > + > + if (ret <=3D 0) { > + if (flags & BPF_F_PAD_ZEROS) > + memset(dst, 0, dst__sz); > + return ret ?: -EINVAL; > + } > + > + if (ret < dst__sz) { > + if (flags & BPF_F_PAD_ZEROS) > + memset(dst + ret, 0, dst__sz - ret); > + return ret + 1; > + } > + > + return ret; > +} > + > __bpf_kfunc_end_defs(); > > BTF_KFUNCS_START(generic_btf_ids) > @@ -3174,6 +3224,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_copy_from_user_task_str, KF_SLEEPABLE) > BTF_ID_FLAGS(func, bpf_get_kmem_cache) > BTF_ID_FLAGS(func, bpf_iter_kmem_cache_new, KF_ITER_NEW | KF_SLEEPABLE) > BTF_ID_FLAGS(func, bpf_iter_kmem_cache_next, KF_ITER_NEXT | KF_RET_NULL = | KF_SLEEPABLE) > -- > 2.43.5 >