NULL ptr dereference in i915_gem_alloc_object()

Daniel Vetter daniel.vetter at ffwll.ch
Sun Jan 19 03:36:20 PST 2014


On Sun, Jan 19, 2014 at 2:28 AM, Linus Torvalds
<torvalds at linux-foundation.org> wrote:
> Testing running out of file descriptors shows a NULL pointer
> dereference in i915_gem_alloc_object() because base.filp ends up being
> NULL. So the line
>
>     mapping = file_inode(obj->base.filp)->i_mapping;
>
> will cause an oops. The call chain is
>
> SyS_ioctl ->
>   do_vfs_ioctl ->
>     drm_ioctl ->
>       i915_gem_create_ioctl ->
>         i915_gem_create ->
>           i915_gem_alloc_object
>
> Now, some functions do test "base.filp" for NULL (see for example
> i915_gem_pread_ioctl()) so clearly people know that the filp may not
> exist. But that path does not.

This is unrelated since only shmem backed objects (should) have
base.filp set, but other gem objects (backed by stolen mem or from
dma-buf) don't have that. A bunch of gem ioclts aren't supported with
these special objects (like pread/pwrite) and so we check for that and
bail out.

> Comments? Patches even?

If we fail to allocate the shmem file drm_gem_object_init should fail
and i915_gem_alloc_object should bail out early. Apparently that
doesn't work as it should. On a quick check it's not the lack of
_OR_NULL in drm_gem_object_init so I'm not really sure what's going on
here. I'll try to reproduce this here meanwhile.

Adding dri-devel since other gem drivers should be equally affected.

Cheers, Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch


More information about the dri-devel mailing list