Files
android/libwvdrmengine
Alex Dale b6cdd12394 Added write protection for session to engine map.
[ Merge of http://go/wvgerrit/128325 ]

There were a few cases where |cdm_by_session_id_| was being iterated
over and the CDM did not acquire any write-protection locks to prevent
other threads from changing the map simultaneously.

In particular, it was possible that while cleaning up a CDM, and
removing all the associated session in |cdm_by_session_id_| another
CDM could have been opening a session and creating a new association
in |cdm_by_session_id_| at the same time.

Cases where |cdms_| and/or |cdm_by_session_id_| is being written to or
iteratively read from should require a lock.  The iterator of
std::map maintains a "view" into the map's tree structure.  Modifying
the map (inserting or deleting elements) can potentially change the
structure of the map and the underlying assumptions built into an
iterator's view (ex, the iterator thinking there is an element to the
left or right).

Modifying the value within the map can potentially cause problems, but
is not applicable in our case (we modify the object pointed to by the
map element, but not the pointer itself).

Bug: 190405462
Test: build_and_run_all_unit_tests.sh and MediaDrmTest
Change-Id: I043e238570dac9a0db990f8fe66be271062b965c
2021-07-01 18:37:18 -07:00
..
2021-06-21 22:15:18 +00:00
2021-06-14 08:04:40 +00:00
2018-11-22 00:33:30 +00:00

This is the source code for the Widevine Content Decryption Module (CDM) for the
Android OS.  It provides the libwvdrmengine plugin for DRM.

Partners who are integrating a device should be familiar with the documents in
the docs directory.

This source code is NOT open source, and is not part of AOSP.  However, it is
released to partners external to Google after official Android releases.  For
this reason, partners should look for bug fixes and software updates on the
widevine branches:

+------------------------------+------------------------------+
|Android Version               |Branch                        |
+------------------------------+------------------------------+
|Android L                     |lmp-mr1-widevine-release      |
+------------------------------+------------------------------+
|Android M MR1                 |mnc-mr1-widevine-release      |
+------------------------------+------------------------------+
|Android N MR2                 |nyc-mr2-widevine-release      |
+------------------------------+------------------------------+
|Android OC                    |oc-widevine-release           |
+------------------------------+------------------------------+
|Android OC MR1                |oc-mr1-widevine-release       |
+------------------------------+------------------------------+
|Android Pi                    |pi-widevine-release           |
+------------------------------+------------------------------+