[Bug 429] mdev passes incorrect $MDEV if rename is in effect

bugzilla at busybox.net bugzilla at busybox.net
Thu Jul 2 11:06:11 UTC 2009


https://bugs.busybox.net/show_bug.cgi?id=429





--- Comment #1 from Denys Vlasenko <vda.linux at googlemail.com>  2009-07-02 11:06:11 UTC ---
Fixing it like this:


const char *node_name;

node_name = device_name;
if (ENABLE_FEATURE_MDEV_RENAME && alias)
        node_name = alias = build_alias(alias, device_name);

if (!delete && major >= 0) {
        if (mknod(node_name, mode | type, makedev(major, minor)) && errno !=
EEXIST)
                bb_perror_msg_and_die("mknod %s", node_name);
        if (major == root_major && minor == root_minor)
                symlink(node_name, "root");
        if (ENABLE_FEATURE_MDEV_CONF) {
                chmod(node_name, mode);
                chown(node_name, ugid.uid, ugid.gid);
        }
        if (ENABLE_FEATURE_MDEV_RENAME && alias) {
                if (aliaslink == '>')
                        symlink(node_name, device_name);
        }
}

if (ENABLE_FEATURE_MDEV_EXEC && command) {
        /* setenv will leak memory, use putenv/unsetenv/free */
        char *s = xasprintf("%s=%s", "MDEV", node_name);
-->        the main part of the fix is here  ^^^^^^^^^
        char *s1 = xasprintf("%s=%s", "SUBSYSTEM", subsystem);
        putenv(s);
        putenv(s1);
        if (system(command) == -1)
                bb_perror_msg_and_die("can't run '%s'", command);
        unsetenv("SUBSYSTEM");
        free(s1);
        unsetenv("MDEV");
        free(s);
        free(command);
}

if (delete) {
        if (ENABLE_FEATURE_MDEV_RENAME && alias) {
                if (aliaslink == '>')
                        unlink(device_name);
        }
        unlink(node_name);
}

if (ENABLE_FEATURE_MDEV_RENAME)
        free(alias);


-- 
Configure bugmail: https://bugs.busybox.net/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.


More information about the busybox-cvs mailing list