Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fbe0efb8 authored by Kristian Høgsberg's avatar Kristian Høgsberg Committed by Dave Airlie
Browse files

drm_calloc_large: check right size, check integer overflow, use GFP_ZERO



Previously we would check size instead of size * nmemb, and so would
never hit the vmalloc path.  Also add integer overflow check as in kcalloc,
and allocate GFP_ZERO pages instead of memset()ing them.

Signed-off-by: default avatarKristian Høgsberg <krh@redhat.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 61f11699
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -1573,18 +1573,14 @@ static __inline__ void *drm_calloc(size_t nmemb, size_t size, int area)

static __inline__ void *drm_calloc_large(size_t nmemb, size_t size)
{
	u8 *addr;

	if (size <= PAGE_SIZE)
	if (size * nmemb <= PAGE_SIZE)
	    return kcalloc(nmemb, size, GFP_KERNEL);

	addr = vmalloc(nmemb * size);
	if (!addr)
	if (size != 0 && nmemb > ULONG_MAX / size)
		return NULL;

	memset(addr, 0, nmemb * size);

	return addr;
	return __vmalloc(size * nmemb,
			 GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO, PAGE_KERNEL);
}

static __inline void drm_free_large(void *ptr)