VirtMgr: Check Sk is declared before fetching it.

If the service is not declared at all, getSecretkeeper() should return
None immediately instead of requesting for the service & waiting for the
call to timeout.

Bug: 291213394
Test: Check bootime using MicrodroidBenchmarks#testMicrodroidBootTime
Change-Id: I0606f315bb74b0c925a91be916188888bb20036e
diff --git a/virtualizationmanager/src/aidl.rs b/virtualizationmanager/src/aidl.rs
index d775555..12b8f88 100644
--- a/virtualizationmanager/src/aidl.rs
+++ b/virtualizationmanager/src/aidl.rs
@@ -1392,17 +1392,12 @@
     }
 
     fn getSecretkeeper(&self) -> binder::Result<Option<Strong<dyn ISecretkeeper>>> {
-        let sk = match binder::get_interface(SECRETKEEPER_IDENTIFIER) {
-            Ok(sk) => {
-                Some(BnSecretkeeper::new_binder(SecretkeeperProxy(sk), BinderFeatures::default()))
-            }
-            Err(StatusCode::NAME_NOT_FOUND) => None,
-            Err(e) => {
-                error!("unexpected error while fetching connection to Secretkeeper {:?}", e);
-                return Err(e.into());
-            }
+        let sk = if is_secretkeeper_present() {
+            Some(binder::wait_for_interface(SECRETKEEPER_IDENTIFIER)?)
+        } else {
+            None
         };
-        Ok(sk)
+        Ok(sk.map(|s| BnSecretkeeper::new_binder(SecretkeeperProxy(s), BinderFeatures::default())))
     }
 
     fn requestAttestation(&self, csr: &[u8]) -> binder::Result<Vec<Certificate>> {
@@ -1410,6 +1405,11 @@
     }
 }
 
+fn is_secretkeeper_present() -> bool {
+    binder::is_declared(SECRETKEEPER_IDENTIFIER)
+        .expect("Could not check for declared Secretkeeper interface")
+}
+
 impl VirtualMachineService {
     fn new_binder(state: Arc<Mutex<State>>, cid: Cid) -> Strong<dyn IVirtualMachineService> {
         BnVirtualMachineService::new_binder(