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

Commit 78d5eb1b authored by Noralf Trønnes's avatar Noralf Trønnes Committed by Greg Kroah-Hartman
Browse files

UPSTREAM: drm/prime: Fix drm_gem_prime_mmap() stack use



drivers/gpu/drm/drm_prime.c: In function 'drm_gem_prime_mmap':
>> drivers/gpu/drm/drm_prime.c:688:1: warning: the frame size of 1592 bytes is larger than 1024 bytes [-Wframe-larger-than=]

Fix by allocating on the heap.

Fixes: 7698799f9554 ("drm/prime: Add drm_gem_prime_mmap()")
Reported-by: default avatarkbuild test robot <lkp@intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Christian König <christian.koenig@amd.com>
Signed-off-by: default avatarNoralf Trønnes <noralf@tronnes.org>
Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20181121180215.13881-1-noralf@tronnes.org


(cherry picked from commit 10fdb7d2ad4244c668f33706f98d019795fc63c8)
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
Change-Id: If62398a10b65d2fdeb36a2e8eb3a33e942ce8e60
parent b5f2b9e2
Loading
Loading
Loading
Loading
+20 −11
Original line number Diff line number Diff line
@@ -715,24 +715,33 @@ EXPORT_SYMBOL(drm_gem_prime_handle_to_fd);
 */
int drm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
{
	/* Used by drm_gem_mmap() to lookup the GEM object */
	struct drm_file priv = {
		.minor = obj->dev->primary,
	};
	struct file fil = {
		.private_data = &priv,
	};
	struct drm_file *priv;
	struct file *fil;
	int ret;

	ret = drm_vma_node_allow(&obj->vma_node, &priv);
	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
	fil = kzalloc(sizeof(*fil), GFP_KERNEL);
	if (!priv || !fil) {
		ret = -ENOMEM;
		goto out;
	}

	/* Used by drm_gem_mmap() to lookup the GEM object */
	priv->minor = obj->dev->primary;
	fil->private_data = priv;

	ret = drm_vma_node_allow(&obj->vma_node, priv);
	if (ret)
		return ret;
		goto out;

	vma->vm_pgoff += drm_vma_node_start(&obj->vma_node);

	ret = obj->dev->driver->fops->mmap(&fil, vma);
	ret = obj->dev->driver->fops->mmap(fil, vma);

	drm_vma_node_revoke(&obj->vma_node, &priv);
	drm_vma_node_revoke(&obj->vma_node, priv);
out:
	kfree(priv);
	kfree(fil);

	return ret;
}