md: disable probing for md devices 512 and over.
authorNeilBrown <neilb@suse.de>
Thu, 31 Jul 2014 03:54:54 +0000 (13:54 +1000)
committerNeilBrown <neilb@suse.de>
Thu, 31 Jul 2014 03:54:54 +0000 (13:54 +1000)
The way md devices are traditionally created in the kernel
is simply to open the device with the desired major/minor number.

This can be problematic as some support tools, notably udev and
programs run by udev, can open a device just to see what is there, and
find that it has created something.  It is easy for a race to cause
udev to open an md device just after it was destroy, causing it to
suddenly re-appear.

For some time we have had an alternate way to create md devices
  echo md_somename > /sys/modules/md_mod/paramaters/new_array

This will always use a minor number of 512 or higher, which mdadm
normally avoids.
Using this makes the creation-by-opening unnecessary, but does
not disable it, so it is still there to cause problems.

This patch disable probing for devices with a major of 9 (MD_MAJOR)
and a minor of 512 and up.  This devices created by writing to
new_array cannot be re-created by opening the node in /dev.

Signed-off-by: NeilBrown <neilb@suse.de>
drivers/md/md.c

index 32fc19c..1379b1a 100644 (file)
@@ -8592,7 +8592,7 @@ static int __init md_init(void)
                goto err_mdp;
        mdp_major = ret;
 
-       blk_register_region(MKDEV(MD_MAJOR, 0), 1UL<<MINORBITS, THIS_MODULE,
+       blk_register_region(MKDEV(MD_MAJOR, 0), 512, THIS_MODULE,
                            md_probe, NULL, NULL);
        blk_register_region(MKDEV(mdp_major, 0), 1UL<<MINORBITS, THIS_MODULE,
                            md_probe, NULL, NULL);
@@ -8687,7 +8687,7 @@ static __exit void md_exit(void)
        struct list_head *tmp;
        int delay = 1;
 
-       blk_unregister_region(MKDEV(MD_MAJOR,0), 1U << MINORBITS);
+       blk_unregister_region(MKDEV(MD_MAJOR,0), 512);
        blk_unregister_region(MKDEV(mdp_major,0), 1U << MINORBITS);
 
        unregister_blkdev(MD_MAJOR,"md");