diff options
author | Andres Morales <anmorales@google.com> | 2015-06-24 10:21:16 -0700 |
---|---|---|
committer | Andres Morales <anmorales@google.com> | 2015-06-24 10:22:45 -0700 |
commit | 3c2086dabdb87e027412bb4405279128a321e184 (patch) | |
tree | abc789ff23747957f57e02b7e52ce9a8f39dae6e /gatekeeperd | |
parent | b2856ddbd3555ccffa704496293497f091c2237e (diff) | |
download | system_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.cpp | 25 |
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> &) { |