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 9AE7FC433F5 for ; Wed, 16 Feb 2022 13:17:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 28C426B0078; Wed, 16 Feb 2022 08:17:46 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 23BF36B007B; Wed, 16 Feb 2022 08:17:46 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0B61B6B0083; Wed, 16 Feb 2022 08:17:46 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0156.hostedemail.com [216.40.44.156]) by kanga.kvack.org (Postfix) with ESMTP id F2A7E6B0078 for ; Wed, 16 Feb 2022 08:17:45 -0500 (EST) Received: from smtpin27.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id AE9D0884B9 for ; Wed, 16 Feb 2022 13:17:45 +0000 (UTC) X-FDA: 79148695290.27.F5D60FE Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf16.hostedemail.com (Postfix) with ESMTP id 2D6A9180005 for ; Wed, 16 Feb 2022 13:17:45 +0000 (UTC) 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 7F31A616B7; Wed, 16 Feb 2022 13:17:44 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7EE9AC004E1; Wed, 16 Feb 2022 13:17:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1645017464; bh=2V/jchBP8kBRIT0s1XOrHdI0jJSQB1mfHKldiUel4c8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KuFPO1lFLaWvnXAnPRSPXDKFqb7rJ5xDcxE3HOkEkh9mpGyy2aBpcXuJFHyP2BdoZ iIp4jmx03VzbvjY3jDx2mjcAGWZ3M6b6KGO1G7/x3hr1VZyZUWQyAaOuIO6LczuG3t s3iHx0UgID4/K2IxZ+OKZBRd7zsoJb5hOURmNwJqU0plIAWdvYpmL3HekEpFCVAMfr 8WnO33IK+foc6PCI93ZQtqdAVfWmZsvEAd6G74UkXXzBrCyN8rQw5fAx9YmeYApaD7 +fwr8gc1dQ2Qw7KQuvm+3OcUmMsSGeZekIVcm/zvfN+x6o1AbHZuhJFFncpqvvxDOX kweEeDF9oCwgA== From: Arnd Bergmann To: Linus Torvalds , Christoph Hellwig , linux-arch@vger.kernel.org, linux-mm@kvack.org, linux-api@vger.kernel.org, arnd@arndb.de, linux-kernel@vger.kernel.org, viro@zeniv.linux.org.uk Cc: linux@armlinux.org.uk, will@kernel.org, guoren@kernel.org, bcain@codeaurora.org, geert@linux-m68k.org, monstr@monstr.eu, tsbogend@alpha.franken.de, nickhu@andestech.com, green.hu@gmail.com, dinguyen@kernel.org, shorne@gmail.com, deller@gmx.de, mpe@ellerman.id.au, peterz@infradead.org, mingo@redhat.com, mark.rutland@arm.com, hca@linux.ibm.com, dalias@libc.org, davem@davemloft.net, richard@nod.at, x86@kernel.org, jcmvbkbc@gmail.com, ebiederm@xmission.com, akpm@linux-foundation.org, ardb@kernel.org, linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, openrisc@lists.librecores.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, linux-xtensa@linux-xtensa.org, kernel test robot Subject: [PATCH v2 12/18] uaccess: fix type mismatch warnings from access_ok() Date: Wed, 16 Feb 2022 14:13:26 +0100 Message-Id: <20220216131332.1489939-13-arnd@kernel.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20220216131332.1489939-1-arnd@kernel.org> References: <20220216131332.1489939-1-arnd@kernel.org> MIME-Version: 1.0 X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: 2D6A9180005 X-Stat-Signature: s3ox1as4k8bcd3z3dqiqk6w9at9o4coj X-Rspam-User: Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=KuFPO1lF; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf16.hostedemail.com: domain of arnd@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=arnd@kernel.org X-HE-Tag: 1645017465-1061 Content-Transfer-Encoding: quoted-printable 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: From: Arnd Bergmann On some architectures, access_ok() does not do any argument type checking, so replacing the definition with a generic one causes a few warnings for harmless issues that were never caught before. Fix the ones that I found either through my own test builds or that were reported by the 0-day bot. Reported-by: kernel test robot Signed-off-by: Arnd Bergmann --- arch/arc/kernel/process.c | 2 +- arch/arm/kernel/swp_emulate.c | 2 +- arch/arm/kernel/traps.c | 2 +- arch/csky/kernel/signal.c | 2 +- arch/mips/sibyte/common/sb_tbprof.c | 6 +++--- arch/nios2/kernel/signal.c | 20 +++++++++++--------- arch/powerpc/lib/sstep.c | 4 ++-- arch/riscv/kernel/perf_callchain.c | 2 +- arch/sparc/kernel/signal_32.c | 2 +- lib/test_lockup.c | 4 ++-- 10 files changed, 24 insertions(+), 22 deletions(-) diff --git a/arch/arc/kernel/process.c b/arch/arc/kernel/process.c index 8e90052f6f05..5f7f5aab361f 100644 --- a/arch/arc/kernel/process.c +++ b/arch/arc/kernel/process.c @@ -43,7 +43,7 @@ SYSCALL_DEFINE0(arc_gettls) return task_thread_info(current)->thr_ptr; } =20 -SYSCALL_DEFINE3(arc_usr_cmpxchg, int *, uaddr, int, expected, int, new) +SYSCALL_DEFINE3(arc_usr_cmpxchg, int __user *, uaddr, int, expected, int= , new) { struct pt_regs *regs =3D current_pt_regs(); u32 uval; diff --git a/arch/arm/kernel/swp_emulate.c b/arch/arm/kernel/swp_emulate.= c index 6166ba38bf99..b74bfcf94fb1 100644 --- a/arch/arm/kernel/swp_emulate.c +++ b/arch/arm/kernel/swp_emulate.c @@ -195,7 +195,7 @@ static int swp_handler(struct pt_regs *regs, unsigned= int instr) destreg, EXTRACT_REG_NUM(instr, RT2_OFFSET), data); =20 /* Check access in reasonable access range for both SWP and SWPB */ - if (!access_ok((address & ~3), 4)) { + if (!access_ok((void __user *)(address & ~3), 4)) { pr_debug("SWP{B} emulation: access to %p not allowed!\n", (void *)address); res =3D -EFAULT; diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index da04ed85855a..26c8c8276297 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c @@ -576,7 +576,7 @@ do_cache_op(unsigned long start, unsigned long end, i= nt flags) if (end < start || flags) return -EINVAL; =20 - if (!access_ok(start, end - start)) + if (!access_ok((void __user *)start, end - start)) return -EFAULT; =20 return __do_cache_op(start, end); diff --git a/arch/csky/kernel/signal.c b/arch/csky/kernel/signal.c index c7b763d2f526..8867ddf3e6c7 100644 --- a/arch/csky/kernel/signal.c +++ b/arch/csky/kernel/signal.c @@ -136,7 +136,7 @@ static inline void __user *get_sigframe(struct ksigna= l *ksig, static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs= ) { - struct rt_sigframe *frame; + struct rt_sigframe __user *frame; int err =3D 0; =20 frame =3D get_sigframe(ksig, regs, sizeof(*frame)); diff --git a/arch/mips/sibyte/common/sb_tbprof.c b/arch/mips/sibyte/commo= n/sb_tbprof.c index f80d7a710333..01d00b87d0f5 100644 --- a/arch/mips/sibyte/common/sb_tbprof.c +++ b/arch/mips/sibyte/common/sb_tbprof.c @@ -437,13 +437,13 @@ static int sbprof_tb_release(struct inode *inode, s= truct file *filp) return 0; } =20 -static ssize_t sbprof_tb_read(struct file *filp, char *buf, +static ssize_t sbprof_tb_read(struct file *filp, char __user *buf, size_t size, loff_t *offp) { int cur_sample, sample_off, cur_count, sample_left; char *src; int count =3D 0; - char *dest =3D buf; + char __user *dest =3D buf; long cur_off =3D *offp; =20 if (!access_ok(buf, size)) @@ -512,7 +512,7 @@ static long sbprof_tb_ioctl(struct file *filp, if (err) break; =20 - err =3D put_user(TB_FULL, (int *) arg); + err =3D put_user(TB_FULL, (int __user *) arg); break; } =20 diff --git a/arch/nios2/kernel/signal.c b/arch/nios2/kernel/signal.c index 2009ae2d3c3b..386e46443b60 100644 --- a/arch/nios2/kernel/signal.c +++ b/arch/nios2/kernel/signal.c @@ -36,10 +36,10 @@ struct rt_sigframe { =20 static inline int rt_restore_ucontext(struct pt_regs *regs, struct switch_stack *sw, - struct ucontext *uc, int *pr2) + struct ucontext __user *uc, int *pr2) { int temp; - unsigned long *gregs =3D uc->uc_mcontext.gregs; + unsigned long __user *gregs =3D uc->uc_mcontext.gregs; int err; =20 /* Always make any pending restarted system calls return -EINTR */ @@ -102,10 +102,11 @@ asmlinkage int do_rt_sigreturn(struct switch_stack = *sw) { struct pt_regs *regs =3D (struct pt_regs *)(sw + 1); /* Verify, can we follow the stack back */ - struct rt_sigframe *frame =3D (struct rt_sigframe *) regs->sp; + struct rt_sigframe __user *frame; sigset_t set; int rval; =20 + frame =3D (struct rt_sigframe __user *) regs->sp; if (!access_ok(frame, sizeof(*frame))) goto badframe; =20 @@ -124,10 +125,10 @@ asmlinkage int do_rt_sigreturn(struct switch_stack = *sw) return 0; } =20 -static inline int rt_setup_ucontext(struct ucontext *uc, struct pt_regs = *regs) +static inline int rt_setup_ucontext(struct ucontext __user *uc, struct p= t_regs *regs) { struct switch_stack *sw =3D (struct switch_stack *)regs - 1; - unsigned long *gregs =3D uc->uc_mcontext.gregs; + unsigned long __user *gregs =3D uc->uc_mcontext.gregs; int err =3D 0; =20 err |=3D __put_user(MCONTEXT_VERSION, &uc->uc_mcontext.version); @@ -162,8 +163,9 @@ static inline int rt_setup_ucontext(struct ucontext *= uc, struct pt_regs *regs) return err; } =20 -static inline void *get_sigframe(struct ksignal *ksig, struct pt_regs *r= egs, - size_t frame_size) +static inline void __user *get_sigframe(struct ksignal *ksig, + struct pt_regs *regs, + size_t frame_size) { unsigned long usp; =20 @@ -174,13 +176,13 @@ static inline void *get_sigframe(struct ksignal *ks= ig, struct pt_regs *regs, usp =3D sigsp(usp, ksig); =20 /* Verify, is it 32 or 64 bit aligned */ - return (void *)((usp - frame_size) & -8UL); + return (void __user *)((usp - frame_size) & -8UL); } =20 static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs) { - struct rt_sigframe *frame; + struct rt_sigframe __user *frame; int err =3D 0; =20 frame =3D get_sigframe(ksig, regs, sizeof(*frame)); diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c index a94b0cd0bdc5..022d23ae300b 100644 --- a/arch/powerpc/lib/sstep.c +++ b/arch/powerpc/lib/sstep.c @@ -112,9 +112,9 @@ static nokprobe_inline long address_ok(struct pt_regs= *regs, { if (!user_mode(regs)) return 1; - if (__access_ok(ea, nb)) + if (access_ok((void __user *)ea, nb)) return 1; - if (__access_ok(ea, 1)) + if (access_ok((void __user *)ea, 1)) /* Access overlaps the end of the user region */ regs->dar =3D TASK_SIZE_MAX - 1; else diff --git a/arch/riscv/kernel/perf_callchain.c b/arch/riscv/kernel/perf_= callchain.c index 1fc075b8f764..f0c7bb98119a 100644 --- a/arch/riscv/kernel/perf_callchain.c +++ b/arch/riscv/kernel/perf_callchain.c @@ -15,7 +15,7 @@ static unsigned long user_backtrace(struct perf_callcha= in_entry_ctx *entry, { struct stackframe buftail; unsigned long ra =3D 0; - unsigned long *user_frame_tail =3D + unsigned long __user *user_frame_tail =3D (unsigned long *)(fp - sizeof(struct stackframe)); =20 /* Check accessibility of one struct frame_tail beyond */ diff --git a/arch/sparc/kernel/signal_32.c b/arch/sparc/kernel/signal_32.= c index ffab16369bea..74f80443b195 100644 --- a/arch/sparc/kernel/signal_32.c +++ b/arch/sparc/kernel/signal_32.c @@ -65,7 +65,7 @@ struct rt_signal_frame { */ static inline bool invalid_frame_pointer(void __user *fp, int fplen) { - if ((((unsigned long) fp) & 15) || !__access_ok((unsigned long)fp, fple= n)) + if ((((unsigned long) fp) & 15) || !access_ok(fp, fplen)) return true; =20 return false; diff --git a/lib/test_lockup.c b/lib/test_lockup.c index 906b598740a7..6a0f329a794a 100644 --- a/lib/test_lockup.c +++ b/lib/test_lockup.c @@ -417,8 +417,8 @@ static bool test_kernel_ptr(unsigned long addr, int s= ize) return false; =20 /* should be at least readable kernel address */ - if (access_ok(ptr, 1) || - access_ok(ptr + size - 1, 1) || + if (access_ok((void __user *)ptr, 1) || + access_ok((void __user *)ptr + size - 1, 1) || get_kernel_nofault(buf, ptr) || get_kernel_nofault(buf, ptr + size - 1)) { pr_err("invalid kernel ptr: %#lx\n", addr); --=20 2.29.2