lkml.org 
[lkml]   [2018]   [Dec]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.16 044/328] mtdchar: fix overflows in adjustment of `count`
    3.16.62-rc1 review patch.  If anyone has any objections, please let me know.

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

    From: Jann Horn <jannh@google.com>

    commit 6c6bc9ea84d0008024606bf5ba10519e20d851bf upstream.

    The first checks in mtdchar_read() and mtdchar_write() attempt to limit
    `count` such that `*ppos + count <= mtd->size`. However, they ignore the
    possibility of `*ppos > mtd->size`, allowing the calculation of `count` to
    wrap around. `mtdchar_lseek()` prevents seeking beyond mtd->size, but the
    pread/pwrite syscalls bypass this.

    I haven't found any codepath on which this actually causes dangerous
    behavior, but it seems like a sensible change anyway.

    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Jann Horn <jannh@google.com>
    Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    drivers/mtd/mtdchar.c | 10 +++++++---
    1 file changed, 7 insertions(+), 3 deletions(-)

    --- a/drivers/mtd/mtdchar.c
    +++ b/drivers/mtd/mtdchar.c
    @@ -190,8 +190,12 @@ static ssize_t mtdchar_read(struct file

    pr_debug("MTD_read\n");

    - if (*ppos + count > mtd->size)
    - count = mtd->size - *ppos;
    + if (*ppos + count > mtd->size) {
    + if (*ppos < mtd->size)
    + count = mtd->size - *ppos;
    + else
    + count = 0;
    + }

    if (!count)
    return 0;
    @@ -276,7 +280,7 @@ static ssize_t mtdchar_write(struct file

    pr_debug("MTD_write\n");

    - if (*ppos == mtd->size)
    + if (*ppos >= mtd->size)
    return -ENOSPC;

    if (*ppos + count > mtd->size)
    \
     
     \ /
      Last update: 2018-12-09 23:26    [W:4.064 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site