OSDN Git Service

[RESTRICT AUTOMERGE]: Exclude secure layers from most screenshots taken by the system...
authorRobert Carr <racarr@google.com>
Fri, 15 Feb 2019 23:48:11 +0000 (15:48 -0800)
committerBryan Ferris <bferris@google.com>
Fri, 3 May 2019 01:50:09 +0000 (18:50 -0700)
commitdc49e0088a05108a0616704ca5565136f89c0a1f
tree7f5480ebef86e4210d8c9ee48ef4565a0895c9fa
parent0f512b2ebacfa6c3aa51113f1de40d9c44290afc
[RESTRICT AUTOMERGE]: Exclude secure layers from most screenshots taken by the system server.

In pre-P versions of Android, it was allowed to screenshot secure layers if the
buffer queue producer which was the target of the screenshot was owned by
the system (in this case SurfaceFlinger). This really was a synonym for:
The screen rotation animation was allowed to capture secure layers, but the other
code paths weren't. In O we mistakenly changed this check to always allow the system server
to capture secure layers via the captureScreen path (the captureLayers path used for
TaskSnapshots was unaffected). This can result in data leakage in cases where the
system server takes screenshots on behalf of other parts of the system (e.g. for
the assistant). To mitigate this we provide an explicit switch for the system server
to specify whether it wishes to capture Secure layers. While this is dangerous, I think
it is less dangerous than the previous implicit switch of capturing secure layers based on which
type of BufferQueue was passed in. The flag defaults to not capturing secure layers
and we set it to true in the one place we need it (for the screen rotation animation).
Non privileged clients can still not capture secure layers at all directly.

Test: TransactionTest.cpp#SetFlagsSecureEUidSystem
Bug: 120610669
Change-Id: I9d32c5ac2b005059be9f464859a415167d9ddbd4
core/java/android/view/SurfaceControl.java
core/jni/android_view_SurfaceControl.cpp
services/core/java/com/android/server/wm/ScreenRotationAnimation.java