lkml.org 
[lkml]   [2016]   [May]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/3] drm/fb_helper: Fix references to dev->mode_config.num_connector
    Date
    During boot, MST hotplugs are generally expected (even if no physical
    hotplugging occurs) and result in DRM's connector topology changing.
    This means that using num_connector from the current mode configuration
    can lead to the number of connectors changing under us. This can lead to
    some nasty scenarios in fbcon:

    - We allocate an array to the size of dev->mode_config.num_connectors.
    - MST hotplug occurs, dev->mode_config.num_connectors gets incremented.
    - We try to loop through each element in the array using the new value
    of dev->mode_config.num_connectors, and end up going out of bounds
    since dev->mode_config.num_connectors is now larger then the array we
    allocated.

    fb_helper->connector_count however, will always remain consistent while
    we do a modeset in fb_helper.

    Cc: stable@vger.kernel.org
    Signed-off-by: Lyude <cpaul@redhat.com>
    ---
    drivers/gpu/drm/drm_fb_helper.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
    index 855108e..15204c0 100644
    --- a/drivers/gpu/drm/drm_fb_helper.c
    +++ b/drivers/gpu/drm/drm_fb_helper.c
    @@ -1914,7 +1914,7 @@ static int drm_pick_crtcs(struct drm_fb_helper *fb_helper,
    if (modes[n] == NULL)
    return best_score;

    - crtcs = kzalloc(dev->mode_config.num_connector *
    + crtcs = kzalloc(fb_helper->connector_count *
    sizeof(struct drm_fb_helper_crtc *), GFP_KERNEL);
    if (!crtcs)
    return best_score;
    @@ -1960,7 +1960,7 @@ static int drm_pick_crtcs(struct drm_fb_helper *fb_helper,
    if (score > best_score) {
    best_score = score;
    memcpy(best_crtcs, crtcs,
    - dev->mode_config.num_connector *
    + fb_helper->connector_count *
    sizeof(struct drm_fb_helper_crtc *));
    }
    }
    --
    2.5.5
    \
     
     \ /
      Last update: 2016-05-04 17:41    [W:3.515 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site