diff options
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 2 | ||||
-rw-r--r-- | services/surfaceflinger/tests/Credentials_test.cpp | 18 |
2 files changed, 14 insertions, 6 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index bf37016d1f..418d1fb3c0 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -4768,7 +4768,7 @@ status_t SurfaceFlinger::setTransactionState( const int originPid = ipc->getCallingPid(); const int originUid = ipc->getCallingUid(); uint32_t permissions = LayerStatePermissions::getTransactionPermissions(originPid, originUid); - for (auto composerState : states) { + for (auto& composerState : states) { composerState.state.sanitize(permissions); } diff --git a/services/surfaceflinger/tests/Credentials_test.cpp b/services/surfaceflinger/tests/Credentials_test.cpp index 69e9a169e3..2d18166da5 100644 --- a/services/surfaceflinger/tests/Credentials_test.cpp +++ b/services/surfaceflinger/tests/Credentials_test.cpp @@ -401,8 +401,13 @@ TEST_F(CredentialsTest, TransactionPermissionTest) { .apply(); } - // Called from non privileged process - Transaction().setTrustedOverlay(surfaceControl, true); + // Attempt to set a trusted overlay from a non-privileged process. This should fail silently. + { + UIDFaker f{AID_BIN}; + Transaction().setTrustedOverlay(surfaceControl, true).apply(/*synchronous=*/true); + } + + // Verify that the layer was not made a trusted overlay. { UIDFaker f(AID_SYSTEM); auto windowIsPresentAndNotTrusted = [&](const std::vector<WindowInfo>& windowInfos) { @@ -413,12 +418,14 @@ TEST_F(CredentialsTest, TransactionPermissionTest) { } return !foundWindowInfo->inputConfig.test(WindowInfo::InputConfig::TRUSTED_OVERLAY); }; - windowInfosListenerUtils.waitForWindowInfosPredicate(windowIsPresentAndNotTrusted); + ASSERT_TRUE( + windowInfosListenerUtils.waitForWindowInfosPredicate(windowIsPresentAndNotTrusted)); } + // Verify that privileged processes are able to set trusted overlays. { UIDFaker f(AID_SYSTEM); - Transaction().setTrustedOverlay(surfaceControl, true); + Transaction().setTrustedOverlay(surfaceControl, true).apply(/*synchronous=*/true); auto windowIsPresentAndTrusted = [&](const std::vector<WindowInfo>& windowInfos) { auto foundWindowInfo = WindowInfosListenerUtils::findMatchingWindowInfo(windowInfo, windowInfos); @@ -427,7 +434,8 @@ TEST_F(CredentialsTest, TransactionPermissionTest) { } return foundWindowInfo->inputConfig.test(WindowInfo::InputConfig::TRUSTED_OVERLAY); }; - windowInfosListenerUtils.waitForWindowInfosPredicate(windowIsPresentAndTrusted); + ASSERT_TRUE( + windowInfosListenerUtils.waitForWindowInfosPredicate(windowIsPresentAndTrusted)); } } |