From nobody Sat Feb 7 23:12:30 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 887AEC77B7A for ; Fri, 19 May 2023 09:43:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229582AbjESJna (ORCPT ); Fri, 19 May 2023 05:43:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47548 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231720AbjESJnK (ORCPT ); Fri, 19 May 2023 05:43:10 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0D00D2D79; Fri, 19 May 2023 02:41:18 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 1A3AF61167; Fri, 19 May 2023 09:40:05 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 00C86C433EF; Fri, 19 May 2023 09:40:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1684489204; bh=62m/R5D6FGhqWG6KoI9PHPEn7TdMdQqLFV3wk0LBtDc=; h=From:To:Cc:Subject:Date:From; b=r5ynEHQ4VnYlo+YQjrf4A6aNXFbJk6j3c64Y7p0QM+DrWvOKJbZh68x46Tqydb38O MzJEmqOAOCv/UjBxt/7hYmy5B5C8xXNk+Pk4slcPAxTzm5btMMHC8Tq4NLUcW99nsw EHkGmjo/iZ9JE/YY1bu16vysaEMjywfEh8dG2cv4T4U7F1sYQWJ137x0R7n1LKD+ug 5o7PlE0O4QN5ybvdtJkliLy1JQG4V3dwzKwfGg4D+x90k9W+F1nhotMLMP+WPAY/so mQGAkaUOWqty6IqB1mzWmq2/FnYe5i3AgFTYmLaxD46SMuJQ7Cr0Ckz7+VFoXphUWy fEs8pclnp2+HQ== From: Arnd Bergmann To: Andrew Morton Cc: Arnd Bergmann , Catalin Marinas , Will Deacon , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-perf-users@vger.kernel.org Subject: [PATCH] [suggestion] mm/gup: avoid IS_ERR_OR_NULL Date: Fri, 19 May 2023 11:39:13 +0200 Message-Id: <20230519093953.10972-1-arnd@kernel.org> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Arnd Bergmann While looking at an unused-variable warning, I noticed a new interface comi= ng in that requires the use of IS_ERR_OR_NULL(), which tends to indicate bad interface design and is usually surprising to users. Change get_user_page_vma_remote() to return -EIO when no pages were found and adapt the callers to match. Fixes: eca1a00155df ("mm/gup: remove vmas parameter from get_user_pages_rem= ote()") Signed-off-by: Arnd Bergmann --- I see the real bug is already fixed, but this seemed worth pointing out sti= ll. Not sure if this is the best way to handle the return types here, but the v= ersion in linux-next doesn't look great either. --- arch/arm64/kernel/mte.c | 4 ++-- include/linux/mm.h | 2 +- kernel/events/uprobes.c | 5 ++++- mm/memory.c | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/arch/arm64/kernel/mte.c b/arch/arm64/kernel/mte.c index 4c5ef9b20065..6983ba35ce16 100644 --- a/arch/arm64/kernel/mte.c +++ b/arch/arm64/kernel/mte.c @@ -434,8 +434,8 @@ static int __access_remote_tags(struct mm_struct *mm, u= nsigned long addr, struct page *page =3D get_user_page_vma_remote(mm, addr, gup_flags, &vma); =20 - if (IS_ERR_OR_NULL(page)) { - err =3D page =3D=3D NULL ? -EIO : PTR_ERR(page); + if (IS_ERR(page)) { + err =3D PTR_ERR(page); break; } =20 diff --git a/include/linux/mm.h b/include/linux/mm.h index 42ff3e04c006..4bb172e4818c 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2397,7 +2397,7 @@ static inline struct page *get_user_page_vma_remote(s= truct mm_struct *mm, if (got < 0) return ERR_PTR(got); if (got =3D=3D 0) - return NULL; + return ERR_PTR(-EIO); =20 vma =3D vma_lookup(mm, addr); if (WARN_ON_ONCE(!vma)) { diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c index cac3aef7c6f7..9cf2d4ba760e 100644 --- a/kernel/events/uprobes.c +++ b/kernel/events/uprobes.c @@ -474,7 +474,10 @@ int uprobe_write_opcode(struct arch_uprobe *auprobe, s= truct mm_struct *mm, gup_flags |=3D FOLL_SPLIT_PMD; /* Read the page with vaddr into memory */ old_page =3D get_user_page_vma_remote(mm, vaddr, gup_flags, &vma); - if (IS_ERR_OR_NULL(old_page)) + if (old_page =3D=3D ERR_PTR(-EIO)) + return 0; + + if (IS_ERR(old_page)) return PTR_ERR(old_page); =20 ret =3D verify_opcode(old_page, vaddr, &opcode); diff --git a/mm/memory.c b/mm/memory.c index 8358f3b853f2..f9a81278e76d 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -5604,7 +5604,7 @@ int __access_remote_vm(struct mm_struct *mm, unsigned= long addr, void *buf, struct page *page =3D get_user_page_vma_remote(mm, addr, gup_flags, &vma); =20 - if (IS_ERR_OR_NULL(page)) { + if (IS_ERR(page)) { #ifndef CONFIG_HAVE_IOREMAP_PROT break; #else --=20 2.39.2