1#ifndef _LINUX_HIGHUID_H
2#define _LINUX_HIGHUID_H
3
4#include <linux/config.h>
5#include <linux/types.h>
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35extern int overflowuid;
36extern int overflowgid;
37
38#define DEFAULT_OVERFLOWUID 65534
39#define DEFAULT_OVERFLOWGID 65534
40
41#ifdef CONFIG_UID16
42
43
44#define high2lowuid(uid) ((uid) > 65535 ? (old_uid_t)overflowuid : (old_uid_t)(uid))
45#define high2lowgid(gid) ((gid) > 65535 ? (old_gid_t)overflowgid : (old_gid_t)(gid))
46
47
48
49
50#define low2highuid(uid) ((uid) == (old_uid_t)-1 ? (uid_t)-1 : (uid_t)(uid))
51#define low2highgid(gid) ((gid) == (old_gid_t)-1 ? (gid_t)-1 : (gid_t)(gid))
52
53
54
55#define SET_UID16(var, uid) var = high2lowuid(uid)
56#define SET_GID16(var, gid) var = high2lowgid(gid)
57#define NEW_TO_OLD_UID(uid) high2lowuid(uid)
58#define NEW_TO_OLD_GID(gid) high2lowgid(gid)
59
60
61#define SET_OLDSTAT_UID(stat, uid) (stat).st_uid = high2lowuid(uid)
62#define SET_OLDSTAT_GID(stat, gid) (stat).st_gid = high2lowgid(gid)
63#define SET_STAT_UID(stat, uid) (stat).st_uid = high2lowuid(uid)
64#define SET_STAT_GID(stat, gid) (stat).st_gid = high2lowgid(gid)
65
66#else
67
68#define SET_UID16(var, uid) do { ; } while (0)
69#define SET_GID16(var, gid) do { ; } while (0)
70#define NEW_TO_OLD_UID(uid) (uid)
71#define NEW_TO_OLD_GID(gid) (gid)
72
73#define SET_OLDSTAT_UID(stat, uid) (stat).st_uid = (uid)
74#define SET_OLDSTAT_GID(stat, gid) (stat).st_gid = (gid)
75#define SET_STAT_UID(stat, uid) (stat).st_uid = (uid)
76#define SET_STAT_GID(stat, gid) (stat).st_gid = (gid)
77
78#endif
79
80
81
82
83
84
85
86
87
88
89
90extern int fs_overflowuid;
91extern int fs_overflowgid;
92
93#define DEFAULT_FS_OVERFLOWUID 65534
94#define DEFAULT_FS_OVERFLOWGID 65534
95
96
97
98
99
100#define fs_high2lowuid(uid) ((uid) > 65535 ? (uid16_t)fs_overflowuid : (uid16_t)(uid))
101#define fs_high2lowgid(gid) ((gid) > 65535 ? (gid16_t)fs_overflowgid : (gid16_t)(gid))
102
103#define low_16_bits(x) ((x) & 0xFFFF)
104#define high_16_bits(x) (((x) & 0xFFFF0000) >> 16)
105
106#endif
107