|
@@ -25,6 +25,7 @@
|
|
|
#include <linux/ratelimit.h>
|
|
|
#include <linux/uidgid.h>
|
|
|
#include <linux/gfp.h>
|
|
|
+#include <linux/overflow.h>
|
|
|
#include <asm/device.h>
|
|
|
|
|
|
struct device;
|
|
@@ -668,9 +669,12 @@ static inline void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp)
|
|
|
static inline void *devm_kmalloc_array(struct device *dev,
|
|
|
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 devm_kmalloc(dev, n * size, flags);
|
|
|
+
|
|
|
+ return devm_kmalloc(dev, bytes, flags);
|
|
|
}
|
|
|
static inline void *devm_kcalloc(struct device *dev,
|
|
|
size_t n, size_t size, gfp_t flags)
|