Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a94b1d1f authored by David S. Miller's avatar David S. Miller
Browse files

[SPARC64]: 8-byte align return value from compat_alloc_user_space()



Otherwise we get a ton of unaligned exceptions, for cases such
as compat_sys_msgrcv() which go:

	p = compat_alloc_user_space(second + sizeof(struct msgbuf));

and here 'second' can for example be an arbitrary odd value.

Based upon a bug report from Jurij Smakov.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 5cfc35cf
Loading
Loading
Loading
Loading
+5 −2
Original line number Original line Diff line number Diff line
@@ -164,7 +164,7 @@ static inline compat_uptr_t ptr_to_compat(void __user *uptr)
	return (u32)(unsigned long)uptr;
	return (u32)(unsigned long)uptr;
}
}


static __inline__ void __user *compat_alloc_user_space(long len)
static inline void __user *compat_alloc_user_space(long len)
{
{
	struct pt_regs *regs = current_thread_info()->kregs;
	struct pt_regs *regs = current_thread_info()->kregs;
	unsigned long usp = regs->u_regs[UREG_I6];
	unsigned long usp = regs->u_regs[UREG_I6];
@@ -174,7 +174,10 @@ static __inline__ void __user *compat_alloc_user_space(long len)
	else
	else
		usp &= 0xffffffffUL;
		usp &= 0xffffffffUL;


	return (void __user *) (usp - len);
	usp -= len;
	usp &= ~0x7UL;

	return (void __user *) usp;
}
}


struct compat_ipc64_perm {
struct compat_ipc64_perm {