Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
M
Magisk
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Magisk
Commits
ac60b510
Commit
ac60b510
authored
Nov 29, 2018
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Support removing redundant avtab nodes
parent
4c2f33a0
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
24 additions
and
14 deletions
+24
-14
selinux
native/jni/external/selinux
+1
-1
sepolicy.c
native/jni/magiskpolicy/sepolicy.c
+23
-13
No files found.
selinux
@
4d7d59c4
Subproject commit
c49f5e9d8ee90d256dfdb778701894e100cdfca0
Subproject commit
4d7d59c49675eef4a18c2b1f73e630bf675811f9
native/jni/magiskpolicy/sepolicy.c
View file @
ac60b510
...
@@ -65,6 +65,18 @@ static int set_attr(const char *type, int value) {
...
@@ -65,6 +65,18 @@ static int set_attr(const char *type, int value) {
return
0
;
return
0
;
}
}
static
void
check_avtab_node
(
avtab_ptr_t
node
)
{
int
redundant
=
0
;
if
(
node
->
key
.
specified
==
AVTAB_AUDITDENY
)
redundant
=
node
->
datum
.
data
==
~
0U
;
else
if
(
node
->
key
.
specified
&
AVTAB_XPERMS
)
redundant
=
node
->
datum
.
xperms
==
NULL
;
else
redundant
=
node
->
datum
.
data
==
0U
;
if
(
redundant
)
avtab_remove_node
(
&
policydb
->
te_avtab
,
node
);
}
static
avtab_ptr_t
get_avtab_node
(
avtab_key_t
*
key
,
avtab_extended_perms_t
*
xperms
)
{
static
avtab_ptr_t
get_avtab_node
(
avtab_key_t
*
key
,
avtab_extended_perms_t
*
xperms
)
{
avtab_ptr_t
node
;
avtab_ptr_t
node
;
avtab_datum_t
avdatum
;
avtab_datum_t
avdatum
;
...
@@ -102,19 +114,19 @@ static avtab_ptr_t get_avtab_node(avtab_key_t *key, avtab_extended_perms_t *xper
...
@@ -102,19 +114,19 @@ static avtab_ptr_t get_avtab_node(avtab_key_t *key, avtab_extended_perms_t *xper
}
}
static
int
add_avrule
(
avtab_key_t
*
key
,
int
p
,
int
not
)
{
static
int
add_avrule
(
avtab_key_t
*
key
,
int
p
,
int
not
)
{
avtab_
datum_t
*
datum
=
&
get_avtab_node
(
key
,
NULL
)
->
datum
;
avtab_
ptr_t
node
=
get_avtab_node
(
key
,
NULL
)
;
if
(
not
)
{
if
(
not
)
{
if
(
p
<
0
)
if
(
p
<
0
)
datum
->
data
=
0U
;
node
->
datum
.
data
=
0U
;
else
else
datum
->
data
&=
~
(
1U
<<
(
p
-
1
));
node
->
datum
.
data
&=
~
(
1U
<<
(
p
-
1
));
}
else
{
}
else
{
if
(
p
<
0
)
if
(
p
<
0
)
datum
->
data
=
~
0U
;
node
->
datum
.
data
=
~
0U
;
else
else
datum
->
data
|=
1U
<<
(
p
-
1
);
node
->
datum
.
data
|=
1U
<<
(
p
-
1
);
}
}
check_avtab_node
(
node
);
return
0
;
return
0
;
}
}
...
@@ -322,7 +334,7 @@ int dump_policydb(const char *filename) {
...
@@ -322,7 +334,7 @@ int dump_policydb(const char *filename) {
size_t
len
;
size_t
len
;
policydb_to_image
(
NULL
,
policydb
,
&
data
,
&
len
);
policydb_to_image
(
NULL
,
policydb
,
&
data
,
&
len
);
if
(
data
==
NULL
)
{
if
(
data
==
NULL
)
{
LOGE
(
"Fail to dump policy image!"
);
LOGE
(
"Fail to dump policy image!
\n
"
);
return
1
;
return
1
;
}
}
...
@@ -590,9 +602,6 @@ int add_type_rule(const char *s, const char *t, const char *c, const char *d, in
...
@@ -590,9 +602,6 @@ int add_type_rule(const char *s, const char *t, const char *c, const char *d, in
type_datum_t
*
src
,
*
tgt
,
*
def
;
type_datum_t
*
src
,
*
tgt
,
*
def
;
class_datum_t
*
cls
;
class_datum_t
*
cls
;
avtab_key_t
key
;
avtab_datum_t
*
av
;
src
=
hashtab_search
(
policydb
->
p_types
.
table
,
s
);
src
=
hashtab_search
(
policydb
->
p_types
.
table
,
s
);
if
(
src
==
NULL
)
{
if
(
src
==
NULL
)
{
LOGW
(
"source type %s does not exist
\n
"
,
s
);
LOGW
(
"source type %s does not exist
\n
"
,
s
);
...
@@ -614,13 +623,14 @@ int add_type_rule(const char *s, const char *t, const char *c, const char *d, in
...
@@ -614,13 +623,14 @@ int add_type_rule(const char *s, const char *t, const char *c, const char *d, in
return
1
;
return
1
;
}
}
avtab_key_t
key
;
key
.
source_type
=
src
->
s
.
value
;
key
.
source_type
=
src
->
s
.
value
;
key
.
target_type
=
tgt
->
s
.
value
;
key
.
target_type
=
tgt
->
s
.
value
;
key
.
target_class
=
cls
->
s
.
value
;
key
.
target_class
=
cls
->
s
.
value
;
key
.
specified
=
effect
;
key
.
specified
=
effect
;
av
=
&
get_avtab_node
(
&
key
,
NULL
)
->
datum
;
av
tab_ptr_t
node
=
get_avtab_node
(
&
key
,
NULL
)
;
av
->
data
=
def
->
s
.
value
;
node
->
datum
.
data
=
def
->
s
.
value
;
return
0
;
return
0
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment