summaryrefslogtreecommitdiffstats
path: root/gatekeeperd
diff options
context:
space:
mode:
authorAndres Morales <anmorales@google.com>2015-06-24 10:21:16 -0700
committerAndres Morales <anmorales@google.com>2015-06-24 10:22:45 -0700
commit3c2086dabdb87e027412bb4405279128a321e184 (patch)
treeabc789ff23747957f57e02b7e52ce9a8f39dae6e /gatekeeperd
parentb2856ddbd3555ccffa704496293497f091c2237e (diff)
downloadsystem_core-3c2086dabdb87e027412bb4405279128a321e184.zip
system_core-3c2086dabdb87e027412bb4405279128a321e184.tar.gz
system_core-3c2086dabdb87e027412bb4405279128a321e184.tar.bz2
[gatekeeperd] clear state and mark on cold boot
required to initialize state by certain HAL impls Bug: 22011857 Change-Id: Ibb01a799da983e1a930aae946c331b23f571861d
Diffstat (limited to 'gatekeeperd')
-rw-r--r--gatekeeperd/gatekeeperd.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/gatekeeperd/gatekeeperd.cpp b/gatekeeperd/gatekeeperd.cpp
index adfec1e..f4f2cbf 100644
--- a/gatekeeperd/gatekeeperd.cpp
+++ b/gatekeeperd/gatekeeperd.cpp
@@ -58,6 +58,13 @@ public:
if (ret < 0)
LOG_ALWAYS_FATAL_IF(ret < 0, "Unable to open GateKeeper HAL");
}
+
+ if (mark_cold_boot()) {
+ ALOGI("cold boot: clearing state");
+ if (device != NULL && device->delete_all_users != NULL) {
+ device->delete_all_users(device);
+ }
+ }
}
virtual ~GateKeeperProxy() {
@@ -76,6 +83,20 @@ public:
close(fd);
}
+ bool mark_cold_boot() {
+ const char *filename = ".coldboot";
+ if (access(filename, F_OK) == -1) {
+ int fd = open(filename, O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR);
+ if (fd < 0) {
+ ALOGE("could not open file: %s : %s", filename, strerror(errno));
+ return false;
+ }
+ close(fd);
+ return true;
+ }
+ return false;
+ }
+
void maybe_store_sid(uint32_t uid, uint64_t sid) {
char filename[21];
sprintf(filename, "%u", uid);
@@ -249,6 +270,10 @@ public:
return;
}
clear_sid(uid);
+
+ if (device != NULL && device->delete_user != NULL) {
+ device->delete_user(device, uid);
+ }
}
virtual status_t dump(int fd, const Vector<String16> &) {