| From 9183f01b5e6e32eb3f17b5f3f8d5ad5ac9786c49 Mon Sep 17 00:00:00 2001 |
| From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Date: Thu, 6 May 2021 16:00:47 +0200 |
| Subject: cdrom: gdrom: initialize global variable at init time |
| |
| From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| commit 9183f01b5e6e32eb3f17b5f3f8d5ad5ac9786c49 upstream. |
| |
| As Peter points out, if we were to disconnect and then reconnect this |
| driver from a device, the "global" state of the device would contain odd |
| values and could cause problems. Fix this up by just initializing the |
| whole thing to 0 at probe() time. |
| |
| Ideally this would be a per-device variable, but given the age and the |
| total lack of users of it, that would require a lot of s/./->/g changes |
| for really no good reason. |
| |
| Reported-by: Peter Rosin <peda@axentia.se> |
| Cc: Jens Axboe <axboe@kernel.dk> |
| Reviewed-by: Peter Rosin <peda@axentia.se> |
| Link: https://lore.kernel.org/r/YJP2j6AU82MqEY2M@kroah.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/cdrom/gdrom.c | 9 ++++++++- |
| 1 file changed, 8 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/cdrom/gdrom.c |
| +++ b/drivers/cdrom/gdrom.c |
| @@ -773,6 +773,13 @@ static int probe_gdrom_setupqueue(void) |
| static int probe_gdrom(struct platform_device *devptr) |
| { |
| int err; |
| + |
| + /* |
| + * Ensure our "one" device is initialized properly in case of previous |
| + * usages of it |
| + */ |
| + memset(&gd, 0, sizeof(gd)); |
| + |
| /* Start the device */ |
| if (gdrom_execute_diagnostic() != 1) { |
| pr_warning("ATA Probe for GDROM failed\n"); |
| @@ -867,7 +874,7 @@ static struct platform_driver gdrom_driv |
| static int __init init_gdrom(void) |
| { |
| int rc; |
| - gd.toc = NULL; |
| + |
| rc = platform_driver_register(&gdrom_driver); |
| if (rc) |
| return rc; |