Commit d0cf62fb authored by Helge Deller's avatar Helge Deller
Browse files

parisc: Fixes and cleanups in kernel uapi header files



This patch fixes some bugs and partly cleans up the parisc uapi header
files to what glibc defined:
- compat_semid64_ds was wrong and did not take the endianess into
  account
- ipc64_perm exported userspace types which broke building userspace
  packages on debian (e.g. trinity)
- ipc64_perm needs to use a 32bit mode_t on 64bit kernel
- msqid64_ds and semid64_ds needs unsigned longs for various struct members
- shmid64_ds exported size_t instead of __kernel_size_t

And finally add some compile-time checks for the sizes of those structs
to avoid future breakage.

Runtime-tested with the Linux Test Project (LTP) testsuite.

Cc: <stable@vger.kernel.org> # 3.18+
Reviewed-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarHelge Deller <deller@gmx.de>
parent 338f169a
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -206,10 +206,10 @@ struct compat_ipc64_perm {

struct compat_semid64_ds {
	struct compat_ipc64_perm sem_perm;
	compat_time_t sem_otime;
	unsigned int __unused1;
	compat_time_t sem_ctime;
	compat_time_t sem_otime;
	unsigned int __unused2;
	compat_time_t sem_ctime;
	compat_ulong_t sem_nsems;
	compat_ulong_t __unused3;
	compat_ulong_t __unused4;
+12 −7
Original line number Diff line number Diff line
#ifndef __PARISC_IPCBUF_H__
#define __PARISC_IPCBUF_H__

#include <asm/bitsperlong.h>
#include <linux/posix_types.h>

/*
 * The ipc64_perm structure for PA-RISC is almost identical to
 * kern_ipc_perm as we have always had 32-bit UIDs and GIDs in the kernel.
@@ -10,13 +13,15 @@

struct ipc64_perm
{
	key_t           key;
	uid_t           uid;
	gid_t           gid;
	uid_t           cuid;
	gid_t           cgid;
	__kernel_key_t		key;
	__kernel_uid_t		uid;
	__kernel_gid_t		gid;
	__kernel_uid_t		cuid;
	__kernel_gid_t		cgid;
#if __BITS_PER_LONG != 64
	unsigned short int	__pad1;
	mode_t          mode;
#endif
	__kernel_mode_t		mode;
	unsigned short int	__pad2;
	unsigned short int	seq;
	unsigned int		__pad3;
+5 −5
Original line number Diff line number Diff line
@@ -27,13 +27,13 @@ struct msqid64_ds {
	unsigned int   __pad3;
#endif
	__kernel_time_t msg_ctime;	/* last change time */
	unsigned int  msg_cbytes;	/* current number of bytes on queue */
	unsigned int  msg_qnum;	/* number of messages in queue */
	unsigned int  msg_qbytes;	/* max number of bytes on queue */
	unsigned long msg_cbytes;	/* current number of bytes on queue */
	unsigned long msg_qnum;		/* number of messages in queue */
	unsigned long msg_qbytes;	/* max number of bytes on queue */
	__kernel_pid_t msg_lspid;	/* pid of last msgsnd */
	__kernel_pid_t msg_lrpid;	/* last receive pid */
	unsigned int  __unused1;
	unsigned int  __unused2;
	unsigned long __unused1;
	unsigned long __unused2;
};

#endif /* _PARISC_MSGBUF_H */
+2 −0
Original line number Diff line number Diff line
@@ -7,8 +7,10 @@
 * assume GCC is being used.
 */

#ifndef __LP64__
typedef unsigned short		__kernel_mode_t;
#define __kernel_mode_t __kernel_mode_t
#endif

typedef unsigned short		__kernel_ipc_pid_t;
#define __kernel_ipc_pid_t __kernel_ipc_pid_t
+3 −3
Original line number Diff line number Diff line
@@ -23,9 +23,9 @@ struct semid64_ds {
	unsigned int	__pad2;
#endif
	__kernel_time_t	sem_ctime;		/* last change time */
	unsigned int	sem_nsems;		/* no. of semaphores in array */
	unsigned int	__unused1;
	unsigned int	__unused2;
	unsigned long 	sem_nsems;		/* no. of semaphores in array */
	unsigned long	__unused1;
	unsigned long	__unused2;
};

#endif /* _PARISC_SEMBUF_H */
Loading