Commit 32913f34 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

futex: fix user access on powerpc



The powerpc user access code is special, and unlike other architectures
distinguishes between user access for reading and writing.

And commit 43a43faf ("futex: improve user space accesses") messed
that up.  It went undetected elsewhere, but caused ppc32 to fail early
during boot, because the user access had been started with
user_read_access_begin(), but then finished off with just a plain
"user_access_end()".

Note that the address-masking user access helpers don't even have that
read-vs-write distinction, so if powerpc ever wants to do address
masking tricks, we'll have to do some extra work for it.

[ Make sure to also do it for the EFAULT case, as pointed out by
  Christophe Leroy ]

Reported-by: default avatarAndreas Schwab <schwab@linux-m68k.org>
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
Link: https://lore.kernel.org/all/87bjxl6b0i.fsf@igel.home/


Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent fac04efc
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -265,11 +265,11 @@ static __always_inline int futex_read_inatomic(u32 *dest, u32 __user *from)
	else if (!user_read_access_begin(from, sizeof(*from)))
		return -EFAULT;
	unsafe_get_user(val, from, Efault);
	user_access_end();
	user_read_access_end();
	*dest = val;
	return 0;
Efault:
	user_access_end();
	user_read_access_end();
	return -EFAULT;
}