From bd87217173d14395e3610789b7eaaadf2af4da04 Mon Sep 17 00:00:00 2001 From: Jeff Tinker Date: Fri, 7 Apr 2017 18:02:56 -0700 Subject: [PATCH] Add checks for invalid parameters Part of VTS test suite validation for the binderized Widevine service Test: Drm VTS test bug:32815560 Change-Id: I0913c0e72487b5fdbf579b9ea3409c13264888fd --- .../mediacrypto/src_hidl/WVCryptoPlugin.cpp | 3 ++ .../mediadrm/src_hidl/WVDrmPlugin.cpp | 52 +++++++++++++++++-- 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/libwvdrmengine/mediacrypto/src_hidl/WVCryptoPlugin.cpp b/libwvdrmengine/mediacrypto/src_hidl/WVCryptoPlugin.cpp index 0e42a249..45cfda82 100644 --- a/libwvdrmengine/mediacrypto/src_hidl/WVCryptoPlugin.cpp +++ b/libwvdrmengine/mediacrypto/src_hidl/WVCryptoPlugin.cpp @@ -83,6 +83,9 @@ Return WVCryptoPlugin::notifyResolution( Return WVCryptoPlugin::setMediaDrmSession( const hidl_vec& sessionId) { + if (sessionId.size() == 0) { + return Status::BAD_VALUE; + } const std::vector sId = toVector(sessionId); CdmSessionId cdmSessionId(sId.begin(), sId.end()); if (!mCDM->IsOpenSession(cdmSessionId)) { diff --git a/libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp b/libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp index 5d2383f1..f8a28dff 100644 --- a/libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp +++ b/libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp @@ -182,11 +182,16 @@ Return WVDrmPlugin::openSession(openSession_cb _hidl_cb) { } Return WVDrmPlugin::closeSession(const hidl_vec& sessionId) { - + if (!sessionId.size()) { + return Status::BAD_VALUE; + } const std::vector sId = toVector(sessionId); CdmSessionId cdmSessionId(sId.begin(), sId.end()); - mCDM->CloseSession(cdmSessionId); + CdmResponseType res = mCDM->CloseSession(cdmSessionId); mCryptoSessions.erase(cdmSessionId); + if (!isCdmResponseTypeSuccess(res)) { + return Status::ERROR_DRM_SESSION_NOT_OPENED; + } return Status::OK; } @@ -198,6 +203,11 @@ Return WVDrmPlugin::getKeyRequest( const hidl_vec& optionalParameters, getKeyRequest_cb _hidl_cb) { + if (!scope.size()) { + _hidl_cb(Status::BAD_VALUE, hidl_vec(), + KeyRequestType::UNKNOWN, ""); + return Void(); + } KeyRequestType requestType = KeyRequestType::UNKNOWN; status_t status = android::OK; std::string defaultUrl; @@ -305,6 +315,10 @@ Return WVDrmPlugin::provideKeyResponse( const hidl_vec& response, provideKeyResponse_cb _hidl_cb) { + if (scope.size() == 0 || response.size() == 0) { + _hidl_cb(Status::BAD_VALUE, hidl_vec()); + return Void(); + } const std::vector resp = toVector(response); const std::vector scopeId = toVector(scope); @@ -354,6 +368,9 @@ Return WVDrmPlugin::provideKeyResponse( Return WVDrmPlugin::removeKeys(const hidl_vec& sessionId) { + if (!sessionId.size()) { + return Status::BAD_VALUE; + } const std::vector sId = toVector(sessionId); CdmSessionId cdmSessionId(sId.begin(), sId.end()); @@ -365,6 +382,9 @@ Return WVDrmPlugin::removeKeys(const hidl_vec& sessionId) { Return WVDrmPlugin::restoreKeys(const hidl_vec& sessionId, const hidl_vec& keySetId) { + if (!sessionId.size() || !keySetId.size()) { + return Status::BAD_VALUE; + } const std::vector kId = toVector(keySetId); const std::vector sId = toVector(sessionId); CdmSessionId cdmSessionId(sId.begin(), sId.end()); @@ -378,6 +398,10 @@ Return WVDrmPlugin::restoreKeys(const hidl_vec& sessionId, Return WVDrmPlugin::queryKeyStatus(const hidl_vec& sessionId, queryKeyStatus_cb _hidl_cb) { + if (sessionId.size() == 0) { + _hidl_cb(Status::BAD_VALUE, hidl_vec()); + return Void(); + } const std::vector sId = toVector(sessionId); CdmSessionId cdmSessionId(sId.begin(), sId.end()); CdmQueryMap cdmLicenseInfo; @@ -439,6 +463,10 @@ Return WVDrmPlugin::provideProvisionResponse( const hidl_vec& response, provideProvisionResponse_cb _hidl_cb) { + if (!response.size()) { + _hidl_cb(Status::BAD_VALUE, hidl_vec(), hidl_vec()); + return Void(); + } const std::vector resp = toVector(response); std::vector certificate; std::vector wrappedKey; @@ -479,6 +507,10 @@ Return WVDrmPlugin::getSecureStop( const hidl_vec& secureStopId, getSecureStop_cb _hidl_cb) { + if (!secureStopId.size()) { + _hidl_cb(Status::BAD_VALUE, SecureStop()); + return Void(); + } const std::vector id = toVector(secureStopId); CdmUsageInfo cdmUsageInfo; CdmSecureStopId cdmSsId(id.begin(), id.end()); @@ -540,6 +572,9 @@ Return WVDrmPlugin::releaseAllSecureStops() { Return WVDrmPlugin::releaseSecureStop( const hidl_vec& secureStopId) { + if (!secureStopId.size()) { + return Status::BAD_VALUE; + } const std::vector ssRelease = toVector(secureStopId); CdmUsageInfoReleaseMessage cdmMessage(ssRelease.begin(), ssRelease.end()); CdmResponseType res = mCDM->ReleaseUsageInfo(cdmMessage); @@ -735,6 +770,9 @@ Return WVDrmPlugin::setPropertyByteArray( Return WVDrmPlugin::setCipherAlgorithm( const hidl_vec& sessionId, const hidl_string& algorithm) { + if (sessionId.size() == 0 || algorithm.size() == 0) { + return Status::BAD_VALUE; + } std::string algo(algorithm.c_str()); std::vector sId = toVector(sessionId); @@ -757,6 +795,9 @@ Return WVDrmPlugin::setCipherAlgorithm( Return WVDrmPlugin::setMacAlgorithm( const hidl_vec& sessionId, const hidl_string& algorithm) { + if (sessionId.size() == 0 || algorithm.size() == 0) { + return Status::BAD_VALUE; + } std::string algo(algorithm.c_str()); std::vector sId = toVector(sessionId); @@ -1001,12 +1042,17 @@ Return WVDrmPlugin::verify( } Return WVDrmPlugin::signRSA( - const hidl_vec& /* sessionId */, + const hidl_vec& sessionId, const hidl_string& algorithm, const hidl_vec& message, const hidl_vec& wrappedKey, signRSA_cb _hidl_cb) { + if (sessionId.size() == 0 || algorithm.size() == 0 || + message.size() == 0 || wrappedKey.size() == 0) { + _hidl_cb(Status::BAD_VALUE, hidl_vec()); + return Void(); + } const std::string algo(algorithm.c_str()); std::vector signature;