[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20220310015306.445359-2-ammarfaizi2@gnuweeb.org>
Date: Thu, 10 Mar 2022 08:53:05 +0700
From: Ammar Faizi <ammarfaizi2@...weeb.org>
To: Borislav Petkov <bp@...en8.de>,
Thomas Gleixner <tglx@...utronix.de>
Cc: Ammar Faizi <ammarfaizi2@...weeb.org>,
Alviro Iskandar Setiawan <alviro.iskandar@...il.com>,
Alviro Iskandar Setiawan <alviro.iskandar@...weeb.org>,
Dave Hansen <dave.hansen@...ux.intel.com>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
"H. Peter Anvin" <hpa@...or.com>, Ingo Molnar <mingo@...hat.com>,
Tony Luck <tony.luck@...el.com>,
Yazen Ghannam <yazen.ghannam@....com>,
linux-edac@...r.kernel.org, linux-kernel@...r.kernel.org,
stable@...r.kernel.org, gwml@...r.gnuweeb.org, x86@...nel.org,
David Laight <David.Laight@...LAB.COM>,
Jiri Hladky <hladky.jiri@...glemail.com>
Subject: [PATCH v5 1/2] x86/delay: Fix the wrong asm constraint in `delay_loop()`
The asm constraint does not reflect that the asm statement can modify
the value of @loops. But the asm statement in delay_loop() does modify
the @loops.
Specifiying the wrong constraint may lead to undefined behavior, it may
clobber random stuff (e.g. local variable, important temporary value in
regs, etc.).
Fix this by changing the constraint from "a" (as an input) to "+a" (as
an input and output).
Cc: David Laight <David.Laight@...LAB.COM>
Cc: Thomas Gleixner <tglx@...utronix.de>
Cc: Ingo Molnar <mingo@...hat.com>
Cc: Borislav Petkov <bp@...en8.de>
Cc: Dave Hansen <dave.hansen@...ux.intel.com>
Cc: "H. Peter Anvin" <hpa@...or.com>
Cc: Jiri Hladky <hladky.jiri@...glemail.com>
Cc: stable@...r.kernel.org # v2.6.27+
Fixes: e01b70ef3eb ("x86: fix bug in arch/i386/lib/delay.c file, delay_loop function")
Signed-off-by: Ammar Faizi <ammarfaizi2@...weeb.org>
---
arch/x86/lib/delay.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/x86/lib/delay.c b/arch/x86/lib/delay.c
index 65d15df6212d..0e65d00e2339 100644
--- a/arch/x86/lib/delay.c
+++ b/arch/x86/lib/delay.c
@@ -54,8 +54,8 @@ static void delay_loop(u64 __loops)
" jnz 2b \n"
"3: dec %0 \n"
- : /* we don't need output */
- :"a" (loops)
+ : "+a" (loops)
+ :
);
}
--
2.32.0
Powered by blists - more mailing lists