39 lines
1.3 KiB
Diff
39 lines
1.3 KiB
Diff
From: Andreas Schwab <schwab@linux-m68k.org>
|
|
Message-ID: <871u633t27.fsf@igel.home>
|
|
Date: Fri, 09 Aug 2013 15:14:08 +0200
|
|
Subject: [PATCH] m68k: truncate base in do_div
|
|
Origin: http://thread.gmane.org/gmane.linux.ports.m68k/5008
|
|
|
|
Explicitly truncate the second operand of do_div to 32 bits to guard
|
|
against bogus code calling it with a 64bit divisor.
|
|
|
|
Signed-off-by: Andreas Schwab <schwab@linux-m68k.org>
|
|
---
|
|
arch/m68k/include/asm/div64.h | 9 +++++----
|
|
1 file changed, 5 insertions(+), 4 deletions(-)
|
|
|
|
--- a/arch/m68k/include/asm/div64.h
|
|
+++ b/arch/m68k/include/asm/div64.h
|
|
@@ -15,16 +15,17 @@
|
|
unsigned long long n64; \
|
|
} __n; \
|
|
unsigned long __rem, __upper; \
|
|
+ unsigned long __base = (base); \
|
|
\
|
|
__n.n64 = (n); \
|
|
if ((__upper = __n.n32[0])) { \
|
|
asm ("divul.l %2,%1:%0" \
|
|
- : "=d" (__n.n32[0]), "=d" (__upper) \
|
|
- : "d" (base), "0" (__n.n32[0])); \
|
|
+ : "=d" (__n.n32[0]), "=d" (__upper) \
|
|
+ : "d" (__base), "0" (__n.n32[0])); \
|
|
} \
|
|
asm ("divu.l %2,%1:%0" \
|
|
- : "=d" (__n.n32[1]), "=d" (__rem) \
|
|
- : "d" (base), "1" (__upper), "0" (__n.n32[1])); \
|
|
+ : "=d" (__n.n32[1]), "=d" (__rem) \
|
|
+ : "d" (__base), "1" (__upper), "0" (__n.n32[1])); \
|
|
(n) = __n.n64; \
|
|
__rem; \
|
|
})
|