| From 47512cfd0d7a8bd6ab71d01cd89fca19eb2093eb Mon Sep 17 00:00:00 2001 |
| From: Thomas Gleixner <tglx@linutronix.de> |
| Date: Wed, 15 Feb 2017 11:11:50 +0100 |
| Subject: x86/platform/goldfish: Prevent unconditional loading |
| |
| From: Thomas Gleixner <tglx@linutronix.de> |
| |
| commit 47512cfd0d7a8bd6ab71d01cd89fca19eb2093eb upstream. |
| |
| The goldfish platform code registers the platform device unconditionally |
| which causes havoc in several ways if the goldfish_pdev_bus driver is |
| enabled: |
| |
| - Access to the hardcoded physical memory region, which is either not |
| available or contains stuff which is completely unrelated. |
| |
| - Prevents that the interrupt of the serial port can be requested |
| |
| - In case of a spurious interrupt it goes into a infinite loop in the |
| interrupt handler of the pdev_bus driver (which needs to be fixed |
| seperately). |
| |
| Add a 'goldfish' command line option to make the registration opt-in when |
| the platform is compiled in. |
| |
| I'm seriously grumpy about this engineering trainwreck, which has seven |
| SOBs from Intel developers for 50 lines of code. And none of them figured |
| out that this is broken. Impressive fail! |
| |
| Fixes: ddd70cf93d78 ("goldfish: platform device for x86") |
| Reported-by: Gabriel C <nix.or.die@gmail.com> |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| Acked-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| Documentation/kernel-parameters.txt | 4 ++++ |
| arch/x86/platform/goldfish/goldfish.c | 14 +++++++++++++- |
| 2 files changed, 17 insertions(+), 1 deletion(-) |
| |
| --- a/Documentation/kernel-parameters.txt |
| +++ b/Documentation/kernel-parameters.txt |
| @@ -1391,6 +1391,10 @@ bytes respectively. Such letter suffixes |
| When zero, profiling data is discarded and associated |
| debugfs files are removed at module unload time. |
| |
| + goldfish [X86] Enable the goldfish android emulator platform. |
| + Don't use this when you are not running on the |
| + android emulator |
| + |
| gpt [EFI] Forces disk with valid GPT signature but |
| invalid Protective MBR to be treated as GPT. If the |
| primary GPT is corrupted, it enables the backup/alternate |
| --- a/arch/x86/platform/goldfish/goldfish.c |
| +++ b/arch/x86/platform/goldfish/goldfish.c |
| @@ -42,10 +42,22 @@ static struct resource goldfish_pdev_bus |
| } |
| }; |
| |
| +static bool goldfish_enable __initdata; |
| + |
| +static int __init goldfish_setup(char *str) |
| +{ |
| + goldfish_enable = true; |
| + return 0; |
| +} |
| +__setup("goldfish", goldfish_setup); |
| + |
| static int __init goldfish_init(void) |
| { |
| + if (!goldfish_enable) |
| + return -ENODEV; |
| + |
| platform_device_register_simple("goldfish_pdev_bus", -1, |
| - goldfish_pdev_bus_resources, 2); |
| + goldfish_pdev_bus_resources, 2); |
| return 0; |
| } |
| device_initcall(goldfish_init); |