Commit Graph

3045 Commits

Author SHA1 Message Date
Srujan Gaddam
5356c66f0d Add script to diff test results between changes
Merge of http://go/wvgerrit/74965

It isn't always obvious which changes introduced test failures or fixes,
and similarly, it's unideal to have to manually run the tests for HEAD
and with a new change to determine the test diff, so this script runs it
for the last n changes, and diffs the test results by comparing the test
runs. It doesn't handle flaky tests, partly because I don't think it
can.

Change-Id: I5380abcb2f5bcadf172dba3c1270e4258e0c8a82
2019-03-22 10:17:43 -07:00
John Bruce
a5bc8be7a0 Merge "Remove Passthrough When L3 is Used w/ Opaque Handles" 2019-03-19 18:50:29 +00:00
John Bruce
907630a018 Merge "Fix unconditional use of __attribute__." 2019-03-19 18:47:19 +00:00
Rahul Frias
1a16b7d5ca Merge "Add unit tests to remove usage entries" 2019-03-19 15:34:33 +00:00
Jacob Trimble
86f6fb0ef7 Fix unconditional use of __attribute__.
(This is a merge of http://go/wvgerrit/74844)

__attribute__ is not supported on all compilers, notably it's not
supported on MSVC.  Commenting out the variable should suppress the
warning this is trying to fix.

Test: Android CDM Build
Bug: 122953649
Change-Id: I0101df1cca271415a6444e5455eb0085676bcabf
2019-03-18 16:16:26 -07:00
Rahul Frias
8942f7682a Add unit tests to remove usage entries
[ Merge of http://go/wvgerrit/74343 ]

This replicates a Netflix test that adds secure stops and removes them
one at a time, while some of the sessions are still open. Usage
enties will be deleted at the time, but the usage header table
will not be shrunk if the last entry is in use. This happens later when
sessions are closed and the last usage entry is no longer in use.

Bug: 120894148
Test: WV unit/integration tests, CE CDM tests
Change-Id: Ib572950afc61754fe5f3c417e650d5d08503425a
2019-03-18 15:47:12 -07:00
Robert Shih
d54634baa4 hidl: return BAD_VALUE from RemoveOfflineLicense when keyset is not found
Bug: 127828539
Test: VtsHalDrmV1_2TargetTest
Change-Id: Ia567be076a9460546c59c2a38231e18bb0549ce3
2019-03-18 15:24:22 -07:00
Rahul Frias
fd420ccdc5 Merge "Enable CE CDM usage tests" 2019-03-16 01:15:08 +00:00
John W. Bruce
672a12dd8b Remove Passthrough When L3 is Used w/ Opaque Handles
(This is a merge of http://go/wvgerrit/74628)

There is some old legacy behavior in CryptoSession for supporting
Chromecast. When a platform tries to use a combination of L3 and opaque
handles, it silently substitutes the type "clear buffers" instead.

No platform uses this behavior anymore. In fact, the CE CDM contains
code that explicitly prevents this case from being triggered. That code
has broken in every one of the last 3 releases. To allow the CE CDM to
end that bug farm, this patch removes the behavior that no one wants.

Bug: 112703532
Test: CE CDM Unit Tests
Test: Android Unit Tests
Change-Id: I7f70483fac46c75637da5378c5a8b1bf7a2c2860
2019-03-15 16:04:28 -07:00
Rahul Frias
f9ad1dad69 Update usage entry before closing a session
[ Merge of http://go/wvgerrit/74443 ]

When deleting a usage entry, a crypto session may need to be closed
and reopened if a usage entry has previously been loaded. Before closing
this session, the usage entry/usage table header information should be
saved.

This is for completeness rather than correctness. Looking at code,
usage header and entry information are saved after the license
release has been generated. This change might be helpful in case
that changes in the future.

Bug: 115920873
Test: CE CDM unit tests, WV unit/integration tests
Change-Id: Ifc8f761497198247db31dab2f47e8323af783681
2019-03-12 15:21:58 -07:00
Rahul Frias
77ec11b8a8 Merge "Add UsageTableHeader metrics" 2019-03-12 18:41:00 +00:00
Robert Shih
d0f87daf7a wv hidl: return ERROR_DRM_FRAME_TOO_LARGE when frame is too large
Bug: 127828539
Test: VtsHalDrmV1_2TargetTest
Change-Id: I8fe830f9dc904448dbc6c2627f199e4ea6a9db6f
2019-03-11 18:38:52 -07:00
John Bruce
dc869727ed Merge "Add LOG_SILENT LogPriority Again" 2019-03-09 00:32:53 +00:00
Rahul Frias
d8afbb3b51 Add UsageTableHeader metrics
[ Merge from http://go/wvgerrit/72183 ]

Adds basic metrics for the usage table header. This adds the last rev of
cdm_session.cpp that was merged to the wv repo.

Bug: http://b/112919252
Test: Unit tests. Manual GPlay
Change-Id: I9494caf6fcdfb3d335ea10fe8b712585e95c79e5
2019-03-08 14:00:01 -08:00
Rahul Frias
45638c74b3 Enable CE CDM usage tests
[ Merge of http://go/wvgerrit/74223 ]

Bug: 34949512
Bug: 109897011

Test: CE CDM unit tests, WV unit/integration tests
Change-Id: I4b8dca3cacbb66c87318c594f62d3e2a3e940308
2019-03-08 13:41:13 -08:00
Srujan Gaddam
502138ad84 Merge "Flush whole page + use percentile for page size" 2019-03-08 18:35:19 +00:00
John W. Bruce
84d9813b81 Add LOG_SILENT LogPriority Again
(This is a merge of http://go/wvgerrit/73743 and
http://go/wvgerrit/73903)

The CE CDM implements the ability to silence all logging with a "silent"
log level. However, under the covers, this assigned a value to g_cutoff
that was not a member of LogPriority, which fails some extremely strict
checks. This patch just adds a matching entry to LogPriority so that
"silent" is now a valid level in that enum.

A previous merge of this change broke builds on Elfin because it uses
stricter compiler settings that rejected the lack of LOG_SILENT in
certain switch statements. I've gone through the codebase and found
every switch on a LogLevel variable and updated it, of which only one
affects the Android build.

Bug: 118622359
Test: CE CDM Build
Test: Android Build
Test: Android Elfin Build Specifically
Change-Id: I6ba3556e0e70f5e7e1692754a8a2f54adae59a6b
2019-03-06 11:18:55 -08:00
John Bruce
def448a006 Merge "Revert "Add LOG_SILENT LogPriority"" 2019-03-06 19:03:02 +00:00
John Bruce
aa8d0a5d31 Revert "Add LOG_SILENT LogPriority"
This reverts commit 9a40a107f8.

Reason for revert: Elfin has stricter compiler settings than other platforms and breaks when this is checked in.

Change-Id: I169a43ff6b9d90101276690b1d3aae7865946eb0
2019-03-06 18:57:04 +00:00
John Bruce
aff6bfa8e3 Merge "Add Missing "override" to EntitlementKeySession::Type()" 2019-03-06 18:13:49 +00:00
John Bruce
4981ae6481 Merge "Fix Netflix Warnings" 2019-03-06 18:13:32 +00:00
John Bruce
12b78e4bd4 Merge "Add LOG_SILENT LogPriority" 2019-03-06 18:02:28 +00:00
John Bruce
89f75c34ff Merge "Restrict uses of BoringSSL." 2019-03-06 17:58:58 +00:00
TreeHugger Robot
5c6d177e45 Merge "Add comments to unit tests" 2019-03-06 01:59:11 +00:00
Adam Stone
77edbbe219 Merge changes I095f893b,I14d40676
* changes:
  Adds a VersionInfo message to SignedMessage
  Add UsageTableHeader metrics
2019-03-06 00:19:24 +00:00
John W. Bruce
f80ff74319 Add Missing "override" to EntitlementKeySession::Type()
(This is a merge of http://go/wvgerrit/73803)

While playing around with compiler settings, I found that
EntitlementKeySession::Type() is missing the `override` keyword.

Bug: 127498046
Test: CE CDM Build
Test: Android Build
Change-Id: I5a18dbbd425b0a493575a34b9f5f77b2d7c8f10d
2019-03-05 14:07:22 -08:00
John W. Bruce
c110804133 Fix Netflix Warnings
(This is a merge of the parts of http://go/wvgerrit/73763 that affect
the Widevine Android CDM.)

Netflix found some cases of benign shadowing & unused parameters through
having different warning settings than we do. No harm in fixing these.

Bug: 126864496
Bug: 126864495
Test: CE CDM Build
Test: Android Build
Change-Id: Ifb2a705a64071900b69aea17d6add46a36068ebb
2019-03-05 11:40:23 -08:00
John W. Bruce
9a40a107f8 Add LOG_SILENT LogPriority
(This is a merge of http://go/wvgerrit/73743)

The CE CDM implements the ability to silence all logging with a "silent"
log level. However, under the covers, this assigned a value to g_cutoff
that was not a member of LogPriority, which fails some extremely strict
checks. This patch just adds a matching entry to LogPriority so that
"silent" is now a valid level in that enum.

Bug: 118622359
Test: CE CDM Build
Test: Android Build
Change-Id: Idafb26b7c5f9a24a32c84da9b3c5595434ef07fe
2019-03-05 11:35:39 -08:00
Fred Gylys-Colwell
5f7803dedd Add comments to unit tests
Merge from Widevine repo of http://go/wvgerrit/73383

Partners have been requesting more explanation for what each test is
doing.  This is an attempt to clarify some of the tests.

Bug: 119640588
Test: unit tests
Change-Id: I270203b4e8fa7e65abb55297788e4d55856e7dcd
2019-03-03 21:16:55 -08:00
John W. Bruce
e5380ca59f Restrict uses of BoringSSL.
(This is a merge of http://go/wvgerrit/71883)

This moves all the SSL code to privacy_crypto so we can use the
iOS-specific versions and not use any BoringSSL.  The iOS version
doesn't support OEM certificates.

Note that the tests still use BoringSSL.

Bug: 126559819
Test: build_and_run_all_unit_tests.sh
Change-Id: Ib0fad5d95b283b6cd6e02d8a08bcf248c5900bc4
2019-02-28 17:32:22 -08:00
Srujan Gaddam
50e4d67415 Merge "Add log when LoadEntitledContentKeys fails" 2019-02-28 01:33:49 +00:00
Srujan Gaddam
8d54b99b75 Add log when LoadEntitledContentKeys fails
Test: CE CDM tests, Android unit/integration tests
Merge of http://go/wvgerrit/73464

LoadEntitledContentKeys result is logged in SelectKey when it fails.
Requested as part of http://go/wvgerrit/73144.

Change-Id: I063497144ff3370b817e12c0535580e54cfec1d8
2019-02-27 14:57:50 -08:00
Rahul Frias
e67d87bec1 Merge "Correction to logging when SRM version is queried" 2019-02-27 21:48:06 +00:00
Srujan Gaddam
99cea1b363 Merge "Separate key session SelectKey methods" 2019-02-27 01:18:18 +00:00
John Bruce
b3000dbcee Merge "Finer-Grained OEMCrypto Locking" 2019-02-26 22:57:20 +00:00
John W. Bruce
e10ac3b465 Finer-Grained OEMCrypto Locking
(This is a merge of http://go/wvgerrit/72867)

This patch replaces the previous static std::mutexes in CryptoSession
with shared_mutexes, allowing multiple readers to access the resources
they protect. For the shared fields, this means only Initialize(),
Terminate(), and the code that sets up the usage table headers needs
exclusive access. All other CryptoSession code is able to read these
fields in parallel.

For OEMCrypto, the static OEMCrypto lock is joined by a per-session
std::mutex, which are used in concert to enforce the OEMCrypto v15
threading guarantees.

On my machine this results in a noticeable increase in performance for
the parallel unit tests.

Bug: 70889998
Bug: 118584039
Test: CE CDM Unit Tests
Test: Android Unit Tests
Test: Jenkins Tests
Change-Id: Ie6332ae4926ed4f14af897685d37bfe63831b14f
2019-02-26 12:44:14 -08:00
Srujan Gaddam
6a8bd096f4 Separate key session SelectKey methods
Test: CE CDM tests, Android unit/integration tests
Bug: b/124773017
Merge of http://go/wvgerrit/73144

Since OEMCrypto supports one content key per entitlement key,
LoadEntitledContentKeys must be called every time we want to select a
key. EntitlementKeySession::SelectKey calls ContentKeySession::SelectKey
after loading the keys, which caches the key id from the previous call,
and if the key id hasn't changed, doesn't call SelectKey. This caching
is fine for content keys since we don't call LoadKeys every time, but
not fine for entitled keys since we do call LoadEntitledContentKeys
every time. So, we instead cache the current content key id per
entitlement key and only call LoadEntitledContentKeys and SelectKey if
the entitled content key id changes. Furthermore, the test
HandlesKeyRotationWithOnlyOneLicenseRequest is modified to complete
multiple decrypts per key to test this behavior.

Change-Id: I9d0d94e49da0fe1965beadbddec99d8dff744d73
2019-02-26 12:36:10 -08:00
Adam Stone
c891824a7a Adds a VersionInfo message to SignedMessage
[ Merge from http://go/wvgerrit/72724 ]

This adds a message that contains SDK and service version information
useful for debugging problems that occur because of different services.

BUG: 80536436

Test: Unit tests and manual GPlay testing.
Change-Id: I095f893b907ea7c2cd149155fb2cd4c7181e7bb2
2019-02-25 17:09:46 -08:00
Adam Stone
741645a4be Add UsageTableHeader metrics
[ Merge from http://go/wvgerrit/72183 ]

Adds basic metrics for the usage table header.

Bug: http://b/112919252
Test: Unit tests. Manual GPlay
Change-Id: I14d406766d8b2aba3b6e4f1a02c75eedc674b011
2019-02-25 17:09:31 -08:00
Srujan Gaddam
9be36c1d4b Flush whole page + use percentile for page size
Bug: b/123559319, b/112824791, b/120287622 (partially)
Test: Android unit/integration tests, Linux unit tests,
GTS tests on Taimen, GTS tests on Crosshatch
Merge of http://go/wvgerrit/72483

This is a revert of http://go/ag/6216663. This addresses the
failures that led to the seg faults in the 64 bit Level 3 library. Cache
flushing must be done to the entire mmap'd page regardless of whether or
not we use the entire page. Since we now have to cache flush the entire
page, this gives us a performance hit due to us using the max page size.
To get around this, we reuse mmap'd pages only for the 95th percentile
page size or lower.

Change-Id: I14bc0d7e21faae6b6816ea589ba25f9661dcec93
2019-02-21 17:11:51 -08:00
John W. Bruce
85d8e961f8 Protect Session Map with a Recursive Mutex
(This is a merge of http://go/wvgerrit/72764)

Netflix has identified a calling pattern that causes this mutex to be
taken recursively. This is not guaranteed to be safe for Widevine's
old custom Lock implementation nor std::mutex. However, it is guaranteed
to be safe for std::recursive_mutex. This patch updates the mutex in use
accordingly.

In the long-term, this lock needs to be reconsidered, as already noted
by comments in the code. It would be great if the reconsidered locking
did not require a recursive-safe lock. The TODO for this has been spun
off into its own bug and the comment has been updated to point to this.

Bug: 120471929
Test: CE CDM Unit Tests
Test: Android Unit Tests
Change-Id: I34df64456de4b469b75caf25a33f0bc53a5da330
2019-02-21 16:07:16 -08:00
Fred Gylys-Colwell
d925048c35 Merge "Set max output buffer size in Mod Mock" 2019-02-21 22:30:46 +00:00
Fred Gylys-Colwell
36e845d00d Merge "Keep OEMCrypto testbed singleton after terminate" 2019-02-21 22:30:35 +00:00
Fred Gylys-Colwell
e03739585f Merge "Update build_and_run script" 2019-02-21 20:18:46 +00:00
Rahul Frias
d45ce337a3 Merge "Move WV unit/integration tests to /data/nativetest" 2019-02-21 20:04:47 +00:00
John Bruce
34553f649c Merge changes Iea5df62b,I346c04a5
* changes:
  Do Not Add Parallel Unit Tests
  Split CryptoSession Lock into Three
2019-02-21 19:37:15 +00:00
John Bruce
0144293022 Merge "Add Lock to ValueMetric" 2019-02-21 19:35:26 +00:00
Rahul Frias
088c5afa02 Move WV unit/integration tests to /data/nativetest
[ Merge of http://go/wvgerrit/73044 ]

The tests currently get copied to /data/bin. Changes in location
of system libraries causes test failures when tests are unable to
find dependent dynamic libraries.

Bug: 123879070
Test: WV unit/integration tests
Change-Id: I86edbe33b4753238fcf8b84243ac6e6c058ea145
2019-02-21 09:53:06 -08:00
Rahul Frias
4916cb1e9c Correction to logging when SRM version is queried
[ Merge of http://go/wvgerrit/72703 ]

SRM is an optional feature and whether it is implemented is upto the
discretion of OEMs. If it is not, avoid logging this information.

Bug: 124391178
Test: WV unit/integration tests
Change-Id: If8d2b1e0b59fb11825f832a5d4259b03c482fd6b
2019-02-20 18:13:07 -08:00
Fred Gylys-Colwell
6c4a10ea15 Update build_and_run script
Merge from Widevine repo of http://go/wvgerrit/73024

This updates the build_and_run_all_unit_tests.sh to only build a
predefined list of tests.  This prevents the accidental inclusion of
android.hardware.drm@1.2-service-lazy.widevine.rc.

Bug: b/123885511
Test: Unit tests build and extra library does not.
Change-Id: I4368817103720976de2b21de2591a0712944c8d0
2019-02-20 17:21:45 -08:00