lkml.org 
[lkml]   [2018]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.16 023/410] fbdev: Fixing arbitrary kernel leak in case FBIOGETCMAP_SPARC in sbusfb_ioctl_helper().
    3.16.57-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Peter Malone <peter.malone@gmail.com>

    commit 250c6c49e3b68756b14983c076183568636e2bde upstream.

    Fixing arbitrary kernel leak in case FBIOGETCMAP_SPARC in
    sbusfb_ioctl_helper().

    'index' is defined as an int in sbusfb_ioctl_helper().
    We retrieve this from the user:
    if (get_user(index, &c->index) ||
    __get_user(count, &c->count) ||
    __get_user(ured, &c->red) ||
    __get_user(ugreen, &c->green) ||
    __get_user(ublue, &c->blue))
    return -EFAULT;

    and then we use 'index' in the following way:
    red = cmap->red[index + i] >> 8;
    green = cmap->green[index + i] >> 8;
    blue = cmap->blue[index + i] >> 8;

    This is a classic information leak vulnerability. 'index' should be
    an unsigned int, given its usage above.

    This patch is straight-forward; it changes 'index' to unsigned int
    in two switch-cases: FBIOGETCMAP_SPARC && FBIOPUTCMAP_SPARC.

    This patch fixes CVE-2018-6412.

    Signed-off-by: Peter Malone <peter.malone@gmail.com>
    Acked-by: Mathieu Malaterre <malat@debian.org>
    Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    drivers/video/fbdev/sbuslib.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    --- a/drivers/video/fbdev/sbuslib.c
    +++ b/drivers/video/fbdev/sbuslib.c
    @@ -121,7 +121,7 @@ int sbusfb_ioctl_helper(unsigned long cm
    unsigned char __user *ured;
    unsigned char __user *ugreen;
    unsigned char __user *ublue;
    - int index, count, i;
    + unsigned int index, count, i;

    if (get_user(index, &c->index) ||
    __get_user(count, &c->count) ||
    @@ -160,7 +160,7 @@ int sbusfb_ioctl_helper(unsigned long cm
    unsigned char __user *ugreen;
    unsigned char __user *ublue;
    struct fb_cmap *cmap = &info->cmap;
    - int index, count, i;
    + unsigned int index, count, i;
    u8 red, green, blue;

    if (get_user(index, &c->index) ||
    \
     
     \ /
      Last update: 2018-06-07 18:11    [W:2.999 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site