return -EIO;
}
+ LOG(VERBOSE) << "Starting restorecon of " << mPath;
+
+ // TODO: find a cleaner way of waiting for restorecon to finish
+ property_set("selinux.restorecon_recursive", "");
+ property_set("selinux.restorecon_recursive", mPath.c_str());
+
+ char value[PROPERTY_VALUE_MAX];
+ while (true) {
+ property_get("selinux.restorecon_recursive", value, "");
+ if (strcmp(mPath.c_str(), value) == 0) {
+ break;
+ }
+ sleep(1);
+ LOG(VERBOSE) << "Waiting for restorecon...";
+ }
+
+ LOG(VERBOSE) << "Finished restorecon of " << mPath;
+
// Verify that common directories are ready to roll
if (PrepareDir(mPath + "/app", 0771, AID_SYSTEM, AID_SYSTEM) ||
PrepareDir(mPath + "/user", 0711, AID_SYSTEM, AID_SYSTEM) ||
return -EIO;
}
- // TODO: restorecon all the things!
-
// Create a new emulated volume stacked above us, it will automatically
// be destroyed during unmount
std::string mediaPath(mPath + "/media");