lkml.org 
[lkml]   [2012]   [Apr]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[ 25/59] drm: Validate requested virtual size against allocated fb size
    3.2-stable review patch.  If anyone has any objections, please let me know.

    ------------------
    From: Chris Wilson <chris@chris-wilson.co.uk>

    commit 62fb376e214d3c1bfdf6fbb77dac162f6da04d7e upstream.

    mplayer -vo fbdev tries to create a screen that is twice as tall as the
    allocated framebuffer for "doublebuffering". By default, and all in-tree
    users, only sufficient memory is allocated and mapped to satisfy the
    smallest framebuffer and the virtual size is no larger than the actual.
    For these users, we should therefore reject any userspace request to
    create a screen that requires a buffer larger than the framebuffer
    originally allocated.

    References: https://bugs.freedesktop.org/show_bug.cgi?id=38138
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    Signed-off-by: Dave Airlie <airlied@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/gpu/drm/drm_fb_helper.c | 8 ++++++--
    1 file changed, 6 insertions(+), 2 deletions(-)
    --- a/drivers/gpu/drm/drm_fb_helper.c
    +++ b/drivers/gpu/drm/drm_fb_helper.c
    @@ -610,9 +610,13 @@ int drm_fb_helper_check_var(struct fb_va
    return -EINVAL;

    /* Need to resize the fb object !!! */
    - if (var->bits_per_pixel > fb->bits_per_pixel || var->xres > fb->width || var->yres > fb->height) {
    + if (var->bits_per_pixel > fb->bits_per_pixel ||
    + var->xres > fb->width || var->yres > fb->height ||
    + var->xres_virtual > fb->width || var->yres_virtual > fb->height) {
    DRM_DEBUG("fb userspace requested width/height/bpp is greater than current fb "
    - "object %dx%d-%d > %dx%d-%d\n", var->xres, var->yres, var->bits_per_pixel,
    + "request %dx%d-%d (virtual %dx%d) > %dx%d-%d\n",
    + var->xres, var->yres, var->bits_per_pixel,
    + var->xres_virtual, var->yres_virtual,
    fb->width, fb->height, fb->bits_per_pixel);
    return -EINVAL;
    }



    \
     
     \ /
      Last update: 2012-04-12 01:25    [from the cache]
    ©2003-2011 Jasper Spaans