[PATCH] compat: be more consistent about [ug]id_t
When I first wrote the compat layer patches, I was somewhat cavalier about the definition of compat_uid_t and compat_gid_t (or maybe I just misunderstood :-)). This patch makes the compat types much more consistent with the types we are being compatible with and hopefully will fix a few bugs along the way. compat type type in compat arch __compat_[ug]id_t __kernel_[ug]id_t __compat_[ug]id32_t __kernel_[ug]id32_t compat_[ug]id_t [ug]id_t The difference is that compat_uid_t is always 32 bits (for the archs we care about) but __compat_uid_t may be 16 bits on some. Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Родитель
8dbfc5cfdc
Коммит
202e5979af
|
@ -546,20 +546,20 @@ struct msgbuf32 { s32 mtype; char mtext[1]; };
|
||||||
struct ipc_perm32
|
struct ipc_perm32
|
||||||
{
|
{
|
||||||
key_t key;
|
key_t key;
|
||||||
compat_uid_t uid;
|
__compat_uid_t uid;
|
||||||
compat_gid_t gid;
|
__compat_gid_t gid;
|
||||||
compat_uid_t cuid;
|
__compat_uid_t cuid;
|
||||||
compat_gid_t cgid;
|
__compat_gid_t cgid;
|
||||||
compat_mode_t mode;
|
compat_mode_t mode;
|
||||||
unsigned short seq;
|
unsigned short seq;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ipc64_perm32 {
|
struct ipc64_perm32 {
|
||||||
key_t key;
|
key_t key;
|
||||||
compat_uid_t uid;
|
__compat_uid_t uid;
|
||||||
compat_gid_t gid;
|
__compat_gid_t gid;
|
||||||
compat_uid_t cuid;
|
__compat_uid_t cuid;
|
||||||
compat_gid_t cgid;
|
__compat_gid_t cgid;
|
||||||
compat_mode_t mode;
|
compat_mode_t mode;
|
||||||
unsigned short seq;
|
unsigned short seq;
|
||||||
unsigned short __pad1;
|
unsigned short __pad1;
|
||||||
|
|
16
fs/compat.c
16
fs/compat.c
|
@ -720,14 +720,14 @@ compat_sys_io_submit(aio_context_t ctx_id, int nr, u32 __user *iocb)
|
||||||
struct compat_ncp_mount_data {
|
struct compat_ncp_mount_data {
|
||||||
compat_int_t version;
|
compat_int_t version;
|
||||||
compat_uint_t ncp_fd;
|
compat_uint_t ncp_fd;
|
||||||
compat_uid_t mounted_uid;
|
__compat_uid_t mounted_uid;
|
||||||
compat_pid_t wdog_pid;
|
compat_pid_t wdog_pid;
|
||||||
unsigned char mounted_vol[NCP_VOLNAME_LEN + 1];
|
unsigned char mounted_vol[NCP_VOLNAME_LEN + 1];
|
||||||
compat_uint_t time_out;
|
compat_uint_t time_out;
|
||||||
compat_uint_t retry_count;
|
compat_uint_t retry_count;
|
||||||
compat_uint_t flags;
|
compat_uint_t flags;
|
||||||
compat_uid_t uid;
|
__compat_uid_t uid;
|
||||||
compat_gid_t gid;
|
__compat_gid_t gid;
|
||||||
compat_mode_t file_mode;
|
compat_mode_t file_mode;
|
||||||
compat_mode_t dir_mode;
|
compat_mode_t dir_mode;
|
||||||
};
|
};
|
||||||
|
@ -784,9 +784,9 @@ static void *do_ncp_super_data_conv(void *raw_data)
|
||||||
|
|
||||||
struct compat_smb_mount_data {
|
struct compat_smb_mount_data {
|
||||||
compat_int_t version;
|
compat_int_t version;
|
||||||
compat_uid_t mounted_uid;
|
__compat_uid_t mounted_uid;
|
||||||
compat_uid_t uid;
|
__compat_uid_t uid;
|
||||||
compat_gid_t gid;
|
__compat_gid_t gid;
|
||||||
compat_mode_t file_mode;
|
compat_mode_t file_mode;
|
||||||
compat_mode_t dir_mode;
|
compat_mode_t dir_mode;
|
||||||
};
|
};
|
||||||
|
@ -1808,8 +1808,8 @@ struct compat_nfsctl_export {
|
||||||
compat_dev_t ex32_dev;
|
compat_dev_t ex32_dev;
|
||||||
compat_ino_t ex32_ino;
|
compat_ino_t ex32_ino;
|
||||||
compat_int_t ex32_flags;
|
compat_int_t ex32_flags;
|
||||||
compat_uid_t ex32_anon_uid;
|
__compat_uid_t ex32_anon_uid;
|
||||||
compat_gid_t ex32_anon_gid;
|
__compat_gid_t ex32_anon_gid;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct compat_nfsctl_fdparm {
|
struct compat_nfsctl_fdparm {
|
||||||
|
|
|
@ -13,10 +13,10 @@ typedef s32 compat_time_t;
|
||||||
typedef s32 compat_clock_t;
|
typedef s32 compat_clock_t;
|
||||||
typedef s32 compat_key_t;
|
typedef s32 compat_key_t;
|
||||||
typedef s32 compat_pid_t;
|
typedef s32 compat_pid_t;
|
||||||
typedef u16 compat_uid_t;
|
typedef u16 __compat_uid_t;
|
||||||
typedef u16 compat_gid_t;
|
typedef u16 __compat_gid_t;
|
||||||
typedef u32 compat_uid32_t;
|
typedef u32 __compat_uid32_t;
|
||||||
typedef u32 compat_gid32_t;
|
typedef u32 __compat_gid32_t;
|
||||||
typedef u16 compat_mode_t;
|
typedef u16 compat_mode_t;
|
||||||
typedef u32 compat_ino_t;
|
typedef u32 compat_ino_t;
|
||||||
typedef u16 compat_dev_t;
|
typedef u16 compat_dev_t;
|
||||||
|
@ -50,8 +50,8 @@ struct compat_stat {
|
||||||
compat_ino_t st_ino;
|
compat_ino_t st_ino;
|
||||||
compat_mode_t st_mode;
|
compat_mode_t st_mode;
|
||||||
compat_nlink_t st_nlink;
|
compat_nlink_t st_nlink;
|
||||||
compat_uid_t st_uid;
|
__compat_uid_t st_uid;
|
||||||
compat_gid_t st_gid;
|
__compat_gid_t st_gid;
|
||||||
compat_dev_t st_rdev;
|
compat_dev_t st_rdev;
|
||||||
u16 __pad2;
|
u16 __pad2;
|
||||||
u32 st_size;
|
u32 st_size;
|
||||||
|
@ -120,10 +120,10 @@ typedef u32 compat_sigset_word;
|
||||||
|
|
||||||
struct compat_ipc64_perm {
|
struct compat_ipc64_perm {
|
||||||
compat_key_t key;
|
compat_key_t key;
|
||||||
compat_uid32_t uid;
|
__compat_uid32_t uid;
|
||||||
compat_gid32_t gid;
|
__compat_gid32_t gid;
|
||||||
compat_uid32_t cuid;
|
__compat_uid32_t cuid;
|
||||||
compat_gid32_t cgid;
|
__compat_gid32_t cgid;
|
||||||
unsigned short mode;
|
unsigned short mode;
|
||||||
unsigned short __pad1;
|
unsigned short __pad1;
|
||||||
unsigned short seq;
|
unsigned short seq;
|
||||||
|
|
|
@ -15,8 +15,10 @@ typedef s32 compat_clock_t;
|
||||||
typedef s32 compat_suseconds_t;
|
typedef s32 compat_suseconds_t;
|
||||||
|
|
||||||
typedef s32 compat_pid_t;
|
typedef s32 compat_pid_t;
|
||||||
typedef s32 compat_uid_t;
|
typedef u32 __compat_uid_t;
|
||||||
typedef s32 compat_gid_t;
|
typedef u32 __compat_gid_t;
|
||||||
|
typedef u32 __compat_uid32_t;
|
||||||
|
typedef u32 __compat_gid32_t;
|
||||||
typedef u32 compat_mode_t;
|
typedef u32 compat_mode_t;
|
||||||
typedef u32 compat_ino_t;
|
typedef u32 compat_ino_t;
|
||||||
typedef u32 compat_dev_t;
|
typedef u32 compat_dev_t;
|
||||||
|
@ -52,8 +54,8 @@ struct compat_stat {
|
||||||
compat_ino_t st_ino;
|
compat_ino_t st_ino;
|
||||||
compat_mode_t st_mode;
|
compat_mode_t st_mode;
|
||||||
compat_nlink_t st_nlink;
|
compat_nlink_t st_nlink;
|
||||||
compat_uid_t st_uid;
|
__compat_uid32_t st_uid;
|
||||||
compat_gid_t st_gid;
|
__compat_gid32_t st_gid;
|
||||||
compat_dev_t st_rdev;
|
compat_dev_t st_rdev;
|
||||||
s32 st_pad2[2];
|
s32 st_pad2[2];
|
||||||
compat_off_t st_size;
|
compat_off_t st_size;
|
||||||
|
|
|
@ -13,8 +13,10 @@ typedef s32 compat_ssize_t;
|
||||||
typedef s32 compat_time_t;
|
typedef s32 compat_time_t;
|
||||||
typedef s32 compat_clock_t;
|
typedef s32 compat_clock_t;
|
||||||
typedef s32 compat_pid_t;
|
typedef s32 compat_pid_t;
|
||||||
typedef u32 compat_uid_t;
|
typedef u32 __compat_uid_t;
|
||||||
typedef u32 compat_gid_t;
|
typedef u32 __compat_gid_t;
|
||||||
|
typedef u32 __compat_uid32_t;
|
||||||
|
typedef u32 __compat_gid32_t;
|
||||||
typedef u16 compat_mode_t;
|
typedef u16 compat_mode_t;
|
||||||
typedef u32 compat_ino_t;
|
typedef u32 compat_ino_t;
|
||||||
typedef u32 compat_dev_t;
|
typedef u32 compat_dev_t;
|
||||||
|
@ -67,8 +69,8 @@ struct compat_stat {
|
||||||
compat_dev_t st_realdev;
|
compat_dev_t st_realdev;
|
||||||
u16 st_basemode;
|
u16 st_basemode;
|
||||||
u16 st_spareshort;
|
u16 st_spareshort;
|
||||||
compat_uid_t st_uid;
|
__compat_uid32_t st_uid;
|
||||||
compat_gid_t st_gid;
|
__compat_gid32_t st_gid;
|
||||||
u32 st_spare4[3];
|
u32 st_spare4[3];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -13,8 +13,10 @@ typedef s32 compat_ssize_t;
|
||||||
typedef s32 compat_time_t;
|
typedef s32 compat_time_t;
|
||||||
typedef s32 compat_clock_t;
|
typedef s32 compat_clock_t;
|
||||||
typedef s32 compat_pid_t;
|
typedef s32 compat_pid_t;
|
||||||
typedef u32 compat_uid_t;
|
typedef u32 __compat_uid_t;
|
||||||
typedef u32 compat_gid_t;
|
typedef u32 __compat_gid_t;
|
||||||
|
typedef u32 __compat_uid32_t;
|
||||||
|
typedef u32 __compat_gid32_t;
|
||||||
typedef u32 compat_mode_t;
|
typedef u32 compat_mode_t;
|
||||||
typedef u32 compat_ino_t;
|
typedef u32 compat_ino_t;
|
||||||
typedef u32 compat_dev_t;
|
typedef u32 compat_dev_t;
|
||||||
|
@ -48,8 +50,8 @@ struct compat_stat {
|
||||||
compat_ino_t st_ino;
|
compat_ino_t st_ino;
|
||||||
compat_mode_t st_mode;
|
compat_mode_t st_mode;
|
||||||
compat_nlink_t st_nlink;
|
compat_nlink_t st_nlink;
|
||||||
compat_uid_t st_uid;
|
__compat_uid32_t st_uid;
|
||||||
compat_gid_t st_gid;
|
__compat_gid32_t st_gid;
|
||||||
compat_dev_t st_rdev;
|
compat_dev_t st_rdev;
|
||||||
compat_off_t st_size;
|
compat_off_t st_size;
|
||||||
compat_off_t st_blksize;
|
compat_off_t st_blksize;
|
||||||
|
@ -144,10 +146,10 @@ static inline void __user *compat_alloc_user_space(long len)
|
||||||
*/
|
*/
|
||||||
struct compat_ipc64_perm {
|
struct compat_ipc64_perm {
|
||||||
compat_key_t key;
|
compat_key_t key;
|
||||||
compat_uid_t uid;
|
__compat_uid_t uid;
|
||||||
compat_gid_t gid;
|
__compat_gid_t gid;
|
||||||
compat_uid_t cuid;
|
__compat_uid_t cuid;
|
||||||
compat_gid_t cgid;
|
__compat_gid_t cgid;
|
||||||
compat_mode_t mode;
|
compat_mode_t mode;
|
||||||
unsigned int seq;
|
unsigned int seq;
|
||||||
unsigned int __pad2;
|
unsigned int __pad2;
|
||||||
|
|
|
@ -13,10 +13,10 @@ typedef s32 compat_ssize_t;
|
||||||
typedef s32 compat_time_t;
|
typedef s32 compat_time_t;
|
||||||
typedef s32 compat_clock_t;
|
typedef s32 compat_clock_t;
|
||||||
typedef s32 compat_pid_t;
|
typedef s32 compat_pid_t;
|
||||||
typedef u16 compat_uid_t;
|
typedef u16 __compat_uid_t;
|
||||||
typedef u16 compat_gid_t;
|
typedef u16 __compat_gid_t;
|
||||||
typedef u32 compat_uid32_t;
|
typedef u32 __compat_uid32_t;
|
||||||
typedef u32 compat_gid32_t;
|
typedef u32 __compat_gid32_t;
|
||||||
typedef u16 compat_mode_t;
|
typedef u16 compat_mode_t;
|
||||||
typedef u32 compat_ino_t;
|
typedef u32 compat_ino_t;
|
||||||
typedef u16 compat_dev_t;
|
typedef u16 compat_dev_t;
|
||||||
|
@ -51,8 +51,8 @@ struct compat_stat {
|
||||||
compat_ino_t st_ino;
|
compat_ino_t st_ino;
|
||||||
compat_mode_t st_mode;
|
compat_mode_t st_mode;
|
||||||
compat_nlink_t st_nlink;
|
compat_nlink_t st_nlink;
|
||||||
compat_uid_t st_uid;
|
__compat_uid_t st_uid;
|
||||||
compat_gid_t st_gid;
|
__compat_gid_t st_gid;
|
||||||
compat_dev_t st_rdev;
|
compat_dev_t st_rdev;
|
||||||
u16 __pad2;
|
u16 __pad2;
|
||||||
u32 st_size;
|
u32 st_size;
|
||||||
|
@ -140,10 +140,10 @@ static inline void __user *compat_alloc_user_space(long len)
|
||||||
|
|
||||||
struct compat_ipc64_perm {
|
struct compat_ipc64_perm {
|
||||||
compat_key_t key;
|
compat_key_t key;
|
||||||
compat_uid32_t uid;
|
__compat_uid32_t uid;
|
||||||
compat_gid32_t gid;
|
__compat_gid32_t gid;
|
||||||
compat_uid32_t cuid;
|
__compat_uid32_t cuid;
|
||||||
compat_gid32_t cgid;
|
__compat_gid32_t cgid;
|
||||||
compat_mode_t mode;
|
compat_mode_t mode;
|
||||||
unsigned short __pad1;
|
unsigned short __pad1;
|
||||||
unsigned short seq;
|
unsigned short seq;
|
||||||
|
|
|
@ -12,8 +12,10 @@ typedef s32 compat_ssize_t;
|
||||||
typedef s32 compat_time_t;
|
typedef s32 compat_time_t;
|
||||||
typedef s32 compat_clock_t;
|
typedef s32 compat_clock_t;
|
||||||
typedef s32 compat_pid_t;
|
typedef s32 compat_pid_t;
|
||||||
typedef u16 compat_uid_t;
|
typedef u16 __compat_uid_t;
|
||||||
typedef u16 compat_gid_t;
|
typedef u16 __compat_gid_t;
|
||||||
|
typedef u32 __compat_uid32_t;
|
||||||
|
typedef u32 __compat_gid32_t;
|
||||||
typedef u16 compat_mode_t;
|
typedef u16 compat_mode_t;
|
||||||
typedef u32 compat_ino_t;
|
typedef u32 compat_ino_t;
|
||||||
typedef u16 compat_dev_t;
|
typedef u16 compat_dev_t;
|
||||||
|
@ -47,8 +49,8 @@ struct compat_stat {
|
||||||
compat_ino_t st_ino;
|
compat_ino_t st_ino;
|
||||||
compat_mode_t st_mode;
|
compat_mode_t st_mode;
|
||||||
compat_nlink_t st_nlink;
|
compat_nlink_t st_nlink;
|
||||||
compat_uid_t st_uid;
|
__compat_uid_t st_uid;
|
||||||
compat_gid_t st_gid;
|
__compat_gid_t st_gid;
|
||||||
compat_dev_t st_rdev;
|
compat_dev_t st_rdev;
|
||||||
compat_off_t st_size;
|
compat_off_t st_size;
|
||||||
compat_time_t st_atime;
|
compat_time_t st_atime;
|
||||||
|
@ -177,10 +179,10 @@ static __inline__ void __user *compat_alloc_user_space(long len)
|
||||||
|
|
||||||
struct compat_ipc64_perm {
|
struct compat_ipc64_perm {
|
||||||
compat_key_t key;
|
compat_key_t key;
|
||||||
__kernel_uid_t uid;
|
__compat_uid32_t uid;
|
||||||
__kernel_gid_t gid;
|
__compat_gid32_t gid;
|
||||||
__kernel_uid_t cuid;
|
__compat_uid32_t cuid;
|
||||||
__kernel_gid_t cgid;
|
__compat_gid32_t cgid;
|
||||||
unsigned short __pad1;
|
unsigned short __pad1;
|
||||||
compat_mode_t mode;
|
compat_mode_t mode;
|
||||||
unsigned short __pad2;
|
unsigned short __pad2;
|
||||||
|
|
|
@ -14,10 +14,10 @@ typedef s32 compat_ssize_t;
|
||||||
typedef s32 compat_time_t;
|
typedef s32 compat_time_t;
|
||||||
typedef s32 compat_clock_t;
|
typedef s32 compat_clock_t;
|
||||||
typedef s32 compat_pid_t;
|
typedef s32 compat_pid_t;
|
||||||
typedef u16 compat_uid_t;
|
typedef u16 __compat_uid_t;
|
||||||
typedef u16 compat_gid_t;
|
typedef u16 __compat_gid_t;
|
||||||
typedef u32 compat_uid32_t;
|
typedef u32 __compat_uid32_t;
|
||||||
typedef u32 compat_gid32_t;
|
typedef u32 __compat_gid32_t;
|
||||||
typedef u16 compat_mode_t;
|
typedef u16 compat_mode_t;
|
||||||
typedef u32 compat_ino_t;
|
typedef u32 compat_ino_t;
|
||||||
typedef u16 compat_dev_t;
|
typedef u16 compat_dev_t;
|
||||||
|
@ -52,8 +52,8 @@ struct compat_stat {
|
||||||
compat_ino_t st_ino;
|
compat_ino_t st_ino;
|
||||||
compat_mode_t st_mode;
|
compat_mode_t st_mode;
|
||||||
compat_nlink_t st_nlink;
|
compat_nlink_t st_nlink;
|
||||||
compat_uid_t st_uid;
|
__compat_uid_t st_uid;
|
||||||
compat_gid_t st_gid;
|
__compat_gid_t st_gid;
|
||||||
compat_dev_t st_rdev;
|
compat_dev_t st_rdev;
|
||||||
u16 __pad2;
|
u16 __pad2;
|
||||||
u32 st_size;
|
u32 st_size;
|
||||||
|
@ -122,10 +122,10 @@ typedef u32 compat_sigset_word;
|
||||||
|
|
||||||
struct compat_ipc64_perm {
|
struct compat_ipc64_perm {
|
||||||
compat_key_t key;
|
compat_key_t key;
|
||||||
compat_uid32_t uid;
|
__compat_uid32_t uid;
|
||||||
compat_gid32_t gid;
|
__compat_gid32_t gid;
|
||||||
compat_uid32_t cuid;
|
__compat_uid32_t cuid;
|
||||||
compat_gid32_t cgid;
|
__compat_gid32_t cgid;
|
||||||
unsigned short mode;
|
unsigned short mode;
|
||||||
unsigned short __pad1;
|
unsigned short __pad1;
|
||||||
unsigned short seq;
|
unsigned short seq;
|
||||||
|
|
|
@ -18,6 +18,9 @@
|
||||||
#define compat_jiffies_to_clock_t(x) \
|
#define compat_jiffies_to_clock_t(x) \
|
||||||
(((unsigned long)(x) * COMPAT_USER_HZ) / HZ)
|
(((unsigned long)(x) * COMPAT_USER_HZ) / HZ)
|
||||||
|
|
||||||
|
typedef __compat_uid32_t compat_uid_t;
|
||||||
|
typedef __compat_gid32_t compat_gid_t;
|
||||||
|
|
||||||
struct rusage;
|
struct rusage;
|
||||||
|
|
||||||
struct compat_itimerspec {
|
struct compat_itimerspec {
|
||||||
|
|
12
ipc/compat.c
12
ipc/compat.c
|
@ -42,10 +42,10 @@ struct compat_msgbuf {
|
||||||
|
|
||||||
struct compat_ipc_perm {
|
struct compat_ipc_perm {
|
||||||
key_t key;
|
key_t key;
|
||||||
compat_uid_t uid;
|
__compat_uid_t uid;
|
||||||
compat_gid_t gid;
|
__compat_gid_t gid;
|
||||||
compat_uid_t cuid;
|
__compat_uid_t cuid;
|
||||||
compat_gid_t cgid;
|
__compat_gid_t cgid;
|
||||||
compat_mode_t mode;
|
compat_mode_t mode;
|
||||||
unsigned short seq;
|
unsigned short seq;
|
||||||
};
|
};
|
||||||
|
@ -174,8 +174,8 @@ static inline int __put_compat_ipc_perm(struct ipc64_perm *p,
|
||||||
struct compat_ipc_perm __user *up)
|
struct compat_ipc_perm __user *up)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
compat_uid_t u;
|
__compat_uid_t u;
|
||||||
compat_gid_t g;
|
__compat_gid_t g;
|
||||||
|
|
||||||
err = __put_user(p->key, &up->key);
|
err = __put_user(p->key, &up->key);
|
||||||
SET_UID(u, p->uid);
|
SET_UID(u, p->uid);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче