Fix hidl return checks
Some drm HAL methods were not properly checking
their hidl Return<Status> values which would cause
aborts in some cases. This CL adds checks as needed
Test: GTS media tests
bug:73500808
Change-Id: I47ae0f82d4e614b1e78923ed48fbe4c024df5d71
diff --git a/drm/libmediadrm/DrmHal.cpp b/drm/libmediadrm/DrmHal.cpp
index 068a52b..385c596 100644
--- a/drm/libmediadrm/DrmHal.cpp
+++ b/drm/libmediadrm/DrmHal.cpp
@@ -771,7 +771,8 @@
Mutex::Autolock autoLock(mLock);
INIT_CHECK();
- return toStatusT(mPlugin->removeKeys(toHidlVec(keySetId)));
+ Return<Status> status = mPlugin->removeKeys(toHidlVec(keySetId));
+ return status.isOk() ? toStatusT(status) : DEAD_OBJECT;
}
status_t DrmHal::restoreKeys(Vector<uint8_t> const &sessionId,
@@ -781,8 +782,9 @@
DrmSessionManager::Instance()->useSession(sessionId);
- return toStatusT(mPlugin->restoreKeys(toHidlVec(sessionId),
- toHidlVec(keySetId)));
+ Return<Status> status = mPlugin->restoreKeys(toHidlVec(sessionId),
+ toHidlVec(keySetId));
+ return status.isOk() ? toStatusT(status) : DEAD_OBJECT;
}
status_t DrmHal::queryKeyStatus(Vector<uint8_t> const &sessionId,
@@ -923,13 +925,15 @@
Mutex::Autolock autoLock(mLock);
INIT_CHECK();
+ Return<Status> status(Status::ERROR_DRM_UNKNOWN);
if (mPluginV1_1 != NULL) {
SecureStopRelease secureStopRelease;
secureStopRelease.opaqueData = toHidlVec(ssRelease);
- return toStatusT(mPluginV1_1->releaseSecureStops(secureStopRelease));
+ status = mPluginV1_1->releaseSecureStops(secureStopRelease);
+ } else {
+ status = mPlugin->releaseSecureStop(toHidlVec(ssRelease));
}
-
- return toStatusT(mPlugin->releaseSecureStop(toHidlVec(ssRelease)));
+ return status.isOk() ? toStatusT(status) : DEAD_OBJECT;
}
status_t DrmHal::removeSecureStop(Vector<uint8_t> const &ssid) {
@@ -943,17 +947,21 @@
return ERROR_DRM_CANNOT_HANDLE;
}
- return toStatusT(mPluginV1_1->removeSecureStop(toHidlVec(ssid)));
+ Return<Status> status = mPluginV1_1->removeSecureStop(toHidlVec(ssid));
+ return status.isOk() ? toStatusT(status) : DEAD_OBJECT;
}
status_t DrmHal::removeAllSecureStops() {
Mutex::Autolock autoLock(mLock);
INIT_CHECK();
+ Return<Status> status(Status::ERROR_DRM_UNKNOWN);
if (mPluginV1_1 != NULL) {
- return toStatusT(mPluginV1_1->removeAllSecureStops());
+ status = mPluginV1_1->removeAllSecureStops();
+ } else {
+ status = mPlugin->releaseAllSecureStops();
}
- return toStatusT(mPlugin->releaseAllSecureStops());
+ return status.isOk() ? toStatusT(status) : DEAD_OBJECT;
}
status_t DrmHal::getHdcpLevels(DrmPlugin::HdcpLevel *connected,
@@ -1099,9 +1107,9 @@
Mutex::Autolock autoLock(mLock);
INIT_CHECK();
- Status status = mPlugin->setPropertyString(toHidlString(name),
+ Return<Status> status = mPlugin->setPropertyString(toHidlString(name),
toHidlString(value));
- return toStatusT(status);
+ return status.isOk() ? toStatusT(status) : DEAD_OBJECT;
}
status_t DrmHal::setPropertyByteArray(String8 const &name,
@@ -1109,9 +1117,9 @@
Mutex::Autolock autoLock(mLock);
INIT_CHECK();
- Status status = mPlugin->setPropertyByteArray(toHidlString(name),
+ Return<Status> status = mPlugin->setPropertyByteArray(toHidlString(name),
toHidlVec(value));
- return toStatusT(status);
+ return status.isOk() ? toStatusT(status) : DEAD_OBJECT;
}
status_t DrmHal::getMetrics(PersistableBundle* item) {