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

Commit ccea7dfa authored by David Anderson's avatar David Anderson Committed by Gerrit Code Review
Browse files

Merge "Fix gid not being set in ueventd when device nodes already exist."

parents a436f589 f8825faf
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -264,6 +264,8 @@ void DeviceHandler::MakeDevice(const std::string& path, bool block, int major, i
        setfscreatecon(secontext.c_str());
    }

    gid_t new_group = -1;

    dev_t dev = makedev(major, minor);
    /* Temporarily change egid to avoid race condition setting the gid of the
     * device node. Unforunately changing the euid would prevent creation of
@@ -291,10 +293,21 @@ void DeviceHandler::MakeDevice(const std::string& path, bool block, int major, i
            PLOG(ERROR) << "Cannot set '" << secontext << "' SELinux label on '" << path
                        << "' device";
        }

        struct stat s;
        if (stat(path.c_str(), &s) == 0) {
            if (gid != s.st_gid) {
                new_group = gid;
            }
        } else {
            PLOG(ERROR) << "Cannot stat " << path;
        }
    }

out:
    chown(path.c_str(), uid, -1);
    if (chown(path.c_str(), uid, new_group) < 0) {
        PLOG(ERROR) << "Cannot chown " << path << " " << uid << " " << new_group;
    }
    if (setegid(AID_ROOT)) {
        PLOG(FATAL) << "setegid(AID_ROOT) failed";
    }