lkml.org 
[lkml]   [2019]   [Apr]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 58/91] bcache: fix input overflow to cache set sysfs file io_error_halflife
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

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

    [ Upstream commit a91fbda49f746119828f7e8ad0f0aa2ab0578f65 ]

    Cache set sysfs entry io_error_halflife is used to set c->error_decay.
    c->error_decay is in type unsigned int, and it is converted by
    strtoul_or_return(), therefore overflow to c->error_decay is possible
    for a large input value.

    This patch fixes the overflow by using strtoul_safe_clamp() to convert
    input string to an unsigned long value in range [0, UINT_MAX], then
    divides by 88 and set it to c->error_decay.

    Signed-off-by: Coly Li <colyli@suse.de>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/md/bcache/sysfs.c | 13 +++++++++++--
    1 file changed, 11 insertions(+), 2 deletions(-)

    diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c
    index 5a5c1f1bd8a5..87daccbbc61b 100644
    --- a/drivers/md/bcache/sysfs.c
    +++ b/drivers/md/bcache/sysfs.c
    @@ -645,8 +645,17 @@ STORE(__bch_cache_set)
    c->error_limit = strtoul_or_return(buf) << IO_ERROR_SHIFT;

    /* See count_io_errors() for why 88 */
    - if (attr == &sysfs_io_error_halflife)
    - c->error_decay = strtoul_or_return(buf) / 88;
    + if (attr == &sysfs_io_error_halflife) {
    + unsigned long v = 0;
    + ssize_t ret;
    +
    + ret = strtoul_safe_clamp(buf, v, 0, UINT_MAX);
    + if (!ret) {
    + c->error_decay = v / 88;
    + return size;
    + }
    + return ret;
    + }

    sysfs_strtoul(journal_delay_ms, c->journal_delay_ms);
    sysfs_strtoul(verify, c->verify);
    --
    2.19.1


    \
     
     \ /
      Last update: 2019-04-04 11:54    [W:4.061 / U:0.484 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site