keystore: add "migrate" command
To support the WiFi service, we need to support migration from the
system UID to the wifi UID. This adds a command to achieve the
migration.
Bug: 8122243
Change-Id: I31e2ba3b3a92c582a6f8d71bbb139c408c06814f
diff --git a/keystore/IKeystoreService.cpp b/keystore/IKeystoreService.cpp
index 9db6696..d1df44e 100644
--- a/keystore/IKeystoreService.cpp
+++ b/keystore/IKeystoreService.cpp
@@ -487,6 +487,26 @@
}
return ret;
}
+
+ virtual int32_t migrate(const String16& name, int32_t targetUid)
+ {
+ Parcel data, reply;
+ data.writeInterfaceToken(IKeystoreService::getInterfaceDescriptor());
+ data.writeString16(name);
+ data.writeInt32(targetUid);
+ status_t status = remote()->transact(BnKeystoreService::MIGRATE, data, &reply);
+ if (status != NO_ERROR) {
+ ALOGD("migrate() could not contact remote: %d\n", status);
+ return -1;
+ }
+ int32_t err = reply.readExceptionCode();
+ int32_t ret = reply.readInt32();
+ if (err < 0) {
+ ALOGD("migrate() caught exception %d\n", err);
+ return -1;
+ }
+ return ret;
+ }
};
IMPLEMENT_META_INTERFACE(KeystoreService, "android.security.keystore");
@@ -738,6 +758,15 @@
reply->writeInt64(ret);
return NO_ERROR;
} break;
+ case MIGRATE: {
+ CHECK_INTERFACE(IKeystoreService, data, reply);
+ String16 name = data.readString16();
+ int32_t targetUid = data.readInt32();
+ int32_t ret = migrate(name, targetUid);
+ reply->writeNoException();
+ reply->writeInt32(ret);
+ return NO_ERROR;
+ } break;
default:
return BBinder::onTransact(code, data, reply, flags);
}