0001
0002 #ifndef _LINUX_HIGHUID_H
0003 #define _LINUX_HIGHUID_H
0004
0005 #include <linux/types.h>
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035 extern int overflowuid;
0036 extern int overflowgid;
0037
0038 extern void __bad_uid(void);
0039 extern void __bad_gid(void);
0040
0041 #define DEFAULT_OVERFLOWUID 65534
0042 #define DEFAULT_OVERFLOWGID 65534
0043
0044 #ifdef CONFIG_UID16
0045
0046
0047 #define high2lowuid(uid) ((uid) & ~0xFFFF ? (old_uid_t)overflowuid : (old_uid_t)(uid))
0048 #define high2lowgid(gid) ((gid) & ~0xFFFF ? (old_gid_t)overflowgid : (old_gid_t)(gid))
0049
0050
0051
0052
0053 #define low2highuid(uid) ((uid) == (old_uid_t)-1 ? (uid_t)-1 : (uid_t)(uid))
0054 #define low2highgid(gid) ((gid) == (old_gid_t)-1 ? (gid_t)-1 : (gid_t)(gid))
0055
0056 #define __convert_uid(size, uid) \
0057 (size >= sizeof(uid) ? (uid) : high2lowuid(uid))
0058 #define __convert_gid(size, gid) \
0059 (size >= sizeof(gid) ? (gid) : high2lowgid(gid))
0060
0061
0062 #else
0063
0064 #define __convert_uid(size, uid) (uid)
0065 #define __convert_gid(size, gid) (gid)
0066
0067 #endif
0068
0069
0070 #define SET_UID(var, uid) do { (var) = __convert_uid(sizeof(var), (uid)); } while (0)
0071 #define SET_GID(var, gid) do { (var) = __convert_gid(sizeof(var), (gid)); } while (0)
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082 extern int fs_overflowuid;
0083 extern int fs_overflowgid;
0084
0085 #define DEFAULT_FS_OVERFLOWUID 65534
0086 #define DEFAULT_FS_OVERFLOWGID 65534
0087
0088
0089
0090
0091
0092 #define fs_high2lowuid(uid) ((uid) & ~0xFFFF ? (uid16_t)fs_overflowuid : (uid16_t)(uid))
0093 #define fs_high2lowgid(gid) ((gid) & ~0xFFFF ? (gid16_t)fs_overflowgid : (gid16_t)(gid))
0094
0095 #define low_16_bits(x) ((x) & 0xFFFF)
0096 #define high_16_bits(x) (((x) & 0xFFFF0000) >> 16)
0097
0098 #endif