chiark / gitweb /
floppy: fix array bounds check and minor calculation
authorPeter Breitenlohner <peb@mppmu.mpg.de>
Sun, 23 Nov 2008 16:22:32 +0000 (17:22 +0100)
committerKay Sievers <kay.sievers@vrfy.org>
Sun, 23 Nov 2008 16:22:32 +0000 (17:22 +0100)
Fix off-by-4 bug in floppy minors for fd[4-7].
Avoid segmentation fault for bad CMOS type.
Print mode in human readable, i.e., octal form.

extras/floppy/create_floppy_devices.c

index f5069f722065b2aa56fb2bb9bcd5c8eb550a7282..14df052cf7b7e4964edc220fb9863ca5735b99cc 100644 (file)
@@ -130,14 +130,14 @@ int main(int argc, char **argv)
                return 1;
        }
        if (fdnum > 3)
-               fdnum += 128;
+               fdnum += 124;
 
        if (major < 1) {
                fprintf(stderr,"Invalid major number %d\n", major);
                return 1;
        }
 
-       if (type < 0 || type > (int) sizeof(table)) {
+       if (type < 0 || type >= (int) (sizeof(table_sup) / sizeof(table_sup[0]))) {
                fprintf(stderr,"Invalid CMOS type %d\n", type);
                return 1;
        }
@@ -150,7 +150,7 @@ int main(int argc, char **argv)
                sprintf(node, "%s%s", dev, table[table_sup[type][i]]);
                minor = (table_sup[type][i] << 2) + fdnum;
                if (print_nodes)
-                       printf("%s b %d %d %d\n", node, mode, major, minor);
+                       printf("%s b %.4o %d %d\n", node, mode, major, minor);
                if (create_nodes) {
                        unlink(node);
                        udev_selinux_setfscreatecon(udev, node, S_IFBLK | mode);