| From oliver@zipernowsky.hu Fri Aug 1 16:56:58 2008 |
| From: Neil Brown <neilb@suse.de> |
| Date: Thu, 31 Jul 2008 20:46:13 +0200 |
| Subject: Close race in md_probe |
| To: Neil Brown <neilb@suse.de>, stable@kernel.org |
| Cc: Oliver Pinter <oliver.pntr@gmail.com> |
| Message-ID: <fbdf790939a5505f810e6205f321a5c7@zipernowsky.hu> |
| |
| |
| From: Neil Brown <neilb@suse.de> |
| |
| [ Upstream commit f48ed538386cb41559282d989354e8f5d442d71c ] |
| |
| There is a possible race in md_probe. If two threads call md_probe |
| for the same device, then one could exit (having checked that |
| ->gendisk exists) before the other has called kobject_init_and_add, |
| thus returning an incomplete kobj which will cause problems when |
| we try to add children to it. |
| |
| So extend the range of protection of disks_mutex slightly to |
| avoid this possibility. |
| |
| Signed-off-by: Neil Brown <neilb@suse.de> |
| CC: Oliver Pinter <oliver.pntr@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/md/md.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/md/md.c |
| +++ b/drivers/md/md.c |
| @@ -3326,9 +3326,9 @@ static struct kobject *md_probe(dev_t de |
| disk->queue = mddev->queue; |
| add_disk(disk); |
| mddev->gendisk = disk; |
| - mutex_unlock(&disks_mutex); |
| error = kobject_init_and_add(&mddev->kobj, &md_ktype, &disk->dev.kobj, |
| "%s", "md"); |
| + mutex_unlock(&disks_mutex); |
| if (error) |
| printk(KERN_WARNING "md: cannot register %s/md - name in use\n", |
| disk->disk_name); |