• Robert Bragg's avatar
    drm/i915: return EACCES for check_cmd() failures · 9bbeaedb
    Robert Bragg authored
    check_cmd() is checking whether a command adheres to certain
    restrictions that ensure it's safe to execute within a privileged batch
    buffer. Returning false implies a privilege problem, not that the
    command is invalid.
    
    The distinction makes the difference between allowing the buffer to be
    executed as an unprivileged batch buffer or returning an EINVAL error to
    userspace without executing anything.
    
    In a case where userspace may want to test whether it can successfully
    write to a register that needs privileges the distinction may be
    important and an EINVAL error may be considered fatal.
    
    In particular this is currently true for Mesa, which includes a test for
    whether OACONTROL can be written too, but Mesa treats any error when
    flushing a batch buffer as fatal, calling exit(1).
    
    As it is currently Mesa can gracefully handle a failure to write to
    OACONTROL if the command parser is disabled, but if we were to remove
    OACONTROL from the parser's whitelist then the returned EINVAL would
    break Mesa applications as they attempt an OACONTROL write.
    
    This bumps the command parser version from 7 to 8, as the change is
    visible to userspace.
    Signed-off-by: default avatarRobert Bragg <robert@sixbynine.org>
    Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
    Reviewed-by: default avatarSourab Gupta <sourab.gupta@intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Link: http://patchwork.freedesktop.org/patch/msgid/20161107194957.3385-4-robert@sixbynine.org
    9bbeaedb
i915_cmd_parser.c 39.7 KB