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

Commit 7affacbd authored by Steven Moreland's avatar Steven Moreland
Browse files

RPC Binder: shutdown on ENOMEM

We were expecting crashes in these case, but explicitly
shut down. More work needs to be done to ignore transactions
in out of memory conditions.

Bug: 404210068
Bug: 414720799
Bug: 416734088
Test: binderRpcTest
Change-Id: Iaf9a34b4031fb7b9807c962bcc67de8cd9102088
Merged-In: Iaf9a34b4031fb7b9807c962bcc67de8cd9102088
(cherry picked from commit cba4e364)
parent 6ec2bbaa
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -586,7 +586,13 @@ status_t RpcState::waitForReply(const sp<RpcSession::RpcConnection>& connection,
    }

    CommandData data(command.bodySize);
    if (!data.valid()) return NO_MEMORY;
    if (!data.valid()) {
        // b/404210068 - if we run out of memory, the wire protocol gets messed up.
        // so shutdown. We would need to read all the transaction data anyway and
        // send a reply still to gracefully recover.
        (void)session->shutdownAndWait(false);
        return NO_MEMORY;
    }

    iovec iov{data.data(), command.bodySize};
    if (status_t status = rpcRec(connection, session, "reply body", &iov, 1); status != OK)
@@ -716,6 +722,10 @@ status_t RpcState::processTransact(const sp<RpcSession::RpcConnection>& connecti

    CommandData transactionData(command.bodySize);
    if (!transactionData.valid()) {
        // b/404210068 - if we run out of memory, the wire protocol gets messed up.
        // so shutdown. We would need to read all the transaction data anyway and
        // send a reply still to gracefully recover.
        (void)session->shutdownAndWait(false);
        return NO_MEMORY;
    }
    iovec iov{transactionData.data(), transactionData.size()};