If second parameter passed to this function was 64 then it silently
truncates to 32 bits. Catch such situation.

Signed-off-by: Anatol Pomozov <anatol.pomo...@gmail.com>
---
 include/asm-generic/div64.h | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/include/asm-generic/div64.h b/include/asm-generic/div64.h
index 8f4e319..84339a0 100644
--- a/include/asm-generic/div64.h
+++ b/include/asm-generic/div64.h
@@ -17,6 +17,7 @@
  *       beware of side effects!
  */
 
+#include <linux/bug.h>
 #include <linux/types.h>
 #include <linux/compiler.h>
 
@@ -25,6 +26,7 @@
 # define do_div(n,base) ({                                     \
        uint32_t __base = (base);                               \
        uint32_t __rem;                                         \
+       BUG_ON(sizeof(base) > 4 && base >= (1UL<<32));          \
        __rem = ((uint64_t)(n)) % __base;                       \
        (n) = ((uint64_t)(n)) / __base;                         \
        __rem;                                                  \
@@ -40,6 +42,7 @@ extern uint32_t __div64_32(uint64_t *dividend, uint32_t 
divisor);
 # define do_div(n,base) ({                             \
        uint32_t __base = (base);                       \
        uint32_t __rem;                                 \
+       BUG_ON(sizeof(base) > 4 && base >= (1UL<<32));  \
        (void)(((typeof((n)) *)0) == ((uint64_t *)0));  \
        if (likely(((n) >> 32) == 0)) {                 \
                __rem = (uint32_t)(n) % __base;         \
-- 
1.8.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to