It seems this bug is fixed: (linux-2.6.12 is from kernel.org)
$ grep usp -A4 -B4 linux-2.6.12/include/asm-sparc64/compat.h
static __inline__ void __user *compat_alloc_user_space(long len)
{
struct pt_regs *regs = current_thread_info()->kregs;
unsigned long usp = regs->u_regs[UREG_I6];
if (!(test_thread_flag(TIF_32BIT)))
usp += STACK_BIAS;
else
usp &= 0xffffffffUL;
return (void __user *) (usp - len);
}
struct compat_ipc64_perm {
compat_key_t key;