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

Commit af5e9684 authored by Shikha Malhotra's avatar Shikha Malhotra
Browse files

Check for IOCTL feature changed to not set inheritence

Inheritence flags should only be set on directories and not files,
setting inheritence flags on files fails and leads to not using project
ids.
Also refined the tests to make sure that project ids are indeed used.

Bug: b/215154615
Test: atest installd/StorageHostTest
Test: atest installd/installd_service_test.cpp
Change-Id: I6a2e310dc459f30fb967f25fe9162fc6ecdc54bc
Merged-In: Ia5baf127af5a078592d8b2db4b2f3d8c048a8692
parent 6b723463
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3391,7 +3391,7 @@ bool check_if_ioctl_feature_is_supported() {
    auto temp_path = StringPrintf("%smisc/installd/ioctl_check", android_data_dir.c_str());
    if (access(temp_path.c_str(), F_OK) != 0) {
        open(temp_path.c_str(), O_CREAT | O_TRUNC | O_RDWR | O_CLOEXEC, 0644);
        result = set_quota_project_id(temp_path, 0, true) == 0;
        result = set_quota_project_id(temp_path, 0, false) == 0;
        // delete the temp file
        // remove the external file
        remove(temp_path.c_str());
+16 −0
Original line number Diff line number Diff line
@@ -535,6 +535,22 @@ TEST_F(ServiceTest, GetAppSizeProjectID_UID) {
        if (!usingProjectIds) {
            service->setFirstBoot();
        }

        if (access(using_project_ids.c_str(), F_OK) != 0) {
            // projectids is not used, so check that ioctl features should be absent
            auto temp_path = StringPrintf("%smisc/installd/ioctl_check", android_data_dir.c_str());

            if (access(temp_path.c_str(), F_OK) != 0) {
                open(temp_path.c_str(), O_CREAT | O_TRUNC | O_RDWR | O_CLOEXEC, 0644);
                bool result = set_quota_project_id(temp_path, 0, false) == 0;
                // delete the temp file
                // remove the external file
                remove(temp_path.c_str());
                // since using_project_ids file is not present, so ioctl settings should be absent
                //  that is denoted by the result of setting project id flag as false
                ASSERT_FALSE(result);
            }
        }
        // call the getAppSize to get the current size of the external storage owning app
        service->getAppSize(std::nullopt, packageNames, 0, InstalldNativeService::FLAG_USE_QUOTA,
                            externalStorageAppId, ceDataInodes, codePaths, &externalStorageSize);