]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
sparc32: fix struct ipc64_perm type definition
authorArnd Bergmann <arnd@arndb.de>
Tue, 14 Jan 2020 13:26:14 +0000 (14:26 +0100)
committerBen Hutchings <ben@decadent.org.uk>
Fri, 22 May 2020 20:19:30 +0000 (21:19 +0100)
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

index 66013b4fe10d5a7e5b25736e3ed1c1068bad5e5d..58da9c4addb2d057af4637e7651afc64b8f25bf7 100644 (file)
 
 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 */