diff --git a/cmds/installd/installd.c b/cmds/installd/installd.c index a2cbccc5b..f52cee036 100644 --- a/cmds/installd/installd.c +++ b/cmds/installd/installd.c @@ -16,6 +16,8 @@ #include #include +#include +#include #include "installd.h" @@ -526,6 +528,7 @@ int main(const int argc, const char *argv[]) { struct sockaddr addr; socklen_t alen; int lsocket, s, count; + int selinux_enabled = (is_selinux_enabled() > 0); ALOGI("installd firing up\n"); @@ -539,6 +542,11 @@ int main(const int argc, const char *argv[]) { exit(1); } + if (selinux_enabled && selinux_status_open(true) < 0) { + ALOGE("Could not open selinux status; exiting.\n"); + exit(1); + } + drop_privileges(); lsocket = android_get_control_socket(SOCKET_PATH); @@ -577,6 +585,9 @@ int main(const int argc, const char *argv[]) { break; } buf[count] = 0; + if (selinux_enabled && selinux_status_updated() > 0) { + selinux_android_seapp_context_reload(); + } if (execute(s, buf)) break; } ALOGI("closing connection\n");