| From: Arnd Bergmann <arnd@arndb.de> |
| Date: Tue, 14 Jan 2020 14:26:14 +0100 |
| Subject: sparc32: fix struct ipc64_perm type definition |
| |
| commit 34ca70ef7d3a9fa7e89151597db5e37ae1d429b4 upstream. |
| |
| 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: 83c86984bff2 ("sparc: unify ipcbuf.h") |
| Link: https://github.com/strace/strace/issues/116 |
| 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: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| arch/sparc/include/uapi/asm/ipcbuf.h | 22 +++++++++++----------- |
| 1 file changed, 11 insertions(+), 11 deletions(-) |
| |
| --- a/arch/sparc/include/uapi/asm/ipcbuf.h |
| +++ b/arch/sparc/include/uapi/asm/ipcbuf.h |
| @@ -14,19 +14,19 @@ |
| |
| struct ipc64_perm |
| { |
| - __kernel_key_t key; |
| - __kernel_uid_t uid; |
| - __kernel_gid_t gid; |
| - __kernel_uid_t cuid; |
| - __kernel_gid_t cgid; |
| + __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; |
| + unsigned short __pad0; |
| #endif |
| - __kernel_mode_t mode; |
| - unsigned short __pad1; |
| - unsigned short seq; |
| - unsigned long long __unused1; |
| - unsigned long long __unused2; |
| + __kernel_mode_t mode; |
| + unsigned short __pad1; |
| + unsigned short seq; |
| + unsigned long long __unused1; |
| + unsigned long long __unused2; |
| }; |
| |
| #endif /* __SPARC_IPCBUF_H */ |