diff options
author | Martijn Coenen <maco@google.com> | 2021-07-28 15:06:47 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2021-07-28 15:06:47 +0000 |
commit | 301d13c4ce39390538d2b604b7d72f858a112252 (patch) | |
tree | f18a20ca302f644b5e1b732260abc049a7a21245 | |
parent | a9b154741131482fcb19f0fc95d211a8a3daf3a3 (diff) | |
parent | 22a13c378a86f458f70ef4f58e31573b4aa55f5b (diff) | |
download | security-301d13c4ce39390538d2b604b7d72f858a112252.tar.gz |
Merge "Don't mark odsign as oneshot." into sc-dev
-rw-r--r-- | ondevice-signing/odsign.rc | 5 | ||||
-rw-r--r-- | ondevice-signing/odsign_main.cpp | 11 |
2 files changed, 13 insertions, 3 deletions
diff --git a/ondevice-signing/odsign.rc b/ondevice-signing/odsign.rc index 044bae7b..de09fc0e 100644 --- a/ondevice-signing/odsign.rc +++ b/ondevice-signing/odsign.rc @@ -2,5 +2,8 @@ service odsign /system/bin/odsign class core user root group system - oneshot disabled # does not start with the core class + +# Note that odsign is not oneshot, but stopped manually when it exits. This +# ensures that if odsign crashes during a module update, apexd will detect +# those crashes and roll back the update. diff --git a/ondevice-signing/odsign_main.cpp b/ondevice-signing/odsign_main.cpp index 0991704b..c4433406 100644 --- a/ondevice-signing/odsign_main.cpp +++ b/ondevice-signing/odsign_main.cpp @@ -64,6 +64,8 @@ static const char* kOdsignVerificationStatusProp = "odsign.verification.success" static const char* kOdsignVerificationStatusValid = "1"; static const char* kOdsignVerificationStatusError = "0"; +static const char* kStopServiceProp = "ctl.stop"; + Result<void> verifyExistingCert(const SigningKey& key) { if (access(kSigningKeyCert.c_str(), F_OK) < 0) { return ErrnoError() << "Key certificate not found: " << kSigningKeyCert; @@ -288,8 +290,10 @@ int main(int /* argc */, char** /* argv */) { // Tell init we don't need to use our key anymore SetProperty(kOdsignKeyDoneProp, "1"); // Tell init we're done with verification, and that it was an error - SetProperty(kOdsignVerificationDoneProp, "1"); SetProperty(kOdsignVerificationStatusProp, kOdsignVerificationStatusError); + SetProperty(kOdsignVerificationDoneProp, "1"); + // Tell init it shouldn't try to restart us - see odsign.rc + SetProperty(kStopServiceProp, "odsign"); }; auto scope_guard = android::base::make_scope_guard(errorScopeGuard); @@ -385,7 +389,10 @@ int main(int /* argc */, char** /* argv */) { // At this point, we're done with the key for sure SetProperty(kOdsignKeyDoneProp, "1"); // And we did a successful verification - SetProperty(kOdsignVerificationDoneProp, "1"); SetProperty(kOdsignVerificationStatusProp, kOdsignVerificationStatusValid); + SetProperty(kOdsignVerificationDoneProp, "1"); + + // Tell init it shouldn't try to restart us - see odsign.rc + SetProperty(kStopServiceProp, "odsign"); return 0; } |