mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Lukas Bulwahn <lukas.bulwahn@gmail.com>
To: Dave Hansen <dave.hansen@linux.intel.com>,
	Andy Lutomirski <luto@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	x86@kernel.org, "H . Peter Anvin" <hpa@zytor.com>,
	kernel-janitors@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: Lukas Bulwahn <lukas.bulwahn@gmail.com>
Subject: [PATCH] x86/fault: cast instr to __user locally in prefetch()
Date: Tue,  1 Feb 2022 15:40:55 +0100	[thread overview]
Message-ID: <20220201144055.5670-1-lukas.bulwahn@gmail.com> (raw)

Commit 35f1c89b0cce ("x86/fault: Fix AMD erratum #91 errata fixup for user
code") uses accessors based on the access mode, i.e., it distinguishes its
access if instr carries a user address or a kernel address.

Since that commit, sparse complains about passing an argument without
__user annotation to get_user(), which expects a pointer with __user:

  arch/x86/mm/fault.c:152:29: warning: incorrect type in argument 1 (different address spaces)
  arch/x86/mm/fault.c:152:29:    expected void const volatile [noderef] __user *ptr
  arch/x86/mm/fault.c:152:29:    got unsigned char *[assigned] instr

instr is a user-space pointer in this branch of prefetch(), though:

If user_mode, then instr is from user space. And if not user_mode, then
instr is from kernel space. So, in this user_mode branch, confidently
annotate instr with __user before passing it to get_user().

This annotation does no harm and just reminds everyone of the reasoning
above and convinces sparse that the address spaces are handled correctly
here.

There is no need for others to check the situation of different address
spaces on this specific branch due to this warning from sparse again.

No functional change. No change in the generated object code.

Signed-off-by: Lukas Bulwahn <lukas.bulwahn@gmail.com>
---
 arch/x86/mm/fault.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
index d0074c6ed31a..fad8faa29d04 100644
--- a/arch/x86/mm/fault.c
+++ b/arch/x86/mm/fault.c
@@ -149,7 +149,7 @@ is_prefetch(struct pt_regs *regs, unsigned long error_code, unsigned long addr)
 		unsigned char opcode;
 
 		if (user_mode(regs)) {
-			if (get_user(opcode, instr))
+			if (get_user(opcode, (unsigned char __user *) instr))
 				break;
 		} else {
 			if (get_kernel_nofault(opcode, instr))
-- 
2.17.1


             reply	other threads:[~2022-02-01 14:41 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-01 14:40 Lukas Bulwahn [this message]
2022-04-04 18:29 ` [tip: x86/mm] x86/fault: Cast an argument to the proper address space " tip-bot2 for Lukas Bulwahn

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=20220201144055.5670-1-lukas.bulwahn@gmail.com \
    --to=lukas.bulwahn@gmail.com \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=kernel-janitors@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®