xref: /aosp_15_r20/external/selinux/secilc/docs/cil_role_statements.md (revision 2d543d20722ada2425b5bdab9d0d1d29470e7bba)
1*2d543d20SAndroid Build Coastguard WorkerRole Statements
2*2d543d20SAndroid Build Coastguard Worker===============
3*2d543d20SAndroid Build Coastguard Worker
4*2d543d20SAndroid Build Coastguard Workerrole
5*2d543d20SAndroid Build Coastguard Worker----
6*2d543d20SAndroid Build Coastguard Worker
7*2d543d20SAndroid Build Coastguard WorkerDeclares a role identifier in the current namespace.
8*2d543d20SAndroid Build Coastguard Worker
9*2d543d20SAndroid Build Coastguard Worker**Statement definition:**
10*2d543d20SAndroid Build Coastguard Worker
11*2d543d20SAndroid Build Coastguard Worker```secil
12*2d543d20SAndroid Build Coastguard Worker    (role role_id)
13*2d543d20SAndroid Build Coastguard Worker```
14*2d543d20SAndroid Build Coastguard Worker
15*2d543d20SAndroid Build Coastguard Worker**Where:**
16*2d543d20SAndroid Build Coastguard Worker
17*2d543d20SAndroid Build Coastguard Worker<table>
18*2d543d20SAndroid Build Coastguard Worker<colgroup>
19*2d543d20SAndroid Build Coastguard Worker<col width="25%" />
20*2d543d20SAndroid Build Coastguard Worker<col width="75%" />
21*2d543d20SAndroid Build Coastguard Worker</colgroup>
22*2d543d20SAndroid Build Coastguard Worker<tbody>
23*2d543d20SAndroid Build Coastguard Worker<tr class="odd">
24*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>role</code></p></td>
25*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>The <code>role</code> keyword.</p></td>
26*2d543d20SAndroid Build Coastguard Worker</tr>
27*2d543d20SAndroid Build Coastguard Worker<tr class="even">
28*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>role_id</code></p></td>
29*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>The <code>role</code> identifier.</p></td>
30*2d543d20SAndroid Build Coastguard Worker</tr>
31*2d543d20SAndroid Build Coastguard Worker</tbody>
32*2d543d20SAndroid Build Coastguard Worker</table>
33*2d543d20SAndroid Build Coastguard Worker
34*2d543d20SAndroid Build Coastguard Worker**Example:**
35*2d543d20SAndroid Build Coastguard Worker
36*2d543d20SAndroid Build Coastguard WorkerThis example declares two roles: `object_r` in the global namespace and `unconfined.role`:
37*2d543d20SAndroid Build Coastguard Worker
38*2d543d20SAndroid Build Coastguard Worker```secil
39*2d543d20SAndroid Build Coastguard Worker    (role object_r)
40*2d543d20SAndroid Build Coastguard Worker
41*2d543d20SAndroid Build Coastguard Worker    (block unconfined
42*2d543d20SAndroid Build Coastguard Worker        (role role)
43*2d543d20SAndroid Build Coastguard Worker    )
44*2d543d20SAndroid Build Coastguard Worker```
45*2d543d20SAndroid Build Coastguard Worker
46*2d543d20SAndroid Build Coastguard Workerroletype
47*2d543d20SAndroid Build Coastguard Worker--------
48*2d543d20SAndroid Build Coastguard Worker
49*2d543d20SAndroid Build Coastguard WorkerAuthorises a [`role`](cil_role_statements.md#role) to access a [`type`](cil_type_statements.md#type) identifier.
50*2d543d20SAndroid Build Coastguard Worker
51*2d543d20SAndroid Build Coastguard Worker**Statement definition:**
52*2d543d20SAndroid Build Coastguard Worker
53*2d543d20SAndroid Build Coastguard Worker```secil
54*2d543d20SAndroid Build Coastguard Worker    (role role_id type_id)
55*2d543d20SAndroid Build Coastguard Worker```
56*2d543d20SAndroid Build Coastguard Worker
57*2d543d20SAndroid Build Coastguard Worker**Where:**
58*2d543d20SAndroid Build Coastguard Worker
59*2d543d20SAndroid Build Coastguard Worker<table>
60*2d543d20SAndroid Build Coastguard Worker<colgroup>
61*2d543d20SAndroid Build Coastguard Worker<col width="25%" />
62*2d543d20SAndroid Build Coastguard Worker<col width="75%" />
63*2d543d20SAndroid Build Coastguard Worker</colgroup>
64*2d543d20SAndroid Build Coastguard Worker<tbody>
65*2d543d20SAndroid Build Coastguard Worker<tr class="odd">
66*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>roletype</code></p></td>
67*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>The <code>roletype</code> keyword.</p></td>
68*2d543d20SAndroid Build Coastguard Worker</tr>
69*2d543d20SAndroid Build Coastguard Worker<tr class="even">
70*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>role_id</code></p></td>
71*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>A single previously declared <code>role</code> or <code>roleattribute</code> identifier.</p></td>
72*2d543d20SAndroid Build Coastguard Worker</tr>
73*2d543d20SAndroid Build Coastguard Worker<tr class="odd">
74*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>type_id</code></p></td>
75*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>A single previously declared <code>type</code>, <code>typealias</code> or <code>typeattribute</code> identifier.</p></td>
76*2d543d20SAndroid Build Coastguard Worker</tr>
77*2d543d20SAndroid Build Coastguard Worker</tbody>
78*2d543d20SAndroid Build Coastguard Worker</table>
79*2d543d20SAndroid Build Coastguard Worker
80*2d543d20SAndroid Build Coastguard Worker**Example:**
81*2d543d20SAndroid Build Coastguard Worker
82*2d543d20SAndroid Build Coastguard WorkerThis example will declare [`role`](cil_role_statements.md#role) and [`type`](cil_type_statements.md#type) identifiers, then associate them:
83*2d543d20SAndroid Build Coastguard Worker
84*2d543d20SAndroid Build Coastguard Worker```secil
85*2d543d20SAndroid Build Coastguard Worker    (block unconfined
86*2d543d20SAndroid Build Coastguard Worker        (role role)
87*2d543d20SAndroid Build Coastguard Worker        (type process)
88*2d543d20SAndroid Build Coastguard Worker        (roletype role process)
89*2d543d20SAndroid Build Coastguard Worker    )
90*2d543d20SAndroid Build Coastguard Worker```
91*2d543d20SAndroid Build Coastguard Worker
92*2d543d20SAndroid Build Coastguard Workerroleattribute
93*2d543d20SAndroid Build Coastguard Worker-------------
94*2d543d20SAndroid Build Coastguard Worker
95*2d543d20SAndroid Build Coastguard WorkerDeclares a role attribute identifier in the current namespace. The identifier may have zero or more [`role`](cil_role_statements.md#role) and [`roleattribute`](cil_role_statements.md#roleattribute) identifiers associated to it via the [`roleattributeset`](cil_role_statements.md#roleattributeset) statement.
96*2d543d20SAndroid Build Coastguard Worker
97*2d543d20SAndroid Build Coastguard Worker**Statement definition:**
98*2d543d20SAndroid Build Coastguard Worker
99*2d543d20SAndroid Build Coastguard Worker```secil
100*2d543d20SAndroid Build Coastguard Worker    (roleattribute roleattribute_id)
101*2d543d20SAndroid Build Coastguard Worker```
102*2d543d20SAndroid Build Coastguard Worker
103*2d543d20SAndroid Build Coastguard Worker**Where:**
104*2d543d20SAndroid Build Coastguard Worker
105*2d543d20SAndroid Build Coastguard Worker<table>
106*2d543d20SAndroid Build Coastguard Worker<colgroup>
107*2d543d20SAndroid Build Coastguard Worker<col width="25%" />
108*2d543d20SAndroid Build Coastguard Worker<col width="75%" />
109*2d543d20SAndroid Build Coastguard Worker</colgroup>
110*2d543d20SAndroid Build Coastguard Worker<tbody>
111*2d543d20SAndroid Build Coastguard Worker<tr class="odd">
112*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>roleattribute</code></p></td>
113*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>The <code>roleattribute</code> keyword.</p></td>
114*2d543d20SAndroid Build Coastguard Worker</tr>
115*2d543d20SAndroid Build Coastguard Worker<tr class="even">
116*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>roleattribute_id</code></p></td>
117*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>The <code>roleattribute</code> identifier.</p></td>
118*2d543d20SAndroid Build Coastguard Worker</tr>
119*2d543d20SAndroid Build Coastguard Worker</tbody>
120*2d543d20SAndroid Build Coastguard Worker</table>
121*2d543d20SAndroid Build Coastguard Worker
122*2d543d20SAndroid Build Coastguard Worker**Example:**
123*2d543d20SAndroid Build Coastguard Worker
124*2d543d20SAndroid Build Coastguard WorkerThis example will declare a role attribute `roles.role_holder` that will have an empty set:
125*2d543d20SAndroid Build Coastguard Worker
126*2d543d20SAndroid Build Coastguard Worker```secil
127*2d543d20SAndroid Build Coastguard Worker    (block roles
128*2d543d20SAndroid Build Coastguard Worker        (roleattribute role_holder)
129*2d543d20SAndroid Build Coastguard Worker    )
130*2d543d20SAndroid Build Coastguard Worker```
131*2d543d20SAndroid Build Coastguard Worker
132*2d543d20SAndroid Build Coastguard Workerroleattributeset
133*2d543d20SAndroid Build Coastguard Worker----------------
134*2d543d20SAndroid Build Coastguard Worker
135*2d543d20SAndroid Build Coastguard WorkerAllows the association of one or more previously declared [`role`](cil_role_statements.md#role) identifiers to a [`roleattribute`](cil_role_statements.md#roleattribute) identifier. Expressions may be used to refine the associations as shown in the examples.
136*2d543d20SAndroid Build Coastguard Worker
137*2d543d20SAndroid Build Coastguard Worker**Statement definition:**
138*2d543d20SAndroid Build Coastguard Worker
139*2d543d20SAndroid Build Coastguard Worker```secil
140*2d543d20SAndroid Build Coastguard Worker    (roleattributeset roleattribute_id (role_id ... | expr ...))
141*2d543d20SAndroid Build Coastguard Worker```
142*2d543d20SAndroid Build Coastguard Worker
143*2d543d20SAndroid Build Coastguard Worker**Where:**
144*2d543d20SAndroid Build Coastguard Worker
145*2d543d20SAndroid Build Coastguard Worker<table>
146*2d543d20SAndroid Build Coastguard Worker<colgroup>
147*2d543d20SAndroid Build Coastguard Worker<col width="25%" />
148*2d543d20SAndroid Build Coastguard Worker<col width="75%" />
149*2d543d20SAndroid Build Coastguard Worker</colgroup>
150*2d543d20SAndroid Build Coastguard Worker<tbody>
151*2d543d20SAndroid Build Coastguard Worker<tr class="odd">
152*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>roleattributeset</code></p></td>
153*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>The <code>roleattributeset</code> keyword.</p></td>
154*2d543d20SAndroid Build Coastguard Worker</tr>
155*2d543d20SAndroid Build Coastguard Worker<tr class="even">
156*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>roleattribute_id</code></p></td>
157*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>A single previously declared <code>roleattribute</code> identifier.</p></td>
158*2d543d20SAndroid Build Coastguard Worker</tr>
159*2d543d20SAndroid Build Coastguard Worker<tr class="odd">
160*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>role_id</code></p></td>
161*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>Zero or more previously declared <code>role</code> or <code>roleattribute</code> identifiers.</p>
162*2d543d20SAndroid Build Coastguard Worker<p>Note that there must be at least one <code>role_id</code> or <code>expr</code> parameter declared.</p></td>
163*2d543d20SAndroid Build Coastguard Worker</tr>
164*2d543d20SAndroid Build Coastguard Worker<tr class="even">
165*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>expr</code></p></td>
166*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>Zero or more <code>expr</code>'s, the valid operators and syntax are:</p>
167*2d543d20SAndroid Build Coastguard Worker<p><code>    (and (role_id ...) (role_id ...))</code></p>
168*2d543d20SAndroid Build Coastguard Worker<p><code>    (or  (role_id ...) (role_id ...))</code></p>
169*2d543d20SAndroid Build Coastguard Worker<p><code>    (xor (role_id ...) (role_id ...))</code></p>
170*2d543d20SAndroid Build Coastguard Worker<p><code>    (not (role_id ...))</code></p>
171*2d543d20SAndroid Build Coastguard Worker<p><code>    (all)</code></p></td>
172*2d543d20SAndroid Build Coastguard Worker</tr>
173*2d543d20SAndroid Build Coastguard Worker</tbody>
174*2d543d20SAndroid Build Coastguard Worker</table>
175*2d543d20SAndroid Build Coastguard Worker
176*2d543d20SAndroid Build Coastguard Worker**Example:**
177*2d543d20SAndroid Build Coastguard Worker
178*2d543d20SAndroid Build Coastguard WorkerThis example will declare three roles and two role attributes, then associate all the roles to them as shown:
179*2d543d20SAndroid Build Coastguard Worker
180*2d543d20SAndroid Build Coastguard Worker```secil
181*2d543d20SAndroid Build Coastguard Worker    (block roles
182*2d543d20SAndroid Build Coastguard Worker        (role role_1)
183*2d543d20SAndroid Build Coastguard Worker        (role role_2)
184*2d543d20SAndroid Build Coastguard Worker        (role role_3)
185*2d543d20SAndroid Build Coastguard Worker
186*2d543d20SAndroid Build Coastguard Worker        (roleattribute role_holder)
187*2d543d20SAndroid Build Coastguard Worker        (roleattributeset role_holder (role_1 role_2 role_3))
188*2d543d20SAndroid Build Coastguard Worker
189*2d543d20SAndroid Build Coastguard Worker        (roleattribute role_holder_all)
190*2d543d20SAndroid Build Coastguard Worker        (roleattributeset role_holder_all (all))
191*2d543d20SAndroid Build Coastguard Worker    )
192*2d543d20SAndroid Build Coastguard Worker```
193*2d543d20SAndroid Build Coastguard Worker
194*2d543d20SAndroid Build Coastguard Workerroleallow
195*2d543d20SAndroid Build Coastguard Worker---------
196*2d543d20SAndroid Build Coastguard Worker
197*2d543d20SAndroid Build Coastguard WorkerAuthorise the current role to assume a new role.
198*2d543d20SAndroid Build Coastguard Worker
199*2d543d20SAndroid Build Coastguard WorkerNotes:
200*2d543d20SAndroid Build Coastguard Worker
201*2d543d20SAndroid Build Coastguard Worker-   May require a [`roletransition`](cil_role_statements.md#roletransition) rule to ensure transition to the new role.
202*2d543d20SAndroid Build Coastguard Worker
203*2d543d20SAndroid Build Coastguard Worker-   This rule is not allowed in [`booleanif`](cil_conditional_statements.md#booleanif) statements.
204*2d543d20SAndroid Build Coastguard Worker
205*2d543d20SAndroid Build Coastguard Worker**Statement definition:**
206*2d543d20SAndroid Build Coastguard Worker
207*2d543d20SAndroid Build Coastguard Worker```secil
208*2d543d20SAndroid Build Coastguard Worker    (roleallow current_role_id new_role_id)
209*2d543d20SAndroid Build Coastguard Worker```
210*2d543d20SAndroid Build Coastguard Worker
211*2d543d20SAndroid Build Coastguard Worker**Where:**
212*2d543d20SAndroid Build Coastguard Worker
213*2d543d20SAndroid Build Coastguard Worker<table>
214*2d543d20SAndroid Build Coastguard Worker<colgroup>
215*2d543d20SAndroid Build Coastguard Worker<col width="25%" />
216*2d543d20SAndroid Build Coastguard Worker<col width="75%" />
217*2d543d20SAndroid Build Coastguard Worker</colgroup>
218*2d543d20SAndroid Build Coastguard Worker<tbody>
219*2d543d20SAndroid Build Coastguard Worker<tr class="odd">
220*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>roleallow</code></p></td>
221*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>The <code>roleallow</code> keyword.</p></td>
222*2d543d20SAndroid Build Coastguard Worker</tr>
223*2d543d20SAndroid Build Coastguard Worker<tr class="even">
224*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>current_role_id</code></p></td>
225*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>A single previously declared <code>role</code> or <code>roleattribute</code> identifier.</p></td>
226*2d543d20SAndroid Build Coastguard Worker</tr>
227*2d543d20SAndroid Build Coastguard Worker<tr class="odd">
228*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>new_role_id</code></p></td>
229*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>A single previously declared <code>role</code> or <code>roleattribute</code> identifier.</p></td>
230*2d543d20SAndroid Build Coastguard Worker</tr>
231*2d543d20SAndroid Build Coastguard Worker</tbody>
232*2d543d20SAndroid Build Coastguard Worker</table>
233*2d543d20SAndroid Build Coastguard Worker
234*2d543d20SAndroid Build Coastguard Worker**Example:**
235*2d543d20SAndroid Build Coastguard Worker
236*2d543d20SAndroid Build Coastguard WorkerSee the [`roletransition`](cil_role_statements.md#roletransition) statement for an example.
237*2d543d20SAndroid Build Coastguard Worker
238*2d543d20SAndroid Build Coastguard Workerroletransition
239*2d543d20SAndroid Build Coastguard Worker--------------
240*2d543d20SAndroid Build Coastguard Worker
241*2d543d20SAndroid Build Coastguard WorkerSpecify a role transition from the current role to a new role when computing a context for the target type. The [`class`](cil_class_and_permission_statements.md#class) identifier would normally be `process`, however for kernel versions 2.6.39 with policy version \>= 25 and above, any valid class may be used. Note that a [`roleallow`](cil_role_statements.md#roleallow) rule must be used to authorise the transition.
242*2d543d20SAndroid Build Coastguard Worker
243*2d543d20SAndroid Build Coastguard Worker**Statement definition:**
244*2d543d20SAndroid Build Coastguard Worker
245*2d543d20SAndroid Build Coastguard Worker```secil
246*2d543d20SAndroid Build Coastguard Worker    (roletransition current_role_id target_type_id class_id new_role_id)
247*2d543d20SAndroid Build Coastguard Worker```
248*2d543d20SAndroid Build Coastguard Worker
249*2d543d20SAndroid Build Coastguard Worker**Where:**
250*2d543d20SAndroid Build Coastguard Worker
251*2d543d20SAndroid Build Coastguard Worker<table>
252*2d543d20SAndroid Build Coastguard Worker<colgroup>
253*2d543d20SAndroid Build Coastguard Worker<col width="25%" />
254*2d543d20SAndroid Build Coastguard Worker<col width="75%" />
255*2d543d20SAndroid Build Coastguard Worker</colgroup>
256*2d543d20SAndroid Build Coastguard Worker<tbody>
257*2d543d20SAndroid Build Coastguard Worker<tr class="odd">
258*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>roletransition</code></p></td>
259*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>The <code>roletransition</code> keyword.</p></td>
260*2d543d20SAndroid Build Coastguard Worker</tr>
261*2d543d20SAndroid Build Coastguard Worker<tr class="even">
262*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>current_role_id</code></p></td>
263*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>A single previously declared <code>role</code> or <code>roleattribute</code> identifier.</p></td>
264*2d543d20SAndroid Build Coastguard Worker</tr>
265*2d543d20SAndroid Build Coastguard Worker<tr class="odd">
266*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>target_type_id</code></p></td>
267*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>A single previously declared <code>type</code>, <code>typealias</code> or <code>typeattribute</code> identifier.</p></td>
268*2d543d20SAndroid Build Coastguard Worker</tr>
269*2d543d20SAndroid Build Coastguard Worker<tr class="even">
270*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>class_id</code></p></td>
271*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>A single previously declared <code>class</code> or <code>classmap</code> identifier.</p></td>
272*2d543d20SAndroid Build Coastguard Worker</tr>
273*2d543d20SAndroid Build Coastguard Worker<tr class="odd">
274*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>new_role_id</code></p></td>
275*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>A single previously declared <code>role</code> identifier to be set on transition.</p></td>
276*2d543d20SAndroid Build Coastguard Worker</tr>
277*2d543d20SAndroid Build Coastguard Worker</tbody>
278*2d543d20SAndroid Build Coastguard Worker</table>
279*2d543d20SAndroid Build Coastguard Worker
280*2d543d20SAndroid Build Coastguard Worker**Example:**
281*2d543d20SAndroid Build Coastguard Worker
282*2d543d20SAndroid Build Coastguard WorkerThis example will authorise the `unconfined.role` to assume the `msg_filter.role` role, and then transition to that role:
283*2d543d20SAndroid Build Coastguard Worker
284*2d543d20SAndroid Build Coastguard Worker```secil
285*2d543d20SAndroid Build Coastguard Worker    (block ext_gateway
286*2d543d20SAndroid Build Coastguard Worker        (type process)
287*2d543d20SAndroid Build Coastguard Worker        (type exec)
288*2d543d20SAndroid Build Coastguard Worker
289*2d543d20SAndroid Build Coastguard Worker        (roletype msg_filter.role process)
290*2d543d20SAndroid Build Coastguard Worker        (roleallow unconfined.role msg_filter.role)
291*2d543d20SAndroid Build Coastguard Worker        (roletransition unconfined.role exec process msg_filter.role)
292*2d543d20SAndroid Build Coastguard Worker    )
293*2d543d20SAndroid Build Coastguard Worker```
294*2d543d20SAndroid Build Coastguard Worker
295*2d543d20SAndroid Build Coastguard Workerrolebounds
296*2d543d20SAndroid Build Coastguard Worker----------
297*2d543d20SAndroid Build Coastguard Worker
298*2d543d20SAndroid Build Coastguard WorkerDefines a hierarchical relationship between roles where the child role cannot have more privileges than the parent.
299*2d543d20SAndroid Build Coastguard Worker
300*2d543d20SAndroid Build Coastguard WorkerNotes:
301*2d543d20SAndroid Build Coastguard Worker
302*2d543d20SAndroid Build Coastguard Worker-   It is not possible to bind the parent role to more than one child role.
303*2d543d20SAndroid Build Coastguard Worker
304*2d543d20SAndroid Build Coastguard Worker-   While this is added to the binary policy, it is not enforced by the SELinux kernel services.
305*2d543d20SAndroid Build Coastguard Worker
306*2d543d20SAndroid Build Coastguard Worker**Statement definition:**
307*2d543d20SAndroid Build Coastguard Worker
308*2d543d20SAndroid Build Coastguard Worker```secil
309*2d543d20SAndroid Build Coastguard Worker    (rolebounds parent_role_id child_role_id)
310*2d543d20SAndroid Build Coastguard Worker```
311*2d543d20SAndroid Build Coastguard Worker
312*2d543d20SAndroid Build Coastguard Worker**Where:**
313*2d543d20SAndroid Build Coastguard Worker
314*2d543d20SAndroid Build Coastguard Worker<table>
315*2d543d20SAndroid Build Coastguard Worker<colgroup>
316*2d543d20SAndroid Build Coastguard Worker<col width="25%" />
317*2d543d20SAndroid Build Coastguard Worker<col width="75%" />
318*2d543d20SAndroid Build Coastguard Worker</colgroup>
319*2d543d20SAndroid Build Coastguard Worker<tbody>
320*2d543d20SAndroid Build Coastguard Worker<tr class="odd">
321*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>rolebounds</code></p></td>
322*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>The <code>rolebounds</code> keyword.</p></td>
323*2d543d20SAndroid Build Coastguard Worker</tr>
324*2d543d20SAndroid Build Coastguard Worker<tr class="even">
325*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>parent_role_id</code></p></td>
326*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>A single previously declared <code>role</code> identifier.</p></td>
327*2d543d20SAndroid Build Coastguard Worker</tr>
328*2d543d20SAndroid Build Coastguard Worker<tr class="odd">
329*2d543d20SAndroid Build Coastguard Worker<td align="left"><p><code>child_role_id</code></p></td>
330*2d543d20SAndroid Build Coastguard Worker<td align="left"><p>A single previously declared <code>role</code> identifier.</p></td>
331*2d543d20SAndroid Build Coastguard Worker</tr>
332*2d543d20SAndroid Build Coastguard Worker</tbody>
333*2d543d20SAndroid Build Coastguard Worker</table>
334*2d543d20SAndroid Build Coastguard Worker
335*2d543d20SAndroid Build Coastguard Worker**Example:**
336*2d543d20SAndroid Build Coastguard Worker
337*2d543d20SAndroid Build Coastguard WorkerIn this example the role `test` cannot have greater privileges than `unconfined.role`:
338*2d543d20SAndroid Build Coastguard Worker
339*2d543d20SAndroid Build Coastguard Worker```secil
340*2d543d20SAndroid Build Coastguard Worker    (role test)
341*2d543d20SAndroid Build Coastguard Worker
342*2d543d20SAndroid Build Coastguard Worker    (block unconfined
343*2d543d20SAndroid Build Coastguard Worker        (role role)
344*2d543d20SAndroid Build Coastguard Worker        (rolebounds role .test)
345*2d543d20SAndroid Build Coastguard Worker    )
346*2d543d20SAndroid Build Coastguard Worker```
347