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 4C2C9C021A0 for ; Tue, 11 Feb 2025 22:07:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3D23D6B0082; Tue, 11 Feb 2025 17:07:47 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 382266B0083; Tue, 11 Feb 2025 17:07:47 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 249606B0085; Tue, 11 Feb 2025 17:07:47 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 095CC6B0082 for ; Tue, 11 Feb 2025 17:07:47 -0500 (EST) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 715F61A0CF3 for ; Tue, 11 Feb 2025 22:07:46 +0000 (UTC) X-FDA: 83109051732.25.FAD2B91 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) by imf06.hostedemail.com (Postfix) with ESMTP id 8091C18000E for ; Tue, 11 Feb 2025 22:07:44 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=kEsq6fIf; spf=pass (imf06.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.216.48 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=1739311664; 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=NQiEQp2Wn/UFj5VBH1YBC/NtW/rLtpkeM2JH3Gt3fog=; b=Y4uPybVlCmGMQaUMyzQNNM8e4+SKw73AeGyQtJGqp6y/MdqKZlIlWpWxpTe+Nq9QUTzQol vAorOnsTaqBvxfx3yUZNTzwHgLoPGNwhN0rsuh2CgDoStLHgic2j6o3ly97XHZS91/SHrP vPhpU+t9b9T9cHUFacCKyEdrPj6rzB4= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=kEsq6fIf; spf=pass (imf06.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.216.48 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=1739311664; a=rsa-sha256; cv=none; b=mjEJ79oAslvZmgAXVheoYP2lG4sCI40/UD6uLbZs+dp6kPttFpb3tc/EGbZ3g6PSUlVaby iEUgBhntxSFSng3LtRzCcoBR4iShW0IQNc1QZibVwNRd4qe/S3+PYrlu+FjpQZLVL5gwrV ZdgbyRPf7Rzp9jG3MYsIint136hIZtM= Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-2fa3fe04dd2so5820095a91.0 for ; Tue, 11 Feb 2025 14:07:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739311663; x=1739916463; 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=NQiEQp2Wn/UFj5VBH1YBC/NtW/rLtpkeM2JH3Gt3fog=; b=kEsq6fIfxju73m5d7xkt5xK3Rgn1IuKDN36EI+zKEsvzy1B+0V80WEr3qj2K28Obfu lCbPyZBJH7ZgmVmQZebQtCpwo9rGK7zr+rb2bhTdwbG+lC0OQEHW3Dg0Z0sb3kaTZOo7 xIjOL7FjCBwIOeCQXo76tIbBj0J14O6HJb/PvBbn57aAa6GOZho0sqvdPuDhaaArZib4 iNdvA19FXM+AUZAHZQXnh4fTsECITaRDl4q7wwEb6o/vouvkrrsiikU+CUlX7hi1vq2c yN5qUOIM+Z7XN5nU6+PvUS5RLENYp+qoxlryYFQpzD1tHP+IBRl4uhyRWhED1u+wwHj2 gytQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739311663; x=1739916463; 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=NQiEQp2Wn/UFj5VBH1YBC/NtW/rLtpkeM2JH3Gt3fog=; b=Qjsl0rFM0DuBO2mv/1zQd88vl8ASgdPCyAn63g8QZm+Yph3t4U9uiFvG7Fo/fnAtri Iz7Wsq/wMC5IelatwYQGyl0FNCTbknZ6ZpkCH7WSXHY5526S8h0NN/kXeV1nE0r4h71a OO4apEUB2ig5EDKScBMUOsWpfZzRNkC9HNDSgdPjp9Yj3D3PY6wyx8FseqHTaecDjTGI 9ns/T609o5IJmD1kQw1HYy8HXg8M51KBJqfKtrslDIumSOdGwCmWdTUXujE0pJVxQP1z r9Wmbh4kL3I6MISWPdLkHZs6BapGnC3hlEYNc4/SlhOEjlrhesCNcdCGBu9qXuoNWnxA mgAg== X-Forwarded-Encrypted: i=1; AJvYcCWfekckVcG12v8Bc6Lun72NJH87oa3LkO6wx2xaEy6P+5OlhG15PmqZDeYjIZI0HKI55PB/a5CLqA==@kvack.org X-Gm-Message-State: AOJu0Yxmf2lopiuQ+Iscq5JzFay6uwEuG6GT1pi/3oApDNeR45I0OopO aYHIt2sileYZ685lLMjDOaMrZak3Yn3jOlNHUgXs9QWSoMBv7IALQkx7De+MkU0pGR4c2sG8BCo 0bVBNsVcuJiwL/9NJ5zDrxp3FzGQ= X-Gm-Gg: ASbGncu0lRY+pZhkFqfV9DQCObLm/l2h0qd5tGfEkb1T9LMYTY0X8icUdNV8WN+XK8R BdPRsIrAlx6w6Y21WlPXBx+YlluOvzNNE/0D3sRXnUyW8VeIAw87p4NXxbopZj7RfoIcr1/H+rs GjgFQWi6YfmJsN X-Google-Smtp-Source: AGHT+IEmrBMr+a0of/VHbtYIuWcJLPwUnCBRjOwFLE73bzk8Ek2S2SSnXzCAvwMnY4pnDVNfeiFTFty8THMIKy/eSi4= X-Received: by 2002:a17:90b:4d0c:b0:2ee:bbe0:98c6 with SMTP id 98e67ed59e1d1-2fbf5be093fmr1152423a91.8.1739311663210; Tue, 11 Feb 2025 14:07:43 -0800 (PST) MIME-Version: 1.0 References: <20250210221626.2098522-1-linux@jordanrome.com> In-Reply-To: <20250210221626.2098522-1-linux@jordanrome.com> From: Andrii Nakryiko Date: Tue, 11 Feb 2025 14:07:31 -0800 X-Gm-Features: AWEUYZlxg4NzGPm-M8G-0JJNSC3Y57lhia17wLJsu33851-u1Q0W3oihNFBnOPo Message-ID: Subject: Re: [bpf-next v7 1/3] mm: add copy_remote_vm_str 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-Rspam-User: X-Stat-Signature: pi77jazef4dwh1oge9ozbhjrkq348gh5 X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 8091C18000E X-HE-Tag: 1739311664-528201 X-HE-Meta: U2FsdGVkX1/slcOdJSbD4uInnTySYO8953869O5C+RrcrKGbekFSt9aiHBMept4djhRjXXOgm4t1viMF/17HJe/jjqAIpx7Ut17EEZEkTwsBPceNywWU92P00g9yknLpkAwQ7Fse/I0T7kuxYEFZimBys9huhq17wfP3Vy0ZtDd3fQROw87MprUhqd9AI1Ynb7N3mE4kAcgLN8LfFVaY9QzZkfJO+/eR+/m2lo1r2oVb4jZ3L4zWkWHKwCGlAHHs8Y+iAlOmKtcLSU1UewbXYh9PmZxUiT/WcvJ8Zqi/L7NJDFLRqxEjdAGB+Nw7G2s8eHPDtnUygLNQnAtJteC60jI7Pn44r4ykd7KeX+crGr7lZ2PHGysX/PJ1s4lvG6/34wJ1fhaYKPhmBh5yEpivyXkVqjVKF3qK5AR5zG7PjquApqBnYKFH/XTobwttpCoVo2O3ft+WM7BPps73bEKfcJnnykwrbwvH7mWdJ8Ep3UmGHRb2opr7Cr/7EillDul00xxvX0zS/UjLUu4eZ1QQnypQUUemaaA0V29iOoo69BXo61wqgbU6lRL1+De9qrMCnncO9nxJ2cYmEgHzCLFBwrWhLh3s6irA+MYUWtOvbRkmG9i97ksIlGkIXXPTR3xFJigrn39G4Yxw1heg4fdyB5aQXishCHJpfnhiP2KWa8a4wa9GjTmQY/3BFWPur1TOZF6k/KdL4c9Nk01p+Ai2vZiqHCUE8qwc7dbqlxrxJOeUsi7zyVSZtAUFozAW86R2T4XX5s4xhw+3/WSKcgFj7pcL51jSyabW033/PgOoTPA+11UgUZB1iahWy5z0Gk88F1Xn0HCKpFQ8wD6iMqUQA05O3lsOdoePk2juEmdUnZUwYTjJEf3F0LNCaZynYgzQKqUZomwzs0aOUD/+wyVdIBxuEqmX1dm+NEvIefZbtVUFtQo6FOWBOAOfMUZfyQ2C18xwxPshgrYAAmyDZ1x bYHfVvNS ptc8LeV3euQsK1qTJqcVn5fPIbWTDIOnulbJW8BERiX2ob6ByyMfD9R26CuTsVNl2HKy0RJtEf3YS6YYH0xRY7mJoGRWkQzKZ5SybA/A4GnYMFkdvsjRpCmnBhwKF0hnsSene5fy26PoS4iwaK0pxWYjJ7Kdn+amObtBTlsJLn8V0IWs0VqvP2r3J7ltiErf08SdgRxYhjoQw0jWsUP5C8owIQZAaVgVdi2Xski8PavAcuHI6njPCDCvSW6U0R7/2+ruemQ49Yie3tHuJgTiM7vFKXius000gBvFOfhJYYxWpamguaPImB/k92x3Wk9OqaFQAJSQvvNg5NSahz21GpO3R3NNbOBc8g4iqhr/7/REKiTlaAjComLCdJU/srIt0QYMdSzL3PikiPViVhwnxZe1Ofrb24NdCTzaFFS2WJ4p/Gsku56L7wgLRCBNDbTNuxZot5nN4/O7sNcptgGI96461OGqaXnZtSCES 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 Mon, Feb 10, 2025 at 2:23=E2=80=AFPM Jordan Rome = wrote: > > Similar to `access_process_vm` but specific to strings. > Also chunks reads by page and utilizes `strscpy` > for handling null termination. > > Signed-off-by: Jordan Rome > --- > include/linux/mm.h | 3 ++ > mm/memory.c | 119 +++++++++++++++++++++++++++++++++++++++++++++ > mm/nommu.c | 73 +++++++++++++++++++++++++++ > 3 files changed, 195 insertions(+) > > diff --git a/include/linux/mm.h b/include/linux/mm.h > index 7b1068ddcbb7..aee23d84ce01 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -2486,6 +2486,9 @@ extern int access_process_vm(struct task_struct *ts= k, unsigned long addr, > extern int access_remote_vm(struct mm_struct *mm, unsigned long addr, > void *buf, int len, unsigned int gup_flags); > > +extern int copy_remote_vm_str(struct task_struct *tsk, unsigned long add= r, > + void *buf, int len, unsigned int gup_flags); > + > long get_user_pages_remote(struct mm_struct *mm, > unsigned long start, unsigned long nr_pages, > unsigned int gup_flags, struct page **pages, > diff --git a/mm/memory.c b/mm/memory.c > index 539c0f7c6d54..e9d8584a7f56 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -6803,6 +6803,125 @@ int access_process_vm(struct task_struct *tsk, un= signed long addr, > } > EXPORT_SYMBOL_GPL(access_process_vm); > > +/* > + * Copy a string from another process's address space as given in mm. > + * If there is any error return -EFAULT. > + */ > +static int __copy_remote_vm_str(struct mm_struct *mm, unsigned long addr= , > + void *buf, int len, unsigned int gup_flags) > +{ > + void *old_buf =3D buf; > + int err =3D 0; > + > + *(char *)buf =3D '\0'; LGTM overall: Acked-by: Andrii Nakryiko But note that all this unconditional buf access will be incorrect if len =3D=3D 0. So either all of that has to be guarded with `if (len)`, just dropped, or declared unsupported, depending on what mm folks think. BPF helper won't ever call with len =3D=3D 0, so that's why my ack. (And yes, it would be nice to hear from someone from the MM side at this point, thank you!). > + > + if (mmap_read_lock_killable(mm)) > + return -EFAULT; > + > + /* Untag the address before looking up the VMA */ > + addr =3D untagged_addr_remote(mm, addr); > + > + /* Avoid triggering the temporary warning in __get_user_pages */ > + if (!vma_lookup(mm, addr)) { > + err =3D -EFAULT; > + goto out; > + } > + [...]