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

Commit 5c75a5a6 authored by Steven Moreland's avatar Steven Moreland
Browse files

Prevent cm from incrementing 0.

The kernel will return an error now when the context
manager tries to increment the 0 handle.

Bug: 166779391
Test: binderLibTest
Change-Id: Iab7af80b491c49c37425e840432d9071f9f36ff4
parent 6bbc472a
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -294,12 +294,17 @@ ProcessState::handle_entry* ProcessState::lookupHandleLocked(int32_t handle)
    return &mHandleToObject.editItemAt(handle);
}

// see b/166779391: cannot change the VNDK interface, so access like this
extern sp<BBinder> the_context_object;

sp<IBinder> ProcessState::getStrongProxyForHandle(int32_t handle)
{
    sp<IBinder> result;

    AutoMutex _l(mLock);

    if (handle == 0 && the_context_object != nullptr) return the_context_object;

    handle_entry* e = lookupHandleLocked(handle);

    if (e != nullptr) {
+6 −0
Original line number Diff line number Diff line
@@ -447,6 +447,12 @@ TEST_F(BinderLibTest, CannotUseBinderAfterFork) {
    EXPECT_DEATH({ ProcessState::self(); }, "libbinder ProcessState can not be used after fork");
}

TEST_F(BinderLibTest, AddManagerToManager) {
    sp<IServiceManager> sm = defaultServiceManager();
    sp<IBinder> binder = IInterface::asBinder(sm);
    EXPECT_EQ(NO_ERROR, sm->addService(String16("binderLibTest-manager"), binder));
}

TEST_F(BinderLibTest, WasParceled) {
    auto binder = sp<BBinder>::make();
    EXPECT_FALSE(binder->wasParceled());