From: Catalin Marinas <catalin.marinas@arm.com>
To: kbuild-all@lists.01.org
Subject: Re: arch/arm64/kernel/signal.c:663:43: sparse: sparse: incorrect type in argument 1 (different address spaces)
Date: Tue, 31 May 2022 18:07:04 +0100 [thread overview]
Message-ID: <YpZLONkmubdmO8II@arm.com> (raw)
In-Reply-To: <202205280710.c7k1K4sD-lkp@intel.com>
[-- Attachment #1: Type: text/plain, Size: 6824 bytes --]
On Sat, May 28, 2022 at 07:40:31AM +0800, kernel test robot wrote:
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: bf272460d744112bacd4c4d562592decbf0edf64
> commit: a1f4ccd25cc256255813f584f10e5527369d4a02 arm64/sme: Provide Kconfig for SME
> date: 5 weeks ago
> config: arm64-randconfig-s032-20220527 (https://download.01.org/0day-ci/archive/20220528/202205280710.c7k1K4sD-lkp(a)intel.com/config)
> compiler: aarch64-linux-gcc (GCC) 11.3.0
> reproduce:
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # apt-get install sparse
> # sparse version: v0.6.4-14-g5a0004b5-dirty
> # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a1f4ccd25cc256255813f584f10e5527369d4a02
> git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
> git fetch --no-tags linus master
> git checkout a1f4ccd25cc256255813f584f10e5527369d4a02
> # save the config file
> mkdir build_dir && cp config build_dir/.config
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=arm64 SHELL=/bin/bash arch/arm64/kernel/
>
> If you fix the issue, kindly add following tag where applicable
> Reported-by: kernel test robot <lkp@intel.com>
>
>
> sparse warnings: (new ones prefixed by >>)
> >> arch/arm64/kernel/signal.c:663:43: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct user_ctxs [noderef] __user *user @@ got struct user_ctxs * @@
> arch/arm64/kernel/signal.c:663:43: sparse: expected struct user_ctxs [noderef] __user *user
> arch/arm64/kernel/signal.c:663:43: sparse: got struct user_ctxs *
> arch/arm64/kernel/signal.c:933:26: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected void ( [noderef] [usertype] __user *[assigned] [usertype] sigtramp )( ... ) @@ got void * @@
> arch/arm64/kernel/signal.c:933:26: sparse: expected void ( [noderef] [usertype] __user *[assigned] [usertype] sigtramp )( ... )
> arch/arm64/kernel/signal.c:933:26: sparse: got void *
> >> arch/arm64/kernel/signal.c:394:35: sparse: sparse: dereference of noderef expression
> >> arch/arm64/kernel/signal.c:394:35: sparse: sparse: dereference of noderef expression
> arch/arm64/kernel/signal.c:428:53: sparse: sparse: dereference of noderef expression
> arch/arm64/kernel/signal.c:428:53: sparse: sparse: dereference of noderef expression
>
> vim +663 arch/arm64/kernel/signal.c
>
> 47ccb02868cead Dave Martin 2017-06-15 620
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 621 static int restore_sigframe(struct pt_regs *regs,
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 622 struct rt_sigframe __user *sf)
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 623 {
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 624 sigset_t set;
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 625 int i, err;
> 47ccb02868cead Dave Martin 2017-06-15 626 struct user_ctxs user;
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 627
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 628 err = __copy_from_user(&set, &sf->uc.uc_sigmask, sizeof(set));
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 629 if (err == 0)
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 630 set_current_blocked(&set);
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 631
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 632 for (i = 0; i < 31; i++)
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 633 __get_user_error(regs->regs[i], &sf->uc.uc_mcontext.regs[i],
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 634 err);
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 635 __get_user_error(regs->sp, &sf->uc.uc_mcontext.sp, err);
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 636 __get_user_error(regs->pc, &sf->uc.uc_mcontext.pc, err);
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 637 __get_user_error(regs->pstate, &sf->uc.uc_mcontext.pstate, err);
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 638
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 639 /*
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 640 * Avoid sys_rt_sigreturn() restarting.
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 641 */
> 17c28958600928 Dave Martin 2017-08-01 642 forget_syscall(regs);
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 643
> dbd4d7ca563fd0 Mark Rutland 2016-03-01 644 err |= !valid_user_regs(®s->user_regs, current);
> 47ccb02868cead Dave Martin 2017-06-15 645 if (err == 0)
> 47ccb02868cead Dave Martin 2017-06-15 646 err = parse_user_sigframe(&user, sf);
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 647
> 6d502b6ba1b267 Suzuki K Poulose 2020-01-13 648 if (err == 0 && system_supports_fpsimd()) {
> 8cd969d28fd284 Dave Martin 2017-10-31 649 if (!user.fpsimd)
> 8cd969d28fd284 Dave Martin 2017-10-31 650 return -EINVAL;
> 8cd969d28fd284 Dave Martin 2017-10-31 651
> 8cd969d28fd284 Dave Martin 2017-10-31 652 if (user.sve) {
> 8cd969d28fd284 Dave Martin 2017-10-31 653 if (!system_supports_sve())
> 8cd969d28fd284 Dave Martin 2017-10-31 654 return -EINVAL;
> 8cd969d28fd284 Dave Martin 2017-10-31 655
> 8cd969d28fd284 Dave Martin 2017-10-31 656 err = restore_sve_fpsimd_context(&user);
> 8cd969d28fd284 Dave Martin 2017-10-31 657 } else {
> 47ccb02868cead Dave Martin 2017-06-15 658 err = restore_fpsimd_context(user.fpsimd);
> 8cd969d28fd284 Dave Martin 2017-10-31 659 }
> 8cd969d28fd284 Dave Martin 2017-10-31 660 }
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 661
> 39782210eb7e87 Mark Brown 2022-04-19 662 if (err == 0 && system_supports_sme() && user.za)
> 39782210eb7e87 Mark Brown 2022-04-19 @663 err = restore_za_context(&user);
I think the restore_za_context() definition is wrong. struct user_ctxs
__user *user shouldn't have the '__user' annotation, that's for the
pointers inside the structure. So:
diff --git a/arch/arm64/kernel/signal.c b/arch/arm64/kernel/signal.c
index edb2d9206a78..b0980fbb6bc7 100644
--- a/arch/arm64/kernel/signal.c
+++ b/arch/arm64/kernel/signal.c
@@ -385,7 +385,7 @@ static int preserve_za_context(struct za_context __user *ctx)
return err ? -EFAULT : 0;
}
-static int restore_za_context(struct user_ctxs __user *user)
+static int restore_za_context(struct user_ctxs *user)
{
int err;
unsigned int vq;
I'll do some proper patches tomorrow and send them for -rc1.
--
Catalin
WARNING: multiple messages have this Message-ID (diff)
From: Catalin Marinas <catalin.marinas@arm.com>
To: kernel test robot <lkp@intel.com>
Cc: Mark Brown <broonie@kernel.org>,
kbuild-all@lists.01.org, linux-kernel@vger.kernel.org
Subject: Re: arch/arm64/kernel/signal.c:663:43: sparse: sparse: incorrect type in argument 1 (different address spaces)
Date: Tue, 31 May 2022 18:07:04 +0100 [thread overview]
Message-ID: <YpZLONkmubdmO8II@arm.com> (raw)
In-Reply-To: <202205280710.c7k1K4sD-lkp@intel.com>
On Sat, May 28, 2022 at 07:40:31AM +0800, kernel test robot wrote:
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: bf272460d744112bacd4c4d562592decbf0edf64
> commit: a1f4ccd25cc256255813f584f10e5527369d4a02 arm64/sme: Provide Kconfig for SME
> date: 5 weeks ago
> config: arm64-randconfig-s032-20220527 (https://download.01.org/0day-ci/archive/20220528/202205280710.c7k1K4sD-lkp@intel.com/config)
> compiler: aarch64-linux-gcc (GCC) 11.3.0
> reproduce:
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # apt-get install sparse
> # sparse version: v0.6.4-14-g5a0004b5-dirty
> # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a1f4ccd25cc256255813f584f10e5527369d4a02
> git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
> git fetch --no-tags linus master
> git checkout a1f4ccd25cc256255813f584f10e5527369d4a02
> # save the config file
> mkdir build_dir && cp config build_dir/.config
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=arm64 SHELL=/bin/bash arch/arm64/kernel/
>
> If you fix the issue, kindly add following tag where applicable
> Reported-by: kernel test robot <lkp@intel.com>
>
>
> sparse warnings: (new ones prefixed by >>)
> >> arch/arm64/kernel/signal.c:663:43: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct user_ctxs [noderef] __user *user @@ got struct user_ctxs * @@
> arch/arm64/kernel/signal.c:663:43: sparse: expected struct user_ctxs [noderef] __user *user
> arch/arm64/kernel/signal.c:663:43: sparse: got struct user_ctxs *
> arch/arm64/kernel/signal.c:933:26: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected void ( [noderef] [usertype] __user *[assigned] [usertype] sigtramp )( ... ) @@ got void * @@
> arch/arm64/kernel/signal.c:933:26: sparse: expected void ( [noderef] [usertype] __user *[assigned] [usertype] sigtramp )( ... )
> arch/arm64/kernel/signal.c:933:26: sparse: got void *
> >> arch/arm64/kernel/signal.c:394:35: sparse: sparse: dereference of noderef expression
> >> arch/arm64/kernel/signal.c:394:35: sparse: sparse: dereference of noderef expression
> arch/arm64/kernel/signal.c:428:53: sparse: sparse: dereference of noderef expression
> arch/arm64/kernel/signal.c:428:53: sparse: sparse: dereference of noderef expression
>
> vim +663 arch/arm64/kernel/signal.c
>
> 47ccb02868cead Dave Martin 2017-06-15 620
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 621 static int restore_sigframe(struct pt_regs *regs,
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 622 struct rt_sigframe __user *sf)
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 623 {
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 624 sigset_t set;
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 625 int i, err;
> 47ccb02868cead Dave Martin 2017-06-15 626 struct user_ctxs user;
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 627
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 628 err = __copy_from_user(&set, &sf->uc.uc_sigmask, sizeof(set));
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 629 if (err == 0)
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 630 set_current_blocked(&set);
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 631
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 632 for (i = 0; i < 31; i++)
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 633 __get_user_error(regs->regs[i], &sf->uc.uc_mcontext.regs[i],
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 634 err);
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 635 __get_user_error(regs->sp, &sf->uc.uc_mcontext.sp, err);
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 636 __get_user_error(regs->pc, &sf->uc.uc_mcontext.pc, err);
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 637 __get_user_error(regs->pstate, &sf->uc.uc_mcontext.pstate, err);
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 638
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 639 /*
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 640 * Avoid sys_rt_sigreturn() restarting.
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 641 */
> 17c28958600928 Dave Martin 2017-08-01 642 forget_syscall(regs);
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 643
> dbd4d7ca563fd0 Mark Rutland 2016-03-01 644 err |= !valid_user_regs(®s->user_regs, current);
> 47ccb02868cead Dave Martin 2017-06-15 645 if (err == 0)
> 47ccb02868cead Dave Martin 2017-06-15 646 err = parse_user_sigframe(&user, sf);
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 647
> 6d502b6ba1b267 Suzuki K Poulose 2020-01-13 648 if (err == 0 && system_supports_fpsimd()) {
> 8cd969d28fd284 Dave Martin 2017-10-31 649 if (!user.fpsimd)
> 8cd969d28fd284 Dave Martin 2017-10-31 650 return -EINVAL;
> 8cd969d28fd284 Dave Martin 2017-10-31 651
> 8cd969d28fd284 Dave Martin 2017-10-31 652 if (user.sve) {
> 8cd969d28fd284 Dave Martin 2017-10-31 653 if (!system_supports_sve())
> 8cd969d28fd284 Dave Martin 2017-10-31 654 return -EINVAL;
> 8cd969d28fd284 Dave Martin 2017-10-31 655
> 8cd969d28fd284 Dave Martin 2017-10-31 656 err = restore_sve_fpsimd_context(&user);
> 8cd969d28fd284 Dave Martin 2017-10-31 657 } else {
> 47ccb02868cead Dave Martin 2017-06-15 658 err = restore_fpsimd_context(user.fpsimd);
> 8cd969d28fd284 Dave Martin 2017-10-31 659 }
> 8cd969d28fd284 Dave Martin 2017-10-31 660 }
> 2c020ed8d148f7 Catalin Marinas 2012-03-05 661
> 39782210eb7e87 Mark Brown 2022-04-19 662 if (err == 0 && system_supports_sme() && user.za)
> 39782210eb7e87 Mark Brown 2022-04-19 @663 err = restore_za_context(&user);
I think the restore_za_context() definition is wrong. struct user_ctxs
__user *user shouldn't have the '__user' annotation, that's for the
pointers inside the structure. So:
diff --git a/arch/arm64/kernel/signal.c b/arch/arm64/kernel/signal.c
index edb2d9206a78..b0980fbb6bc7 100644
--- a/arch/arm64/kernel/signal.c
+++ b/arch/arm64/kernel/signal.c
@@ -385,7 +385,7 @@ static int preserve_za_context(struct za_context __user *ctx)
return err ? -EFAULT : 0;
}
-static int restore_za_context(struct user_ctxs __user *user)
+static int restore_za_context(struct user_ctxs *user)
{
int err;
unsigned int vq;
I'll do some proper patches tomorrow and send them for -rc1.
--
Catalin
next prev parent reply other threads:[~2022-05-31 17:07 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-27 23:40 arch/arm64/kernel/signal.c:663:43: sparse: sparse: incorrect type in argument 1 (different address spaces) kernel test robot
2022-05-31 17:07 ` Catalin Marinas [this message]
2022-05-31 17:07 ` Catalin Marinas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YpZLONkmubdmO8II@arm.com \
--to=catalin.marinas@arm.com \
--cc=kbuild-all@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.