linux/debian/patches/bugfix/m68k/type-fix-div64.patch

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; \
})