summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2013-02-01 11:31:14 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2013-02-01 11:31:14 -0800
commit7480c0079d8c7fcfd5b3d9decfdabfebde162781 (patch)
tree09e28338fe09f7c8a5419157bd3db9e8ff1eec7d
parent282caf3bd0dfd81b92ac74e0b3ea970d195fee7b (diff)
parentb2639f4015c9fb2ff10c7bfae6074a8d968f5b7e (diff)
downloadsystem_core-7480c0079d8c7fcfd5b3d9decfdabfebde162781.zip
system_core-7480c0079d8c7fcfd5b3d9decfdabfebde162781.tar.gz
system_core-7480c0079d8c7fcfd5b3d9decfdabfebde162781.tar.bz2
am b2639f40: Merge "Label sockets consistently with the seclabel value if specified."
# By Stephen Smalley # Via Gerrit Code Review (1) and Stephen Smalley (1) * commit 'b2639f4015c9fb2ff10c7bfae6074a8d968f5b7e': Label sockets consistently with the seclabel value if specified.
-rwxr-xr-xinit/init.c46
1 files changed, 27 insertions, 19 deletions
diff --git a/init/init.c b/init/init.c
index b20b434..48d8559 100755
--- a/init/init.c
+++ b/init/init.c
@@ -198,28 +198,36 @@ void service_start(struct service *svc, const char *dynamic_args)
}
if (is_selinux_enabled() > 0) {
- char *mycon = NULL, *fcon = NULL;
+ if (svc->seclabel) {
+ scon = strdup(svc->seclabel);
+ if (!scon) {
+ ERROR("Out of memory while starting '%s'\n", svc->name);
+ return;
+ }
+ } else {
+ char *mycon = NULL, *fcon = NULL;
- INFO("computing context for service '%s'\n", svc->args[0]);
- rc = getcon(&mycon);
- if (rc < 0) {
- ERROR("could not get context while starting '%s'\n", svc->name);
- return;
- }
+ INFO("computing context for service '%s'\n", svc->args[0]);
+ rc = getcon(&mycon);
+ if (rc < 0) {
+ ERROR("could not get context while starting '%s'\n", svc->name);
+ return;
+ }
- rc = getfilecon(svc->args[0], &fcon);
- if (rc < 0) {
- ERROR("could not get context while starting '%s'\n", svc->name);
- freecon(mycon);
- return;
- }
+ rc = getfilecon(svc->args[0], &fcon);
+ if (rc < 0) {
+ ERROR("could not get context while starting '%s'\n", svc->name);
+ freecon(mycon);
+ return;
+ }
- rc = security_compute_create(mycon, fcon, string_to_security_class("process"), &scon);
- freecon(mycon);
- freecon(fcon);
- if (rc < 0) {
- ERROR("could not get context while starting '%s'\n", svc->name);
- return;
+ rc = security_compute_create(mycon, fcon, string_to_security_class("process"), &scon);
+ freecon(mycon);
+ freecon(fcon);
+ if (rc < 0) {
+ ERROR("could not get context while starting '%s'\n", svc->name);
+ return;
+ }
}
}