From a66d2b392e859f26b757849d40aca05d5c98b0e1 Mon Sep 17 00:00:00 2001 From: Edwin Wong Date: Fri, 13 Mar 2020 11:24:30 -0700 Subject: [PATCH] Clear sessionId regardless of what closeSession returns After succeeding openSessionCommon(), when the call to getSecurityLevel() fails, the code calls closeSession() and only clears the sessionId if closeSession() fails. We should always clear sessionId in this case. Also, make it clearer that the status returned by getSecurityLevel() does not overwrite the value from openSessionCommon(). Merged from http://go/wvgerrit/95845 Test: unit test adb shell LD_LIBRARY_PATH="/vendor/lib64" /data/nativetest/libwvdrmdrmplugin_hidl_test Bug: 151364587 Change-Id: I3a9106ffa44c654d3e072a0b0597398d410fc84f --- libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp b/libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp index 9da6569e..1ef9916b 100644 --- a/libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp +++ b/libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp @@ -334,11 +334,13 @@ Return WVDrmPlugin::openSession_1_1( hidl_vec hSessionId = toHidlVec(sessionId); if (Status::OK == status) { SecurityLevel currentSecurityLevel = SecurityLevel::UNKNOWN; - Return hResult = getSecurityLevel(hSessionId, [&](Status status, SecurityLevel hSecurityLevel) { + Return hResult = getSecurityLevel( + hSessionId, [&](Status gslStatus, SecurityLevel hSecurityLevel) { currentSecurityLevel = hSecurityLevel; - if (Status::OK != status || requestedLevel != hSecurityLevel) { + if (Status::OK != gslStatus || requestedLevel != hSecurityLevel) { ALOGE("Failed to open session with the requested security level=%d", requestedLevel); - if (Status::OK != closeSession(hSessionId)) sessionId.clear(); + closeSession(hSessionId); + sessionId.clear(); } }); if (!hResult.isOk() || (requestedLevel != currentSecurityLevel)) {