Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 48e16201 authored by Sally Qi's avatar Sally Qi Committed by Automerger Merge Worker
Browse files

Merge "Mitigate the security vulnerability by sanitizing the transaction...

Merge "Mitigate the security vulnerability by sanitizing the transaction flags." into tm-dev am: 52a0d7cb

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/20681289



Change-Id: I7e6b2bfa8167c760e4012a03918591d4e9fcdf3e
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 73fc02c3 52a0d7cb
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -353,6 +353,27 @@ void DisplayState::merge(const DisplayState& other) {
    }
}

void DisplayState::sanitize(int32_t permissions) {
    if (what & DisplayState::eLayerStackChanged) {
        if (!(permissions & layer_state_t::Permission::ACCESS_SURFACE_FLINGER)) {
            what &= ~DisplayState::eLayerStackChanged;
            ALOGE("Stripped attempt to set eLayerStackChanged in sanitize");
        }
    }
    if (what & DisplayState::eDisplayProjectionChanged) {
        if (!(permissions & layer_state_t::Permission::ACCESS_SURFACE_FLINGER)) {
            what &= ~DisplayState::eDisplayProjectionChanged;
            ALOGE("Stripped attempt to set eDisplayProjectionChanged in sanitize");
        }
    }
    if (what & DisplayState::eSurfaceChanged) {
        if (!(permissions & layer_state_t::Permission::ACCESS_SURFACE_FLINGER)) {
            what &= ~DisplayState::eSurfaceChanged;
            ALOGE("Stripped attempt to set eSurfaceChanged in sanitize");
        }
    }
}

void layer_state_t::sanitize(int32_t permissions) {
    // TODO: b/109894387
    //
+1 −0
Original line number Diff line number Diff line
@@ -320,6 +320,7 @@ struct DisplayState {

    DisplayState();
    void merge(const DisplayState& other);
    void sanitize(int32_t permissions);

    uint32_t what = 0;
    uint32_t flags = 0;
+3 −2
Original line number Diff line number Diff line
@@ -4167,7 +4167,7 @@ status_t SurfaceFlinger::setTransactionState(

bool SurfaceFlinger::applyTransactionState(const FrameTimelineInfo& frameTimelineInfo,
                                           Vector<ComposerState>& states,
                                           const Vector<DisplayState>& displays, uint32_t flags,
                                           Vector<DisplayState>& displays, uint32_t flags,
                                           const InputWindowCommands& inputWindowCommands,
                                           const int64_t desiredPresentTime, bool isAutoTimestamp,
                                           const client_cache_t& uncacheBuffer,
@@ -4176,7 +4176,8 @@ bool SurfaceFlinger::applyTransactionState(const FrameTimelineInfo& frameTimelin
                                           const std::vector<ListenerCallbacks>& listenerCallbacks,
                                           int originPid, int originUid, uint64_t transactionId) {
    uint32_t transactionFlags = 0;
    for (const DisplayState& display : displays) {
    for (DisplayState& display : displays) {
        display.sanitize(permissions);
        transactionFlags |= setDisplayStateLocked(display);
    }

+1 −1
Original line number Diff line number Diff line
@@ -760,7 +760,7 @@ private:
     * Transactions
     */
    bool applyTransactionState(const FrameTimelineInfo& info, Vector<ComposerState>& state,
                               const Vector<DisplayState>& displays, uint32_t flags,
                               Vector<DisplayState>& displays, uint32_t flags,
                               const InputWindowCommands& inputWindowCommands,
                               const int64_t desiredPresentTime, bool isAutoTimestamp,
                               const client_cache_t& uncacheBuffer, const int64_t postTime,
+1 −1

File changed.

Contains only whitespace changes.