• Thierry Reding's avatar
    drm/tegra: Make job submission 64-bit safe · 961e3bea
    Thierry Reding authored
    Job submission currently relies on the fact that struct drm_tegra_reloc
    and struct host1x_reloc are the same size and uses a simple call to the
    copy_from_user() function to copy them to kernel space. This causes the
    handle to be stored in the buffer object field, which then needs a cast
    to a 32 bit integer to resolve it to a proper buffer object pointer and
    store it back in the buffer object field.
    
    On 64-bit architectures that will no longer work, since pointers are 64
    bits wide whereas handles will remain 32 bits. This causes the sizes of
    both structures to because different and copying will no longer work.
    
    Fix this by adding a new function, host1x_reloc_get_user(), that copies
    the structures field by field.
    
    While at it, use substructures for the command and target buffers in
    struct host1x_reloc for better readability. Also use unsized types to
    make it more obvious that this isn't part of userspace ABI.
    Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
    961e3bea
job.c 13.1 KB