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

Commit ade34378 authored by Edwin Wong's avatar Edwin Wong Committed by Android (Google) Code Review
Browse files

Merge "Check for nullptr IMemory."

parents 55cdc20d 3b8a9ed5
Loading
Loading
Loading
Loading
+14 −1
Original line number Original line Diff line number Diff line
@@ -51,7 +51,11 @@ namespace implementation {


    Return<void> CryptoPlugin::setSharedBufferBase(const hidl_memory& base,
    Return<void> CryptoPlugin::setSharedBufferBase(const hidl_memory& base,
            uint32_t bufferId) {
            uint32_t bufferId) {
        mSharedBufferMap[bufferId] = mapMemory(base);
        sp<IMemory> hidlMemory = mapMemory(base);
        ALOGE_IF(hidlMemory == nullptr, "mapMemory returns nullptr");

        // allow mapMemory to return nullptr
        mSharedBufferMap[bufferId] = hidlMemory;
        return Void();
        return Void();
    }
    }


@@ -107,6 +111,10 @@ namespace implementation {


        AString detailMessage;
        AString detailMessage;
        sp<IMemory> sourceBase = mSharedBufferMap[source.bufferId];
        sp<IMemory> sourceBase = mSharedBufferMap[source.bufferId];
        if (sourceBase == nullptr) {
            _hidl_cb(Status::ERROR_DRM_CANNOT_HANDLE, 0, "source is a nullptr");
            return Void();
        }


        if (source.offset + offset + source.size > sourceBase->getSize()) {
        if (source.offset + offset + source.size > sourceBase->getSize()) {
            _hidl_cb(Status::ERROR_DRM_CANNOT_HANDLE, 0, "invalid buffer size");
            _hidl_cb(Status::ERROR_DRM_CANNOT_HANDLE, 0, "invalid buffer size");
@@ -121,6 +129,11 @@ namespace implementation {
        if (destination.type == BufferType::SHARED_MEMORY) {
        if (destination.type == BufferType::SHARED_MEMORY) {
            const SharedBuffer& destBuffer = destination.nonsecureMemory;
            const SharedBuffer& destBuffer = destination.nonsecureMemory;
            sp<IMemory> destBase = mSharedBufferMap[destBuffer.bufferId];
            sp<IMemory> destBase = mSharedBufferMap[destBuffer.bufferId];
            if (destBase == nullptr) {
                _hidl_cb(Status::ERROR_DRM_CANNOT_HANDLE, 0, "destination is a nullptr");
                return Void();
            }

            if (destBuffer.offset + destBuffer.size > destBase->getSize()) {
            if (destBuffer.offset + destBuffer.size > destBase->getSize()) {
                _hidl_cb(Status::ERROR_DRM_CANNOT_HANDLE, 0, "invalid buffer size");
                _hidl_cb(Status::ERROR_DRM_CANNOT_HANDLE, 0, "invalid buffer size");
                return Void();
                return Void();
+11 −10
Original line number Original line Diff line number Diff line
@@ -94,10 +94,10 @@ class DrmHalClearkeyFactoryTest : public ::testing::VtsHalHidlTargetTestBase {


        drmFactory =
        drmFactory =
                ::testing::VtsHalHidlTargetTestBase::getService<IDrmFactory>();
                ::testing::VtsHalHidlTargetTestBase::getService<IDrmFactory>();
        ASSERT_NE(drmFactory, nullptr);
        ASSERT_NE(nullptr, drmFactory.get());
        cryptoFactory =
        cryptoFactory =
                ::testing::VtsHalHidlTargetTestBase::getService<ICryptoFactory>();
                ::testing::VtsHalHidlTargetTestBase::getService<ICryptoFactory>();
        ASSERT_NE(cryptoFactory, nullptr);
        ASSERT_NE(nullptr, cryptoFactory.get());
    }
    }


    virtual void TearDown() override {}
    virtual void TearDown() override {}
@@ -166,7 +166,7 @@ TEST_F(DrmHalClearkeyFactoryTest, CreateClearKeyDrmPlugin) {
            kClearKeyUUID, packageName,
            kClearKeyUUID, packageName,
            [&](Status status, const sp<IDrmPlugin>& plugin) {
            [&](Status status, const sp<IDrmPlugin>& plugin) {
                EXPECT_EQ(Status::OK, status);
                EXPECT_EQ(Status::OK, status);
                EXPECT_NE(plugin, nullptr);
                EXPECT_NE(nullptr, plugin.get());
            });
            });
    EXPECT_OK(res);
    EXPECT_OK(res);
}
}
@@ -180,7 +180,7 @@ TEST_F(DrmHalClearkeyFactoryTest, CreateClearKeyCryptoPlugin) {
            kClearKeyUUID, initVec,
            kClearKeyUUID, initVec,
            [&](Status status, const sp<ICryptoPlugin>& plugin) {
            [&](Status status, const sp<ICryptoPlugin>& plugin) {
                EXPECT_EQ(Status::OK, status);
                EXPECT_EQ(Status::OK, status);
                EXPECT_NE(plugin, nullptr);
                EXPECT_NE(nullptr, plugin.get());
            });
            });
    EXPECT_OK(res);
    EXPECT_OK(res);
}
}
@@ -194,7 +194,7 @@ TEST_F(DrmHalClearkeyFactoryTest, CreateInvalidDrmPlugin) {
            kInvalidUUID, packageName,
            kInvalidUUID, packageName,
            [&](Status status, const sp<IDrmPlugin>& plugin) {
            [&](Status status, const sp<IDrmPlugin>& plugin) {
                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
                EXPECT_EQ(plugin, nullptr);
                EXPECT_EQ(nullptr, plugin.get());
            });
            });
    EXPECT_OK(res);
    EXPECT_OK(res);
}
}
@@ -208,7 +208,7 @@ TEST_F(DrmHalClearkeyFactoryTest, CreateInvalidCryptoPlugin) {
            kInvalidUUID, initVec,
            kInvalidUUID, initVec,
            [&](Status status, const sp<ICryptoPlugin>& plugin) {
            [&](Status status, const sp<ICryptoPlugin>& plugin) {
                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
                EXPECT_EQ(plugin, nullptr);
                EXPECT_EQ(nullptr, plugin.get());
            });
            });
    EXPECT_OK(res);
    EXPECT_OK(res);
}
}
@@ -219,13 +219,13 @@ class DrmHalClearkeyPluginTest : public DrmHalClearkeyFactoryTest {
        // Create factories
        // Create factories
        DrmHalClearkeyFactoryTest::SetUp();
        DrmHalClearkeyFactoryTest::SetUp();


        ASSERT_NE(drmFactory, nullptr);
        ASSERT_NE(nullptr, drmFactory.get());
        hidl_string packageName("android.hardware.drm.test");
        hidl_string packageName("android.hardware.drm.test");
        auto res = drmFactory->createPlugin(
        auto res = drmFactory->createPlugin(
                kClearKeyUUID, packageName,
                kClearKeyUUID, packageName,
                [this](Status status, const sp<IDrmPlugin>& plugin) {
                [this](Status status, const sp<IDrmPlugin>& plugin) {
                    EXPECT_EQ(Status::OK, status);
                    EXPECT_EQ(Status::OK, status);
                    ASSERT_NE(plugin, nullptr);
                    ASSERT_NE(nullptr, plugin.get());
                    drmPlugin = plugin;
                    drmPlugin = plugin;
                });
                });
        ASSERT_OK(res);
        ASSERT_OK(res);
@@ -235,7 +235,7 @@ class DrmHalClearkeyPluginTest : public DrmHalClearkeyFactoryTest {
                kClearKeyUUID, initVec,
                kClearKeyUUID, initVec,
                [this](Status status, const sp<ICryptoPlugin>& plugin) {
                [this](Status status, const sp<ICryptoPlugin>& plugin) {
                    EXPECT_EQ(Status::OK, status);
                    EXPECT_EQ(Status::OK, status);
                    ASSERT_NE(plugin, nullptr);
                    ASSERT_NE(nullptr, plugin.get());
                    cryptoPlugin = plugin;
                    cryptoPlugin = plugin;
                });
                });
        ASSERT_OK(res);
        ASSERT_OK(res);
@@ -866,7 +866,7 @@ TEST_F(DrmHalClearkeyPluginTest, NotifyResolution) {
sp<IMemory> DrmHalClearkeyPluginTest::getDecryptMemory(size_t size,
sp<IMemory> DrmHalClearkeyPluginTest::getDecryptMemory(size_t size,
                                                       size_t index) {
                                                       size_t index) {
    sp<IAllocator> ashmemAllocator = IAllocator::getService("ashmem");
    sp<IAllocator> ashmemAllocator = IAllocator::getService("ashmem");
    EXPECT_NE(ashmemAllocator, nullptr);
    EXPECT_NE(nullptr, ashmemAllocator.get());


    hidl_memory hidlMemory;
    hidl_memory hidlMemory;
    auto res = ashmemAllocator->allocate(
    auto res = ashmemAllocator->allocate(
@@ -878,6 +878,7 @@ sp<IMemory> DrmHalClearkeyPluginTest::getDecryptMemory(size_t size,
    EXPECT_OK(res);
    EXPECT_OK(res);


    sp<IMemory> mappedMemory = mapMemory(hidlMemory);
    sp<IMemory> mappedMemory = mapMemory(hidlMemory);
    EXPECT_NE(nullptr, mappedMemory.get());
    EXPECT_OK(cryptoPlugin->setSharedBufferBase(hidlMemory, index));
    EXPECT_OK(cryptoPlugin->setSharedBufferBase(hidlMemory, index));
    return mappedMemory;
    return mappedMemory;
}
}
+11 −11
Original line number Original line Diff line number Diff line
@@ -113,7 +113,7 @@ class DrmHalVendorFactoryTest : public testing::TestWithParam<std::string> {
              test_info->test_case_name(), test_info->name(),
              test_info->test_case_name(), test_info->name(),
              GetParam().c_str());
              GetParam().c_str());


        ASSERT_NE(vendorModule, nullptr);
        ASSERT_NE(nullptr, vendorModule.get());


        // First try the binderized service name provided by the vendor module.
        // First try the binderized service name provided by the vendor module.
        // If that fails, which it can on non-binderized devices, try the default
        // If that fails, which it can on non-binderized devices, try the default
@@ -123,14 +123,14 @@ class DrmHalVendorFactoryTest : public testing::TestWithParam<std::string> {
        if (drmFactory == nullptr) {
        if (drmFactory == nullptr) {
            drmFactory = VtsTestBase::getService<IDrmFactory>();
            drmFactory = VtsTestBase::getService<IDrmFactory>();
        }
        }
        ASSERT_NE(drmFactory, nullptr);
        ASSERT_NE(nullptr, drmFactory.get());


        // Do the same for the crypto factory
        // Do the same for the crypto factory
        cryptoFactory = VtsTestBase::getService<ICryptoFactory>(name);
        cryptoFactory = VtsTestBase::getService<ICryptoFactory>(name);
        if (cryptoFactory == nullptr) {
        if (cryptoFactory == nullptr) {
            cryptoFactory = VtsTestBase::getService<ICryptoFactory>();
            cryptoFactory = VtsTestBase::getService<ICryptoFactory>();
        }
        }
        ASSERT_NE(cryptoFactory, nullptr);
        ASSERT_NE(nullptr, cryptoFactory.get());


        // If drm scheme not installed skip subsequent tests
        // If drm scheme not installed skip subsequent tests
        if (!drmFactory->isCryptoSchemeSupported(getVendorUUID())) {
        if (!drmFactory->isCryptoSchemeSupported(getVendorUUID())) {
@@ -239,7 +239,7 @@ TEST_P(DrmHalVendorFactoryTest, CreateVendorDrmPlugin) {
            getVendorUUID(), packageName,
            getVendorUUID(), packageName,
            [&](Status status, const sp<IDrmPlugin>& plugin) {
            [&](Status status, const sp<IDrmPlugin>& plugin) {
                EXPECT_EQ(Status::OK, status);
                EXPECT_EQ(Status::OK, status);
                EXPECT_NE(plugin, nullptr);
                EXPECT_NE(nullptr, plugin.get());
            });
            });
    EXPECT_OK(res);
    EXPECT_OK(res);
}
}
@@ -254,7 +254,7 @@ TEST_P(DrmHalVendorFactoryTest, CreateVendorCryptoPlugin) {
            getVendorUUID(), initVec,
            getVendorUUID(), initVec,
            [&](Status status, const sp<ICryptoPlugin>& plugin) {
            [&](Status status, const sp<ICryptoPlugin>& plugin) {
                EXPECT_EQ(Status::OK, status);
                EXPECT_EQ(Status::OK, status);
                EXPECT_NE(plugin, nullptr);
                EXPECT_NE(nullptr, plugin.get());
            });
            });
    EXPECT_OK(res);
    EXPECT_OK(res);
}
}
@@ -269,7 +269,7 @@ TEST_P(DrmHalVendorFactoryTest, CreateInvalidDrmPlugin) {
            kInvalidUUID, packageName,
            kInvalidUUID, packageName,
            [&](Status status, const sp<IDrmPlugin>& plugin) {
            [&](Status status, const sp<IDrmPlugin>& plugin) {
                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
                EXPECT_EQ(plugin, nullptr);
                EXPECT_EQ(nullptr, plugin.get());
            });
            });
    EXPECT_OK(res);
    EXPECT_OK(res);
}
}
@@ -284,7 +284,7 @@ TEST_P(DrmHalVendorFactoryTest, CreateInvalidCryptoPlugin) {
            kInvalidUUID, initVec,
            kInvalidUUID, initVec,
            [&](Status status, const sp<ICryptoPlugin>& plugin) {
            [&](Status status, const sp<ICryptoPlugin>& plugin) {
                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
                EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
                EXPECT_EQ(plugin, nullptr);
                EXPECT_EQ(nullptr, plugin.get());
            });
            });
    EXPECT_OK(res);
    EXPECT_OK(res);
}
}
@@ -302,7 +302,7 @@ class DrmHalVendorPluginTest : public DrmHalVendorFactoryTest {
                getVendorUUID(), packageName,
                getVendorUUID(), packageName,
                [this](Status status, const sp<IDrmPlugin>& plugin) {
                [this](Status status, const sp<IDrmPlugin>& plugin) {
                    EXPECT_EQ(Status::OK, status);
                    EXPECT_EQ(Status::OK, status);
                    ASSERT_NE(plugin, nullptr);
                    ASSERT_NE(nullptr, plugin.get());
                    drmPlugin = plugin;
                    drmPlugin = plugin;
                });
                });
        ASSERT_OK(res);
        ASSERT_OK(res);
@@ -312,7 +312,7 @@ class DrmHalVendorPluginTest : public DrmHalVendorFactoryTest {
                getVendorUUID(), initVec,
                getVendorUUID(), initVec,
                [this](Status status, const sp<ICryptoPlugin>& plugin) {
                [this](Status status, const sp<ICryptoPlugin>& plugin) {
                    EXPECT_EQ(Status::OK, status);
                    EXPECT_EQ(Status::OK, status);
                    ASSERT_NE(plugin, nullptr);
                    ASSERT_NE(nullptr, plugin.get());
                    cryptoPlugin = plugin;
                    cryptoPlugin = plugin;
                });
                });
        ASSERT_OK(res);
        ASSERT_OK(res);
@@ -1185,7 +1185,7 @@ TEST_P(DrmHalVendorPluginTest, NotifyResolution) {
sp<IMemory> DrmHalVendorPluginTest::getDecryptMemory(size_t size,
sp<IMemory> DrmHalVendorPluginTest::getDecryptMemory(size_t size,
                                                     size_t index) {
                                                     size_t index) {
    sp<IAllocator> ashmemAllocator = IAllocator::getService("ashmem");
    sp<IAllocator> ashmemAllocator = IAllocator::getService("ashmem");
    EXPECT_NE(ashmemAllocator, nullptr);
    EXPECT_NE(nullptr, ashmemAllocator.get());


    hidl_memory hidlMemory;
    hidl_memory hidlMemory;
    auto res = ashmemAllocator->allocate(
    auto res = ashmemAllocator->allocate(
@@ -1198,7 +1198,7 @@ sp<IMemory> DrmHalVendorPluginTest::getDecryptMemory(size_t size,
    EXPECT_OK(res);
    EXPECT_OK(res);


    sp<IMemory> mappedMemory = mapMemory(hidlMemory);
    sp<IMemory> mappedMemory = mapMemory(hidlMemory);
    EXPECT_NE(mappedMemory, nullptr);
    EXPECT_NE(nullptr, mappedMemory.get());
    res = cryptoPlugin->setSharedBufferBase(hidlMemory, index);
    res = cryptoPlugin->setSharedBufferBase(hidlMemory, index);
    EXPECT_OK(res);
    EXPECT_OK(res);
    return mappedMemory;
    return mappedMemory;