Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
projid.h
Go to the documentation of this file.
1
#ifndef _LINUX_PROJID_H
2
#define _LINUX_PROJID_H
3
4
/*
5
* A set of types for the internal kernel types representing project ids.
6
*
7
* The types defined in this header allow distinguishing which project ids in
8
* the kernel are values used by userspace and which project id values are
9
* the internal kernel values. With the addition of user namespaces the values
10
* can be different. Using the type system makes it possible for the compiler
11
* to detect when we overlook these differences.
12
*
13
*/
14
#include <linux/types.h>
15
16
struct
user_namespace
;
17
extern
struct
user_namespace
init_user_ns
;
18
19
typedef
__kernel_uid32_t
projid_t
;
20
21
#ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS
22
23
typedef
struct
{
24
projid_t
val
;
25
}
kprojid_t
;
26
27
static
inline
projid_t
__kprojid_val(
kprojid_t
projid)
28
{
29
return
projid.val;
30
}
31
32
#define KPROJIDT_INIT(value) (kprojid_t){ value }
33
34
#else
35
36
typedef
projid_t
kprojid_t
;
37
38
static
inline
projid_t
__kprojid_val(
kprojid_t
projid)
39
{
40
return
projid;
41
}
42
43
#define KPROJIDT_INIT(value) ((kprojid_t) value )
44
45
#endif
46
47
#define INVALID_PROJID KPROJIDT_INIT(-1)
48
#define OVERFLOW_PROJID 65534
49
50
static
inline
bool
projid_eq(
kprojid_t
left
,
kprojid_t
right
)
51
{
52
return
__kprojid_val(left) == __kprojid_val(right);
53
}
54
55
static
inline
bool
projid_lt(
kprojid_t
left
,
kprojid_t
right
)
56
{
57
return
__kprojid_val(left) < __kprojid_val(right);
58
}
59
60
static
inline
bool
projid_valid(
kprojid_t
projid)
61
{
62
return
!projid_eq(projid,
INVALID_PROJID
);
63
}
64
65
#ifdef CONFIG_USER_NS
66
67
extern
kprojid_t
make_kprojid
(
struct
user_namespace
*
from
,
projid_t
projid);
68
69
extern
projid_t
from_kprojid
(
struct
user_namespace
*to,
kprojid_t
projid);
70
extern
projid_t
from_kprojid_munged
(
struct
user_namespace
*to,
kprojid_t
projid);
71
72
static
inline
bool
kprojid_has_mapping(
struct
user_namespace
*
ns
,
kprojid_t
projid)
73
{
74
return
from_kprojid
(ns, projid) != (
projid_t
)-1;
75
}
76
77
#else
78
79
static
inline
kprojid_t
make_kprojid
(
struct
user_namespace
*
from
,
projid_t
projid)
80
{
81
return
KPROJIDT_INIT
(projid);
82
}
83
84
static
inline
projid_t
from_kprojid
(
struct
user_namespace
*to,
kprojid_t
kprojid)
85
{
86
return
__kprojid_val(kprojid);
87
}
88
89
static
inline
projid_t
from_kprojid_munged
(
struct
user_namespace
*to,
kprojid_t
kprojid)
90
{
91
projid_t
projid =
from_kprojid
(to, kprojid);
92
if
(projid == (
projid_t
)-1)
93
projid =
OVERFLOW_PROJID
;
94
return
projid;
95
}
96
97
static
inline
bool
kprojid_has_mapping(
struct
user_namespace
*
ns
,
kprojid_t
projid)
98
{
99
return
true
;
100
}
101
102
#endif
/* CONFIG_USER_NS */
103
104
#endif
/* _LINUX_PROJID_H */
Generated on Thu Jan 10 2013 14:52:25 for Linux Kernel by
1.8.2