mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-28 23:24:50 +00:00
ide: fix race in device_create
There is a race from when a device is created with device_create() and then the drvdata is set with a call to dev_set_drvdata() in which a sysfs file could be open, yet the drvdata will be NULL, causing all sorts of bad things to happen. This patch fixes the problem by using the new function, device_create_drvdata(). Cc: Kay Sievers <kay.sievers@vrfy.org> Acked-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
8b485877e0
commit
716ad8750a
1 changed files with 2 additions and 3 deletions
|
@ -648,13 +648,12 @@ static int ide_register_port(ide_hwif_t *hwif)
|
||||||
|
|
||||||
get_device(&hwif->gendev);
|
get_device(&hwif->gendev);
|
||||||
|
|
||||||
hwif->portdev = device_create(ide_port_class, &hwif->gendev,
|
hwif->portdev = device_create_drvdata(ide_port_class, &hwif->gendev,
|
||||||
MKDEV(0, 0), hwif->name);
|
MKDEV(0, 0), hwif, hwif->name);
|
||||||
if (IS_ERR(hwif->portdev)) {
|
if (IS_ERR(hwif->portdev)) {
|
||||||
ret = PTR_ERR(hwif->portdev);
|
ret = PTR_ERR(hwif->portdev);
|
||||||
device_unregister(&hwif->gendev);
|
device_unregister(&hwif->gendev);
|
||||||
}
|
}
|
||||||
dev_set_drvdata(hwif->portdev, hwif);
|
|
||||||
out:
|
out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue