lkml.org 
[lkml]   [2020]   [Dec]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH net] ethtool: fix stack overflow in ethnl_parse_bitset()
    Date
    Syzbot reported a stack overflow in bitmap_from_arr32() called from
    ethnl_parse_bitset() when bitset from netlink message is longer than
    target bitmap length. While ethnl_compact_sanity_checks() makes sure that
    trailing part is all zeros (i.e. the request does not try to touch bits
    kernel does not recognize), we also need to cap change_bits to nbits so
    that we don't try to write past the prepared bitmaps.

    Fixes: 88db6d1e4f62 ("ethtool: add ethnl_parse_bitset() helper")
    Reported-by: syzbot+9d39fa49d4df294aab93@syzkaller.appspotmail.com
    Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
    ---
    net/ethtool/bitset.c | 2 ++
    1 file changed, 2 insertions(+)

    diff --git a/net/ethtool/bitset.c b/net/ethtool/bitset.c
    index 1fb3603d92ad..0515d6604b3b 100644
    --- a/net/ethtool/bitset.c
    +++ b/net/ethtool/bitset.c
    @@ -628,6 +628,8 @@ int ethnl_parse_bitset(unsigned long *val, unsigned long *mask,
    return ret;

    change_bits = nla_get_u32(tb[ETHTOOL_A_BITSET_SIZE]);
    + if (change_bits > nbits)
    + change_bits = nbits;
    bitmap_from_arr32(val, nla_data(tb[ETHTOOL_A_BITSET_VALUE]),
    change_bits);
    if (change_bits < nbits)
    --
    2.29.2
    \
     
     \ /
      Last update: 2020-12-08 23:15    [W:3.715 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site