Skip to contentSkip to conversation

ipc64_perm - generic

DISCUSSION Arnd Bergmann 2 participants 2 messages May 25, 2009 – May 26, 2009 1 message not in the archive Generic include/asm header files

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]

Arnd Bergmann

author maintainer
#1 lore raw
Quoted 23 lines · On Monday 25 May 2009 18:54:42 Michal Simek wrote:

Hi Arnd, cc: John

From asm-generic/posix_types.h

17 #ifndef __kernel_mode_t
18 typedef unsigned int __kernel_mode_t;
19 #endif

This 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 <><
#2 lore raw
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.h

17 #ifndef __kernel_mode_t
18 typedef unsigned int __kernel_mode_t;
19 #endif

This 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;
(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_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.

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