diff options
Diffstat (limited to 'drivers/gpu/drm/udl/udl_fb.c')
| -rw-r--r-- | drivers/gpu/drm/udl/udl_fb.c | 9 | 
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/gpu/drm/udl/udl_fb.c b/drivers/gpu/drm/udl/udl_fb.c index 4d9c3a5d8a4..a029ee39b0c 100644 --- a/drivers/gpu/drm/udl/udl_fb.c +++ b/drivers/gpu/drm/udl/udl_fb.c @@ -593,11 +593,20 @@ udl_fb_user_fb_create(struct drm_device *dev,  	struct drm_gem_object *obj;  	struct udl_framebuffer *ufb;  	int ret; +	uint32_t size;  	obj = drm_gem_object_lookup(dev, file, mode_cmd->handles[0]);  	if (obj == NULL)  		return ERR_PTR(-ENOENT); +	size = mode_cmd->pitches[0] * mode_cmd->height; +	size = ALIGN(size, PAGE_SIZE); + +	if (size > obj->size) { +		DRM_ERROR("object size not sufficient for fb %d %zu %d %d\n", size, obj->size, mode_cmd->pitches[0], mode_cmd->height); +		return ERR_PTR(-ENOMEM); +	} +  	ufb = kzalloc(sizeof(*ufb), GFP_KERNEL);  	if (ufb == NULL)  		return ERR_PTR(-ENOMEM);  |