diff mbox

[1/2] KVM: s390: sthyi: fix sthyi inline assembly

Message ID 1503318465-19013-2-git-send-email-borntraeger@de.ibm.com (mailing list archive)
State New, archived
Headers show

Commit Message

Christian Borntraeger Aug. 21, 2017, 12:27 p.m. UTC
From: Heiko Carstens <heiko.carstens@de.ibm.com>

The sthyi inline assembly misses register r3 within the clobber
list. The sthyi instruction will always write a return code to
register "R2+1", which in this case would be r3. Due to that we may
have register corruption and see host crashes or data corruption
depending on how gcc decided to allocate and use registers during
compile time.

Fixes: 95ca2cb57985 ("KVM: s390: Add sthyi emulation")
Cc: <stable@vger.kernel.org> # 4.8+
Reviewed-by: Janosch Frank <frankja@linux.vnet.ibm.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 arch/s390/kvm/sthyi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

David Hildenbrand Aug. 21, 2017, 12:44 p.m. UTC | #1
On 21.08.2017 14:27, Christian Borntraeger wrote:
> From: Heiko Carstens <heiko.carstens@de.ibm.com>
> 
> The sthyi inline assembly misses register r3 within the clobber
> list. The sthyi instruction will always write a return code to
> register "R2+1", which in this case would be r3. Due to that we may
> have register corruption and see host crashes or data corruption
> depending on how gcc decided to allocate and use registers during
> compile time.
> 
> Fixes: 95ca2cb57985 ("KVM: s390: Add sthyi emulation")
> Cc: <stable@vger.kernel.org> # 4.8+
> Reviewed-by: Janosch Frank <frankja@linux.vnet.ibm.com>
> Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
> ---
>  arch/s390/kvm/sthyi.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/s390/kvm/sthyi.c b/arch/s390/kvm/sthyi.c
> index 926b524..2773a2f 100644
> --- a/arch/s390/kvm/sthyi.c
> +++ b/arch/s390/kvm/sthyi.c
> @@ -394,7 +394,7 @@ static int sthyi(u64 vaddr)
>  		"srl     %[cc],28\n"
>  		: [cc] "=d" (cc)
>  		: [code] "d" (code), [addr] "a" (addr)
> -		: "memory", "cc");
> +		: "3", "memory", "cc");
>  	return cc;
>  }
>  
> 

Reviewed-by: David Hildenbrand <david@redhat.com>
Cornelia Huck Aug. 21, 2017, 1:07 p.m. UTC | #2
On Mon, 21 Aug 2017 14:27:44 +0200
Christian Borntraeger <borntraeger@de.ibm.com> wrote:

> From: Heiko Carstens <heiko.carstens@de.ibm.com>
> 
> The sthyi inline assembly misses register r3 within the clobber
> list. The sthyi instruction will always write a return code to
> register "R2+1", which in this case would be r3. Due to that we may
> have register corruption and see host crashes or data corruption
> depending on how gcc decided to allocate and use registers during
> compile time.
> 
> Fixes: 95ca2cb57985 ("KVM: s390: Add sthyi emulation")
> Cc: <stable@vger.kernel.org> # 4.8+
> Reviewed-by: Janosch Frank <frankja@linux.vnet.ibm.com>
> Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
> ---
>  arch/s390/kvm/sthyi.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/s390/kvm/sthyi.c b/arch/s390/kvm/sthyi.c
> index 926b524..2773a2f 100644
> --- a/arch/s390/kvm/sthyi.c
> +++ b/arch/s390/kvm/sthyi.c
> @@ -394,7 +394,7 @@ static int sthyi(u64 vaddr)
>  		"srl     %[cc],28\n"
>  		: [cc] "=d" (cc)
>  		: [code] "d" (code), [addr] "a" (addr)
> -		: "memory", "cc");
> +		: "3", "memory", "cc");
>  	return cc;
>  }
>  

Reviewed-by: Cornelia Huck <cohuck@redhat.com>
diff mbox

Patch

diff --git a/arch/s390/kvm/sthyi.c b/arch/s390/kvm/sthyi.c
index 926b524..2773a2f 100644
--- a/arch/s390/kvm/sthyi.c
+++ b/arch/s390/kvm/sthyi.c
@@ -394,7 +394,7 @@  static int sthyi(u64 vaddr)
 		"srl     %[cc],28\n"
 		: [cc] "=d" (cc)
 		: [code] "d" (code), [addr] "a" (addr)
-		: "memory", "cc");
+		: "3", "memory", "cc");
 	return cc;
 }