diff options
author | Jeff Tinker <jtinker@google.com> | 2014-04-30 10:19:03 -0700 |
---|---|---|
committer | Jeff Tinker <jtinker@google.com> | 2014-08-01 17:16:16 +0000 |
commit | 68b15554f6dca3b056eac517fe5fa2fd4ee80a33 (patch) | |
tree | d6842666f3d062427b56f27c0b9e6e09976389a5 /media | |
parent | fdefe34f40ea6c8964677eaa9107958b0bdf76d0 (diff) | |
download | frameworks_av-68b15554f6dca3b056eac517fe5fa2fd4ee80a33.zip frameworks_av-68b15554f6dca3b056eac517fe5fa2fd4ee80a33.tar.gz frameworks_av-68b15554f6dca3b056eac517fe5fa2fd4ee80a33.tar.bz2 |
Allow device to be unprovisioned
bug: 12247651
Change-Id: I564ac8de3da2430342a028f4058e2c5ac2d85d5e
Diffstat (limited to 'media')
-rw-r--r-- | media/libmedia/IDrm.cpp | 20 | ||||
-rw-r--r-- | media/libmediaplayerservice/Drm.cpp | 17 | ||||
-rw-r--r-- | media/libmediaplayerservice/Drm.h | 2 |
3 files changed, 38 insertions, 1 deletions
diff --git a/media/libmedia/IDrm.cpp b/media/libmedia/IDrm.cpp index f1a6a9f..1904839 100644 --- a/media/libmedia/IDrm.cpp +++ b/media/libmedia/IDrm.cpp @@ -53,7 +53,8 @@ enum { SIGN, SIGN_RSA, VERIFY, - SET_LISTENER + SET_LISTENER, + UNPROVISION_DEVICE }; struct BpDrm : public BpInterface<IDrm> { @@ -229,6 +230,15 @@ struct BpDrm : public BpInterface<IDrm> { return reply.readInt32(); } + virtual status_t unprovisionDevice() { + Parcel data, reply; + data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); + + remote()->transact(UNPROVISION_DEVICE, data, &reply); + + return reply.readInt32(); + } + virtual status_t getSecureStops(List<Vector<uint8_t> > &secureStops) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); @@ -619,6 +629,14 @@ status_t BnDrm::onTransact( return OK; } + case UNPROVISION_DEVICE: + { + CHECK_INTERFACE(IDrm, data, reply); + status_t result = unprovisionDevice(); + reply->writeInt32(result); + return OK; + } + case GET_SECURE_STOPS: { CHECK_INTERFACE(IDrm, data, reply); diff --git a/media/libmediaplayerservice/Drm.cpp b/media/libmediaplayerservice/Drm.cpp index d50037f..d222316 100644 --- a/media/libmediaplayerservice/Drm.cpp +++ b/media/libmediaplayerservice/Drm.cpp @@ -417,6 +417,23 @@ status_t Drm::provideProvisionResponse(Vector<uint8_t> const &response, return mPlugin->provideProvisionResponse(response, certificate, wrappedKey); } +status_t Drm::unprovisionDevice() { + Mutex::Autolock autoLock(mLock); + + if (mInitCheck != OK) { + return mInitCheck; + } + + if (mPlugin == NULL) { + return -EINVAL; + } + + if (!checkPermission("android.permission.REMOVE_DRM_CERTIFICATES")) { + return -EPERM; + } + + return mPlugin->unprovisionDevice(); +} status_t Drm::getSecureStops(List<Vector<uint8_t> > &secureStops) { Mutex::Autolock autoLock(mLock); diff --git a/media/libmediaplayerservice/Drm.h b/media/libmediaplayerservice/Drm.h index 3d4b0fc..9e23e2e 100644 --- a/media/libmediaplayerservice/Drm.h +++ b/media/libmediaplayerservice/Drm.h @@ -75,6 +75,8 @@ struct Drm : public BnDrm, Vector<uint8_t> &certificate, Vector<uint8_t> &wrappedKey); + virtual status_t unprovisionDevice(); + virtual status_t getSecureStops(List<Vector<uint8_t> > &secureStops); virtual status_t releaseSecureStops(Vector<uint8_t> const &ssRelease); |