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

Commit 899e8cd0 authored by Ady Abraham's avatar Ady Abraham
Browse files

SurfaceFlinger: fix a potential race condition in stealReceiveChannel

Add a mutex to prevent a potential race condition.

Bug: 232541124
Test: See bug for details
Change-Id: Ia338f124c786bf12d6adba10a67b9048fe9c34a5
parent 47e41ac3
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -177,6 +177,11 @@ void EventThreadConnection::onFirstRef() {
}
}


binder::Status EventThreadConnection::stealReceiveChannel(gui::BitTube* outChannel) {
binder::Status EventThreadConnection::stealReceiveChannel(gui::BitTube* outChannel) {
    std::scoped_lock lock(mLock);
    if (mChannel.initCheck() != NO_ERROR) {
        return binder::Status::fromStatusT(NAME_NOT_FOUND);
    }

    outChannel->setReceiveFd(mChannel.moveReceiveFd());
    outChannel->setReceiveFd(mChannel.moveReceiveFd());
    outChannel->setSendFd(base::unique_fd(dup(mChannel.getSendFd())));
    outChannel->setSendFd(base::unique_fd(dup(mChannel.getSendFd())));
    return binder::Status::ok();
    return binder::Status::ok();
+2 −1
Original line number Original line Diff line number Diff line
@@ -112,7 +112,8 @@ public:
private:
private:
    virtual void onFirstRef();
    virtual void onFirstRef();
    EventThread* const mEventThread;
    EventThread* const mEventThread;
    gui::BitTube mChannel;
    std::mutex mLock;
    gui::BitTube mChannel GUARDED_BY(mLock);


    std::vector<DisplayEventReceiver::Event> mPendingEvents;
    std::vector<DisplayEventReceiver::Event> mPendingEvents;
};
};