mdev: safer handling of $SUBSYSTEM in mdev -s
authorDenis Vlasenko <vda.linux@googlemail.com>
Tue, 14 Apr 2009 21:23:33 +0000 (21:23 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Tue, 14 Apr 2009 21:23:33 +0000 (21:23 -0000)
util-linux/mdev.c

index 0f7e082baa2de32f9a6d9fcf66b5e557c01c649b..2451cca05d893505e451c0c41d18f213e6936813 100644 (file)
@@ -1,6 +1,5 @@
 /* vi: set sw=4 ts=4: */
 /*
- *
  * mdev - Mini udev for busybox
  *
  * Copyright 2005 Rob Landley <rob@landley.net>
@@ -8,7 +7,6 @@
  *
  * Licensed under GPL version 2, see file LICENSE in this tarball for details.
  */
-
 #include "libbb.h"
 #include "xregex.h"
 
@@ -353,11 +351,13 @@ static int FAST_FUNC dirAction(const char *fileName UNUSED_PARAM,
                void *userData UNUSED_PARAM,
                int depth)
 {
-       /* Extract device subsystem -- the name of the directory under /sys/class/ */
+       /* Extract device subsystem -- the name of the directory
+        * under /sys/class/ */
        if (1 == depth) {
+               free(subsystem);
                subsystem = strrchr(fileName, '/');
                if (subsystem)
-                       subsystem++;
+                       subsystem = xstrdup(subsystem + 1);
        }
 
        return (depth >= MAX_SYSFS_DEPTH ? SKIP : TRUE);
@@ -397,17 +397,17 @@ static void load_firmware(const char *const firmware, const char *const sysfs_pa
        goto out;
 
  loading:
-       /* tell kernel we're loading by `echo 1 > /sys/$DEVPATH/loading` */
+       /* tell kernel we're loading by "echo 1 > /sys/$DEVPATH/loading" */
        if (full_write(loading_fd, "1", 1) != 1)
                goto out;
 
-       /* load firmware by `cat /lib/firmware/$FIRMWARE > /sys/$DEVPATH/data */
+       /* load firmware into /sys/$DEVPATH/data */
        data_fd = open("data", O_WRONLY);
        if (data_fd == -1)
                goto out;
        cnt = bb_copyfd_eof(firmware_fd, data_fd);
 
-       /* tell kernel result by `echo [0|-1] > /sys/$DEVPATH/loading` */
+       /* tell kernel result by "echo [0|-1] > /sys/$DEVPATH/loading" */
        if (cnt > 0)
                full_write(loading_fd, "0", 1);
        else