[SRU,Bionic,1/1] x86/EISA: Don't probe EISA bus for Xen PV guests

Message ID 8a73a627feab24dd2c779a7fab736aeef36aeb58.1537438302.git.joseph.salisbury@canonical.com
State New
Headers show
Series
  • x86/EISA: Don't probe EISA bus for Xen PV guests
Related show

Commit Message

Joseph Salisbury Sept. 20, 2018, 10:20 a.m.
From: Boris Ostrovsky <boris.ostrovsky@oracle.com>

BugLink: https://bugs.launchpad.net/bugs/1789118

For unprivileged Xen PV guests this is normal memory and ioremap will
not be able to properly map it.

While at it, since ioremap may return NULL, add a test for pointer's
validity.

Reported-by: Andy Smith <andy@strugglers.net>
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: hpa@zytor.com
Cc: xen-devel@lists.xenproject.org
Cc: jgross@suse.com
Cc: stable@vger.kernel.org
Link: https://lkml.kernel.org/r/20180911195538.23289-1-boris.ostrovsky@oracle.com

(cherry picked from commit 6a92b11169a65b3f8cc512c75a252cbd0d096ba0)
Signed-off-by: Joseph Salisbury <joseph.salisbury@canonical.com>
---
 arch/x86/kernel/eisa.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

Comments

Stefan Bader Sept. 27, 2018, 4:49 p.m. | #1
On 20.09.2018 12:20, Joseph Salisbury wrote:
> From: Boris Ostrovsky <boris.ostrovsky@oracle.com>
> 
> BugLink: https://bugs.launchpad.net/bugs/1789118
> 
> For unprivileged Xen PV guests this is normal memory and ioremap will
> not be able to properly map it.
> 
> While at it, since ioremap may return NULL, add a test for pointer's
> validity.
> 
> Reported-by: Andy Smith <andy@strugglers.net>
> Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> Cc: hpa@zytor.com
> Cc: xen-devel@lists.xenproject.org
> Cc: jgross@suse.com
> Cc: stable@vger.kernel.org
> Link: https://lkml.kernel.org/r/20180911195538.23289-1-boris.ostrovsky@oracle.com
> 
> (cherry picked from commit 6a92b11169a65b3f8cc512c75a252cbd0d096ba0)
> Signed-off-by: Joseph Salisbury <joseph.salisbury@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
> ---
>  arch/x86/kernel/eisa.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/x86/kernel/eisa.c b/arch/x86/kernel/eisa.c
> index f260e45..e8c8c5d 100644
> --- a/arch/x86/kernel/eisa.c
> +++ b/arch/x86/kernel/eisa.c
> @@ -7,11 +7,17 @@
>  #include <linux/eisa.h>
>  #include <linux/io.h>
>  
> +#include <xen/xen.h>
> +
>  static __init int eisa_bus_probe(void)
>  {
> -	void __iomem *p = ioremap(0x0FFFD9, 4);
> +	void __iomem *p;
> +
> +	if (xen_pv_domain() && !xen_initial_domain())
> +		return 0;
>  
> -	if (readl(p) == 'E' + ('I'<<8) + ('S'<<16) + ('A'<<24))
> +	p = ioremap(0x0FFFD9, 4);
> +	if (p && readl(p) == 'E' + ('I' << 8) + ('S' << 16) + ('A' << 24))
>  		EISA_bus = 1;
>  	iounmap(p);
>  	return 0;
>
Kleber Souza Sept. 28, 2018, 10:35 a.m. | #2
On 09/20/18 12:20, Joseph Salisbury wrote:
> From: Boris Ostrovsky <boris.ostrovsky@oracle.com>
> 
> BugLink: https://bugs.launchpad.net/bugs/1789118
> 
> For unprivileged Xen PV guests this is normal memory and ioremap will
> not be able to properly map it.
> 
> While at it, since ioremap may return NULL, add a test for pointer's
> validity.
> 
> Reported-by: Andy Smith <andy@strugglers.net>
> Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> Cc: hpa@zytor.com
> Cc: xen-devel@lists.xenproject.org
> Cc: jgross@suse.com
> Cc: stable@vger.kernel.org
> Link: https://lkml.kernel.org/r/20180911195538.23289-1-boris.ostrovsky@oracle.com
> 
> (cherry picked from commit 6a92b11169a65b3f8cc512c75a252cbd0d096ba0)
> Signed-off-by: Joseph Salisbury <joseph.salisbury@canonical.com>

Acked-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>

> ---
>  arch/x86/kernel/eisa.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/x86/kernel/eisa.c b/arch/x86/kernel/eisa.c
> index f260e45..e8c8c5d 100644
> --- a/arch/x86/kernel/eisa.c
> +++ b/arch/x86/kernel/eisa.c
> @@ -7,11 +7,17 @@
>  #include <linux/eisa.h>
>  #include <linux/io.h>
>  
> +#include <xen/xen.h>
> +
>  static __init int eisa_bus_probe(void)
>  {
> -	void __iomem *p = ioremap(0x0FFFD9, 4);
> +	void __iomem *p;
> +
> +	if (xen_pv_domain() && !xen_initial_domain())
> +		return 0;
>  
> -	if (readl(p) == 'E' + ('I'<<8) + ('S'<<16) + ('A'<<24))
> +	p = ioremap(0x0FFFD9, 4);
> +	if (p && readl(p) == 'E' + ('I' << 8) + ('S' << 16) + ('A' << 24))
>  		EISA_bus = 1;
>  	iounmap(p);
>  	return 0;
>

Patch

diff --git a/arch/x86/kernel/eisa.c b/arch/x86/kernel/eisa.c
index f260e45..e8c8c5d 100644
--- a/arch/x86/kernel/eisa.c
+++ b/arch/x86/kernel/eisa.c
@@ -7,11 +7,17 @@ 
 #include <linux/eisa.h>
 #include <linux/io.h>
 
+#include <xen/xen.h>
+
 static __init int eisa_bus_probe(void)
 {
-	void __iomem *p = ioremap(0x0FFFD9, 4);
+	void __iomem *p;
+
+	if (xen_pv_domain() && !xen_initial_domain())
+		return 0;
 
-	if (readl(p) == 'E' + ('I'<<8) + ('S'<<16) + ('A'<<24))
+	p = ioremap(0x0FFFD9, 4);
+	if (p && readl(p) == 'E' + ('I' << 8) + ('S' << 16) + ('A' << 24))
 		EISA_bus = 1;
 	iounmap(p);
 	return 0;