• Mathias Krause's avatar
    drm/i915: Register engines early to avoid type confusion · 2b562f03
    Mathias Krause authored
    Commit 1ec23ed7 ("drm/i915: Use uabi engines for the default engine
    map") switched from using for_each_engine() to for_each_uabi_engine() to
    iterate over the user engines. While this seems to be a sensible change,
    it's only safe to do when the engines are actually chained using the
    rb-tree structure which is not the case during early driver
    initialization where it can be either a lock-less list or regular
    double-linked list.
    
    In fact, the modesetting initialization code may end up calling
    default_engines() through the fb helper code while the engines list
    is still llist_node-based:
    
      i915_driver_probe() ->
        intel_display_driver_probe() ->
          intel_fbdev_init() ->
            drm_fb_helper_init() ->
              drm_client_init() ->
                drm_client_open() ->
                  drm_file_alloc() ->
                    i915_driver_open() ->
                      i915_gem_open() ->
                        i915_gem_context_open() ->
                          i915_gem_create_context() ->
                            default_engines()
    
    Using for_each_uabi_engine() in default_engines() is therefore wrong, as
    it would try to interpret the llist as rb-tree, making it find no engine
    at all, as the rb_left and rb_right members will still be NULL, as they
    haven't been initialized yet.
    
    To fix this type confusion register the engines earlier and at the same
    time reduce the amount of code that has to deal with the intermediate
    llist state.
    
    Reported-by: sanity checks in grsecurity
    Suggested-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Fixes: 1ec23ed7 ("drm/i915: Use uabi engines for the default engine map")
    Signed-off-by: default avatarMathias Krause <minipli@grsecurity.net>
    Cc: Jonathan Cavitt <jonathan.cavitt@intel.com>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230928182019.10256-2-minipli@grsecurity.net
    [tursulin: fixed commit tag typo]
    2b562f03
i915_gem.c 35 KB