makedevs: Create blocks of devices with the correct uid/gid
authorPeter Kjellerstedt <pkj@axis.com>
Wed, 29 May 2013 11:47:17 +0000 (11:47 +0000)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Thu, 30 May 2013 19:59:12 +0000 (20:59 +0100)
When creating a block of devices (i.e., when count > 0), the wrong
path was used with the call to chown(), effectively trying to change
the owner of some (probably) non-existent file. Thus the created
device nodes were always owned by root.

(From OE-Core rev: e7796880164d6a37c2699a94e1c5391337c5eaa5)

Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/recipes-devtools/makedevs/makedevs-1.0.0/makedevs.c

index c7ad722..247d6c1 100644 (file)
@@ -130,7 +130,7 @@ static void add_new_device(char *name, char *path, unsigned long uid,
                timestamp = sb.st_mtime;
        }
 
-       mknod(name, mode, rdev);
+       mknod(path, mode, rdev);
        chown(path, uid, gid);
 //     printf("Device: %s %s  UID: %ld  GID: %ld  MODE: %ld  MAJOR: %d  MINOR: %d\n",
 //                     path, name, uid, gid, mode, (short)(rdev >> 8), (short)(rdev & 0xff));
@@ -198,7 +198,7 @@ static int interpret_table_entry(char *line)
                error_msg_and_die("Device table entries require absolute paths");
        }
        name = xstrdup(path + 1);
-       sprintf(path, "%s/%s\0", rootdir, name);
+       sprintf(path, "%s/%s", rootdir, name);
 
        switch (type) {
        case 'd':
@@ -223,6 +223,7 @@ static int interpret_table_entry(char *line)
 
                        for (i = start; i < count; i++) {
                                sprintf(buf, "%s%d", name, i);
+                               sprintf(path, "%s/%s%d", rootdir, name, i);
                                /* FIXME:  MKDEV uses illicit insider knowledge of kernel 
                                 * major/minor representation...  */
                                rdev = MKDEV(major, minor + (i * increment - start));