|
@@ -25,6 +25,7 @@
|
|
|
#include <linux/err.h>
|
|
|
#include <linux/page_ref.h>
|
|
|
#include <linux/memremap.h>
|
|
|
+#include <linux/overflow.h>
|
|
|
|
|
|
struct mempolicy;
|
|
|
struct anon_vma;
|
|
@@ -560,10 +561,12 @@ static inline void *kvzalloc(size_t size, gfp_t flags)
|
|
|
|
|
|
static inline void *kvmalloc_array(size_t n, size_t size, gfp_t flags)
|
|
|
{
|
|
|
- if (size != 0 && n > SIZE_MAX / size)
|
|
|
+ size_t bytes;
|
|
|
+
|
|
|
+ if (unlikely(check_mul_overflow(n, size, &bytes)))
|
|
|
return NULL;
|
|
|
|
|
|
- return kvmalloc(n * size, flags);
|
|
|
+ return kvmalloc(bytes, flags);
|
|
|
}
|
|
|
|
|
|
extern void kvfree(const void *addr);
|