Patch "parisc: Fixes and cleanups in kernel uapi header files" has been added to the 4.3-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
parisc: Fixes and cleanups in kernel uapi header files
to the 4.3-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
parisc-fixes-and-cleanups-in-kernel-uapi-header-files.patch
and it can be found in the queue-4.3 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
d0cf62fb63f760e98244d31396b3b58f3a1e326bMon Sep 17 00:00:00 2001
From: Helge Deller <[email protected]>
Date: Fri, 6 Nov 2015 23:36:01 +0100
Subject: parisc: Fixes and cleanups in kernel uapi header files
From: Helge Deller <[email protected]>
commit d0cf62fb63f760e98244d31396b3b58f3a1e326b upstream.
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.
--- arch/parisc/include/asm/compat.h | 4 ++-- arch/parisc/include/uapi/asm/ipcbuf.h | 19 ++++++++++++------- arch/parisc/include/uapi/asm/msgbuf.h | 10 +++++----- arch/parisc/include/uapi/asm/posix_types.h | 2 ++ arch/parisc/include/uapi/asm/sembuf.h | 6 +++--- arch/parisc/include/uapi/asm/shmbuf.h | 8 ++++---- arch/parisc/mm/init.c | 16 ++++++++++++++++ 7 files changed, 44 insertions(+), 21 deletions(-)
arch/parisc/include/asm/compat.h +2 -2
@@ -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;
arch/parisc/include/uapi/asm/ipcbuf.h +12 -7
@@ -1,6 +1,9 @@#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,16 +13,18 @@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; +unsigned int __pad3;unsigned long long int __unused1;unsigned long long int __unused2; };
arch/parisc/include/uapi/asm/msgbuf.h +5 -5
@@ -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 */
arch/parisc/include/uapi/asm/posix_types.h +2 -0
@@ -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
arch/parisc/include/uapi/asm/sembuf.h +3 -3
@@ -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 */
arch/parisc/include/uapi/asm/shmbuf.h +4 -4
@@ -30,12 +30,12 @@ struct shmid64_ds {#if __BITS_PER_LONG !=64 unsigned int __pad4;#endif -size_t shm_segsz;/* size of segment (bytes) */ +__kernel_size_t shm_segsz;/* size of segment (bytes) */ __kernel_pid_t shm_cpid;/* pid of creator */ __kernel_pid_t shm_lpid;/* pid of last operator */ -unsigned int shm_nattch;/* no. of current attaches */ -unsigned int __unused1; -unsigned int __unused2; +unsigned long shm_nattch;/* no. of current attaches */ +unsigned long __unused1; +unsigned long __unused2; };struct shminfo64 {
arch/parisc/mm/init.c +16 -0
@@ -23,6 +23,7 @@#include <linux/unistd.h> #include <linux/nodemask.h> /* for node_online_map */ #include <linux/pagemap.h> /* for release_pages and page_cache_release */ +#include <linux/compat.h> #include <asm/pgalloc.h> #include <asm/pgtable.h>
@@ -30,6 +31,7 @@#include <asm/pdc_chassis.h> #include <asm/mmzone.h> #include <asm/sections.h> +#include <asm/msgbuf.h> extern int data_start;extern void parisc_kernel_start (void );/* Kernel entry point in head.S */
@@ -590,6 +592,20 @@ unsigned long pcxl_dma_start __read_mostvoid __init mem_init (void ) { +/* Do sanity checks on IPC (compat) structures */ +BUILD_BUG_ON (sizeof (struct ipc64_perm ) !=48 ); +#ifndef CONFIG_64BIT +BUILD_BUG_ON (sizeof (struct semid64_ds ) !=80 ); +BUILD_BUG_ON (sizeof (struct msqid64_ds ) !=104 ); +BUILD_BUG_ON (sizeof (struct shmid64_ds ) !=104 ); +#endif +#ifdef CONFIG_COMPAT +BUILD_BUG_ON (sizeof (struct compat_ipc64_perm ) !=sizeof (struct ipc64_perm )); +BUILD_BUG_ON (sizeof (struct compat_semid64_ds ) !=80 ); +BUILD_BUG_ON (sizeof (struct compat_msqid64_ds ) !=104 ); +BUILD_BUG_ON (sizeof (struct compat_shmid64_ds ) !=104 ); +#endif +/* Do sanity checks on page table constants */ BUILD_BUG_ON (PTE_ENTRY_SIZE !=sizeof (pte_t));BUILD_BUG_ON (PMD_ENTRY_SIZE !=sizeof (pmd_t));
Patches currently in stable-queue which might be from [email protected] are
queue-4.3/parisc-drop-unused-madv_xxxk_pages-flags-from-asm-mman.h.patch queue-4.3/parisc-fix-syscall-restarts.patch queue-4.3/parisc-fixes-and-cleanups-in-kernel-uapi-header-files.patch queue-4.3/parisc-fix-__arch_si_preamble_size.patch