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

Commit 09bd41d0 authored by Ting-Yuan Huang's avatar Ting-Yuan Huang
Browse files

init: fix memory leaks

It's possible that node is not freed before return.

Test: make WITH_TIDY=1 mmma system/core/init

Change-Id: I648eea9dda006d2b2239e169785190817ad31352
parent 84767043
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -109,14 +109,19 @@ int add_dev_perms(const char *name, const char *attr,
        return -ENOMEM;

    node->dp.name = strdup(name);
    if (!node->dp.name)
    if (!node->dp.name) {
        free(node);
        return -ENOMEM;
    }

    if (attr) {
        node->dp.attr = strdup(attr);
        if (!node->dp.attr)
        if (!node->dp.attr) {
            free(node->dp.name);
            free(node);
            return -ENOMEM;
        }
    }

    node->dp.perm = perm;
    node->dp.uid = uid;
+9 −6
Original line number Diff line number Diff line
@@ -95,7 +95,6 @@ void set_device_permission(int nargs, char **args)
    int prefix = 0;
    int wildcard = 0;
    char *endptr;
    char *tmp = 0;

    if (nargs == 0)
        return;
@@ -129,14 +128,12 @@ void set_device_permission(int nargs, char **args)
    perm = strtol(args[1], &endptr, 8);
    if (!endptr || *endptr != '\0') {
        LOG(ERROR) << "invalid mode '" << args[1] << "'";
        free(tmp);
        return;
    }

    struct passwd* pwd = getpwnam(args[2]);
    if (!pwd) {
        LOG(ERROR) << "invalid uid '" << args[2] << "'";
        free(tmp);
        return;
    }
    uid = pwd->pw_uid;
@@ -144,11 +141,17 @@ void set_device_permission(int nargs, char **args)
    struct group* grp = getgrnam(args[3]);
    if (!grp) {
        LOG(ERROR) << "invalid gid '" << args[3] << "'";
        free(tmp);
        return;
    }
    gid = grp->gr_gid;

    add_dev_perms(name, attr, perm, uid, gid, prefix, wildcard);
    free(tmp);
    if (add_dev_perms(name, attr, perm, uid, gid, prefix, wildcard) != 0) {
        PLOG(ERROR) << "add_dev_perms(name=" << name <<
                       ", attr=" << attr <<
                       ", perm=" << std::oct << perm << std::dec <<
                       ", uid=" << uid << ", gid=" << gid <<
                       ", prefix=" << prefix << ", wildcard=" << wildcard <<
                       ")";
        return;
    }
}