Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: kbuild test robot <lkp@intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Christian König <christian.koenig@amd.com>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20181121180215.13881-1-noralf@tronnes.org

+20 -11
+20 -11
drivers/gpu/drm/drm_prime.c
··· 663 663 */ 664 664 int drm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) 665 665 { 666 - /* Used by drm_gem_mmap() to lookup the GEM object */ 667 - struct drm_file priv = { 668 - .minor = obj->dev->primary, 669 - }; 670 - struct file fil = { 671 - .private_data = &priv, 672 - }; 666 + struct drm_file *priv; 667 + struct file *fil; 673 668 int ret; 674 669 675 - ret = drm_vma_node_allow(&obj->vma_node, &priv); 670 + priv = kzalloc(sizeof(*priv), GFP_KERNEL); 671 + fil = kzalloc(sizeof(*fil), GFP_KERNEL); 672 + if (!priv || !fil) { 673 + ret = -ENOMEM; 674 + goto out; 675 + } 676 + 677 + /* Used by drm_gem_mmap() to lookup the GEM object */ 678 + priv->minor = obj->dev->primary; 679 + fil->private_data = priv; 680 + 681 + ret = drm_vma_node_allow(&obj->vma_node, priv); 676 682 if (ret) 677 - return ret; 683 + goto out; 678 684 679 685 vma->vm_pgoff += drm_vma_node_start(&obj->vma_node); 680 686 681 - ret = obj->dev->driver->fops->mmap(&fil, vma); 687 + ret = obj->dev->driver->fops->mmap(fil, vma); 682 688 683 - drm_vma_node_revoke(&obj->vma_node, &priv); 689 + drm_vma_node_revoke(&obj->vma_node, priv); 690 + out: 691 + kfree(priv); 692 + kfree(fil); 684 693 685 694 return ret; 686 695 }