summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Smalley <sds@tycho.nsa.gov>2015-02-23 21:18:54 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-02-23 21:18:54 +0000
commit15ac040c87a5a35f48ba5d76d844e1363b4c6e99 (patch)
tree9ae1fd5d9df5f9737527be4840ced09bf8c603b4
parent62fb87a5ff0b292de32a720c0e4187c45c0f4d5d (diff)
parente7d85c664ca5e8c22830140d9f87e3a67ef88202 (diff)
downloadlibselinux-15ac040c87a5a35f48ba5d76d844e1363b4c6e99.tar.gz
am e7d85c66: am 0f912a1c: libselinux: Reject duplicate keys in seapp_context entries.
* commit 'e7d85c664ca5e8c22830140d9f87e3a67ef88202': libselinux: Reject duplicate keys in seapp_context entries.
-rw-r--r--src/android.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/android.c b/src/android.c
index 8e39aac..7773489 100644
--- a/src/android.c
+++ b/src/android.c
@@ -366,6 +366,10 @@ int selinux_android_seapp_context_reload(void)
goto err;
}
} else if (!strcasecmp(name, "user")) {
+ if (cur->user.str) {
+ free_seapp_context(cur);
+ goto err;
+ }
cur->user.str = strdup(value);
if (!cur->user.str) {
free_seapp_context(cur);
@@ -375,12 +379,20 @@ int selinux_android_seapp_context_reload(void)
if (cur->user.str[cur->user.len-1] == '*')
cur->user.is_prefix = 1;
} else if (!strcasecmp(name, "seinfo")) {
+ if (cur->seinfo) {
+ free_seapp_context(cur);
+ goto err;
+ }
cur->seinfo = strdup(value);
if (!cur->seinfo) {
free_seapp_context(cur);
goto oom;
}
} else if (!strcasecmp(name, "name")) {
+ if (cur->name.str) {
+ free_seapp_context(cur);
+ goto err;
+ }
cur->name.str = strdup(value);
if (!cur->name.str) {
free_seapp_context(cur);
@@ -390,18 +402,30 @@ int selinux_android_seapp_context_reload(void)
if (cur->name.str[cur->name.len-1] == '*')
cur->name.is_prefix = 1;
} else if (!strcasecmp(name, "domain")) {
+ if (cur->domain) {
+ free_seapp_context(cur);
+ goto err;
+ }
cur->domain = strdup(value);
if (!cur->domain) {
free_seapp_context(cur);
goto oom;
}
} else if (!strcasecmp(name, "type")) {
+ if (cur->type) {
+ free_seapp_context(cur);
+ goto err;
+ }
cur->type = strdup(value);
if (!cur->type) {
free_seapp_context(cur);
goto oom;
}
} else if (!strcasecmp(name, "levelFromUid")) {
+ if (cur->levelFrom) {
+ free_seapp_context(cur);
+ goto err;
+ }
if (!strcasecmp(value, "true"))
cur->levelFrom = LEVELFROM_APP;
else if (!strcasecmp(value, "false"))
@@ -411,6 +435,10 @@ int selinux_android_seapp_context_reload(void)
goto err;
}
} else if (!strcasecmp(name, "levelFrom")) {
+ if (cur->levelFrom) {
+ free_seapp_context(cur);
+ goto err;
+ }
if (!strcasecmp(value, "none"))
cur->levelFrom = LEVELFROM_NONE;
else if (!strcasecmp(value, "app"))
@@ -424,12 +452,20 @@ int selinux_android_seapp_context_reload(void)
goto err;
}
} else if (!strcasecmp(name, "level")) {
+ if (cur->level) {
+ free_seapp_context(cur);
+ goto err;
+ }
cur->level = strdup(value);
if (!cur->level) {
free_seapp_context(cur);
goto oom;
}
} else if (!strcasecmp(name, "path")) {
+ if (cur->path.str) {
+ free_seapp_context(cur);
+ goto err;
+ }
cur->path.str = strdup(value);
if (!cur->path.str) {
free_seapp_context(cur);