ipc64_perm - generic
A message that is not in the archive (sent off-list or not yet received): [email protected]
Arnd Bergmann
maintainerQuoted 23 lines · On Monday 25 May 2009 18:54:42 Michal Simek wrote:
Hi Arnd, cc: John
From
asm-generic/posix_types.h17 #ifndef
__kernel_mode_t
18 typedef unsigned int__kernel_mode_t;
19 #endifThis structure is not aligned properly because of pad2.
19 struct
ipc64_perm{20 __kernel_key_t key; 21 __kernel_uid32_t uid; 22 __kernel_gid32_t gid; 23 __kernel_uid32_t cuid; 24 __kernel_gid32_t cgid; 25 __kernel_mode_t mode; 26 unsigned short __pad1; 27 unsigned short seq; 28 unsigned short __pad2; 29 unsigned long __unused1; 30 unsigned long __unused2;
Quoted 4 lines
31 };
I think we should remove
__pad1.
What do you think?
Right, well spotted.
I'd like to keep the struct ipc64_perm compatible with most architectures, so maybe we can play a little trick here:
Quoted 8 lines
Here is proposed struct.
struct ipc64_perm { __kernel_key_t key; __kernel_uid32_t uid; __kernel_gid32_t gid; __kernel_uid32_t cuid; __kernel_gid32_t cgid; __kernel_mode_t mode;
+ unsigned char __pad1[4 - sizeof(__kernel_mode_t)];
Quoted 5 lines
unsigned short seq; unsigned short __pad2; unsigned long __unused1; unsigned long __unused2;};
If that's too much of a hack, we could also change the default __kernel_mode_t in asm-generic/posix_types.h to unsigned short, which it is on all 32-bit architectures except mips and xtensa. For some reason, all 64 bit architechtures use unsigned int for mode_t, but I couldn't find out why. Glibc uses unsigned int externally.
Arnd <><
Quoted 50 lines · Arnd Bergmann
Quoted 22 lines · On Monday 25 May 2009 18:54:42 Michal Simek wrote:
Hi Arnd, cc: John
From
asm-generic/posix_types.h17 #ifndef
__kernel_mode_t
18 typedef unsigned int__kernel_mode_t;
19 #endifThis structure is not aligned properly because of pad2.
19 struct
ipc64_perm{20 __kernel_key_t key; 21 __kernel_uid32_t uid; 22 __kernel_gid32_t gid; 23 __kernel_uid32_t cuid; 24 __kernel_gid32_t cgid; 25 __kernel_mode_t mode; 26 unsigned short __pad1; 27 unsigned short seq; 28 unsigned short __pad2; 29 unsigned long __unused1; 30 unsigned long __unused2;Quoted 4 lines
31 };
I think we should remove
__pad1.
What do you think?Right, well spotted.
I'd like to keep the struct
ipc64_permcompatible with most architectures, so maybe we can play a little trick here:Quoted 8 lines
Here is proposed struct.
struct ipc64_perm { __kernel_key_t key; __kernel_uid32_t uid; __kernel_gid32_t gid; __kernel_uid32_t cuid; __kernel_gid32_t cgid; __kernel_mode_t mode;(quoted diff) +1
-0+ unsigned char __pad1[4 - sizeof(__kernel_mode_t)];Quoted 6 lines
unsigned short seq; unsigned short __pad2; unsigned long __unused1; unsigned long __unused2;};
Quoted 4 lines
If that's too much of a hack, we could also change the default
__kernel_mode_tinasm-generic/posix_types.hto unsigned short, which it is on all 32-bit architectures except mips and xtensa. For some reason, all 64 bit architechtures use unsigned int formode_t, but I couldn't find out why. Glibc uses unsigned int externally.
Is it this final solution (that above) or we just change kernel_mode_t to short?
Michal
Quoted 2 lines
Arnd <><
Signature · 2 lines
Michal Simek, Ing. (M.Eng) w: www.monstr.eu p: +42-0-721842854