aaf5369c72
[ Upstream commit 34ca70ef7d3a9fa7e89151597db5e37ae1d429b4 ]
As discussed in the strace issue tracker, it appears that the sparc32
sysvipc support has been broken for the past 11 years. It was however
working in compat mode, which is how it must have escaped most of the
regular testing.
The problem is that a cleanup patch inadvertently changed the uid/gid
fields in struct ipc64_perm from 32-bit types to 16-bit types in uapi
headers.
Both glibc and uclibc-ng still use the original types, so they should
work fine with compat mode, but not natively. Change the definitions
to use __kernel_uid32_t and __kernel_gid32_t again.
Fixes: 83c86984bf
("sparc: unify ipcbuf.h")
Link: https://github.com/strace/strace/issues/116
Cc: <stable@vger.kernel.org> # v2.6.29
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: "Dmitry V . Levin" <ldv@altlinux.org>
Cc: Rich Felker <dalias@libc.org>
Cc: libc-alpha@sourceware.org
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
34 lines
776 B
C
34 lines
776 B
C
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
|
#ifndef __SPARC_IPCBUF_H
|
|
#define __SPARC_IPCBUF_H
|
|
|
|
/*
|
|
* The ipc64_perm structure for sparc/sparc64 architecture.
|
|
* Note extra padding because this structure is passed back and forth
|
|
* between kernel and user space.
|
|
*
|
|
* Pad space is left for:
|
|
* - 32-bit seq
|
|
* - on sparc for 32 bit mode (it is 32 bit on sparc64)
|
|
* - 2 miscellaneous 64-bit values
|
|
*/
|
|
|
|
struct ipc64_perm
|
|
{
|
|
__kernel_key_t key;
|
|
__kernel_uid32_t uid;
|
|
__kernel_gid32_t gid;
|
|
__kernel_uid32_t cuid;
|
|
__kernel_gid32_t cgid;
|
|
#ifndef __arch64__
|
|
unsigned short __pad0;
|
|
#endif
|
|
__kernel_mode_t mode;
|
|
unsigned short __pad1;
|
|
unsigned short seq;
|
|
unsigned long long __unused1;
|
|
unsigned long long __unused2;
|
|
};
|
|
|
|
#endif /* __SPARC_IPCBUF_H */
|