1. 14 3月, 2020 6 次提交
  2. 12 3月, 2020 9 次提交
    • S
      net/hinic: driver code compliance rectification · 200f5d7b
      Shaozhengchao 提交于
      driver inclusion
      category:bugfix
      bugzilla:4472
      CVE:NA
      
      -----------------------------------------------------------------------
      
      hinic driver code compliance rectification.
      1.Process return value of snprintf and sscanf function.
      2.Modify devil number.
      Signed-off-by: NShaozhengchao <shaozhengchao@huawei.com>
      Reviewed-by: NLuoshaokai <luoshaokai@huawei.com>
      Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
      200f5d7b
    • S
      net/hinic: Solve the problem that the network card hangs when receiving the skb which frag_size=0 · 2b34ce42
      Shaozhengchao 提交于
      driver inclusion
      category:bugfix
      bugzilla:31091
      CVE:NA
      
      -----------------------------------------------------------------------
      
      To solve the problem that the network card hangs when receiving the skb which frag_size=0
      
      In order to solve this problem, hinic driver adds a judgment on the legality of frag_size
      in tx process. If size of lastest frags are all zero, hinic driver will ignore this
      frags. If size of some frags in the middle is zero, hinic driver will drop this skb.
      Signed-off-by: NShaozhengchao <shaozhengchao@huawei.com>
      Reviewed-by: NLuoshaokai <luoshaokai@huawei.com>
      Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
      2b34ce42
    • S
      net: hns3: adds support for reading module eeprom info · fe7fe090
      Shengzui You 提交于
      driver inclusion
      category: feature
      bugzilla: NA
      CVE: NA
      
      --------------------------------
      
      This patch adds support for reading the optical module eeprom
      info via "ethtool -m".
      Signed-off-by: NShengzui You <youshengzui@huawei.com>
      Reviewed-by: NWeiwei Deng <dengweiwei@huawei.com>
      Reviewed-by: NZhaohui Zhong <zhongzhaohui@huawei.com>
      Reviewed-by: NJunxing Chen <chenjunxin1@huawei.com>
      Reviewed-by: NZhong Zhaohui <zhongzhaohui@huawei.com>
      Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
      fe7fe090
    • S
      net: hns3: update hns3 version to 1.9.37.1 · 8ddbd6dc
      Shengzui You 提交于
      driver inclusion
      category: feature
      bugzilla: NA
      CVE: NA
      
      -------------------------
      
      This patch is used to modify hns3 version to 1.9.37.1
      Signed-off-by: NShengzui You <youshengzui@huawei.com>
      Reviewed-by: NWeiwei Deng <dengweiwei@huawei.com>
      Reviewed-by: NZhaohui Zhong <zhongzhaohui@huawei.com>
      Reviewed-by: NJunxing Chen <chenjunxin1@huawei.com>
      Reviewed-by: NZhong Zhaohui <zhongzhaohui@huawei.com>
      Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
      8ddbd6dc
    • Q
      btrfs: tree-checker: Remove comprehensive root owner check · 217d3ab7
      Qu Wenruo 提交于
      mainline inclusion
      from mainline-5.2-rc1
      commit ff2ac107fae2440b6877c615c0ac788d2a106ed7
      category: bugfix
      bugzilla: NA
      CVE: CVE-2019-19036
      ---------------------------
      
      Commit 1ba98d08 ("Btrfs: detect corruption when non-root leaf has
      zero item") introduced comprehensive root owner checker.
      
      However it's pretty expensive tree search to locate the owner root,
      especially when it get reused by mandatory read and write time
      tree-checker.
      
      This patch will remove that check, and completely rely on owner based
      empty leaf check, which is much faster and still works fine for most
      case.
      
      And since we skip the old root owner check, now write time tree check
      can be merged with btrfs_check_leaf_full().
      Signed-off-by: NQu Wenruo <wqu@suse.com>
      Signed-off-by: NDavid Sterba <dsterba@suse.com>
      Conflict:
      	fs/btrfs/tree-checker.c
      Signed-off-by: NYufen Yu <yuyufen@huawei.com>
      Reviewed-by: Nzhangyi (F) <yi.zhang@huawei.com>
      Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
      217d3ab7
    • Z
      xfs: add agf freeblocks verify in xfs_agf_verify · 095cb0e6
      Zheng Bin 提交于
      mainline inclusion
      from mainline-v5.6
      commit d0c7feaf87678371c2c09b3709400be416b2dc62
      category: bugfix
      bugzilla: 30215
      CVE: NA
      
      ---------------------------
      
      We recently used fuzz(hydra) to test XFS and automatically generate
      tmp.img(XFS v5 format, but some metadata is wrong)
      
      xfs_repair information(just one AG):
      agf_freeblks 0, counted 3224 in ag 0
      agf_longest 536874136, counted 3224 in ag 0
      sb_fdblocks 613, counted 3228
      
      Test as follows:
      mount tmp.img tmpdir
      cp file1M tmpdir
      sync
      
      In 4.19-stable, sync will stuck, the reason is:
      xfs_mountfs
        xfs_check_summary_counts
          if ((!xfs_sb_version_haslazysbcount(&mp->m_sb) ||
             XFS_LAST_UNMOUNT_WAS_CLEAN(mp)) &&
             !xfs_fs_has_sickness(mp, XFS_SICK_FS_COUNTERS))
      	return 0;  -->just return, incore sb_fdblocks still be 613
          xfs_initialize_perag_data
      
      cp file1M tmpdir -->ok(write file to pagecache)
      sync -->stuck(write pagecache to disk)
      xfs_map_blocks
        xfs_iomap_write_allocate
          while (count_fsb != 0) {
            nimaps = 0;
            while (nimaps == 0) { --> endless loop
               nimaps = 1;
               xfs_bmapi_write(..., &nimaps) --> nimaps becomes 0 again
      xfs_bmapi_write
        xfs_bmap_alloc
          xfs_bmap_btalloc
            xfs_alloc_vextent
              xfs_alloc_fix_freelist
                xfs_alloc_space_available -->fail(agf_freeblks is 0)
      
      In linux-next, sync not stuck, cause commit c2b3164320b5 ("xfs:
      use the latest extent at writeback delalloc conversion time") remove
      the above while, dmesg is as follows:
      [   55.250114] XFS (loop0): page discard on page ffffea0008bc7380, inode 0x1b0c, offset 0.
      
      Users do not know why this page is discard, the better soultion is:
      1. Like xfs_repair, make sure sb_fdblocks is equal to counted
      (xfs_initialize_perag_data did this, who is not called at this mount)
      2. Add agf verify, if fail, will tell users to repair
      
      This patch use the second soultion.
      Signed-off-by: NZheng Bin <zhengbin13@huawei.com>
      Signed-off-by: NRen Xudong <renxudong1@huawei.com>
      Reviewed-by: NDarrick J. Wong <darrick.wong@oracle.com>
      Signed-off-by: NDarrick J. Wong <darrick.wong@oracle.com>
      Signed-off-by: NZheng Bin <zhengbin13@huawei.com>
      Reviewed-by: Nzhangyi (F) <yi.zhang@huawei.com>
      Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
      095cb0e6
    • C
      blktrace: fix dereference after null check · 3b118e3b
      Cengiz Can 提交于
      mainline inclusion
      from mainline-v5.6-rc4
      commit 153031a301bb07194e9c37466cfce8eacb977621
      category: bugfix
      bugzilla: 13690
      CVE: CVE-2019-19768
      
      -------------------------------------------------
      
      There was a recent change in blktrace.c that added a RCU protection to
      `q->blk_trace` in order to fix a use-after-free issue during access.
      
      However the change missed an edge case that can lead to dereferencing of
      `bt` pointer even when it's NULL:
      
      Coverity static analyzer marked this as a FORWARD_NULL issue with CID
      1460458.
      
      ```
      /kernel/trace/blktrace.c: 1904 in sysfs_blk_trace_attr_store()
      1898            ret = 0;
      1899            if (bt == NULL)
      1900                    ret = blk_trace_setup_queue(q, bdev);
      1901
      1902            if (ret == 0) {
      1903                    if (attr == &dev_attr_act_mask)
      >>>     CID 1460458:  Null pointer dereferences  (FORWARD_NULL)
      >>>     Dereferencing null pointer "bt".
      1904                            bt->act_mask = value;
      1905                    else if (attr == &dev_attr_pid)
      1906                            bt->pid = value;
      1907                    else if (attr == &dev_attr_start_lba)
      1908                            bt->start_lba = value;
      1909                    else if (attr == &dev_attr_end_lba)
      ```
      
      Added a reassignment with RCU annotation to fix the issue.
      
      Fixes: c780e86dd48 ("blktrace: Protect q->blk_trace with RCU")
      Cc: stable@vger.kernel.org
      Reviewed-by: NMing Lei <ming.lei@redhat.com>
      Reviewed-by: NBob Liu <bob.liu@oracle.com>
      Reviewed-by: NSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: NCengiz Can <cengiz@kernel.wtf>
      Signed-off-by: NJens Axboe <axboe@kernel.dk>
      Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
      Reviewed-by: Nzhangyi (F) <yi.zhang@huawei.com>
      Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
      3b118e3b
    • J
      blktrace: Protect q->blk_trace with RCU · 40b51620
      Jan Kara 提交于
      mainline inclusion
      from mainline-v5.6-rc4
      commit c780e86dd48ef6467a1146cf7d0fe1e05a635039
      category: bugfix
      bugzilla: 13690
      CVE: CVE-2019-19768
      
      -------------------------------------------------
      
      KASAN is reporting that __blk_add_trace() has a use-after-free issue
      when accessing q->blk_trace. Indeed the switching of block tracing (and
      thus eventual freeing of q->blk_trace) is completely unsynchronized with
      the currently running tracing and thus it can happen that the blk_trace
      structure is being freed just while __blk_add_trace() works on it.
      Protect accesses to q->blk_trace by RCU during tracing and make sure we
      wait for the end of RCU grace period when shutting down tracing. Luckily
      that is rare enough event that we can afford that. Note that postponing
      the freeing of blk_trace to an RCU callback should better be avoided as
      it could have unexpected user visible side-effects as debugfs files
      would be still existing for a short while block tracing has been shut
      down.
      
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=205711
      CC: stable@vger.kernel.org
      Reviewed-by: NChaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
      Reviewed-by: NMing Lei <ming.lei@redhat.com>
      Tested-by: NMing Lei <ming.lei@redhat.com>
      Reviewed-by: NBart Van Assche <bvanassche@acm.org>
      Reported-by: NTristan Madani <tristmd@gmail.com>
      Signed-off-by: NJan Kara <jack@suse.cz>
      Signed-off-by: NJens Axboe <axboe@kernel.dk>
      Conflicts:
        kernel/trace/blktrace.c
      [yyl: adjust context]
      Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
      Reviewed-by: Nzhangyi (F) <yi.zhang@huawei.com>
      Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
      40b51620
    • Z
      vgacon: Fix a UAF in vgacon_invert_region · 2bc2906d
      Zhang Xiaoxu 提交于
      mainline inclusion
      from mainline-v5.6-rc4
      commit 513dc792d6060d5ef572e43852683097a8420f56
      category: bugfix
      bugzilla: 13690
      CVE: CVE-2020-8647, CVE-2020-8649
      
      -------------------------------------------------
      
      When syzkaller tests, there is a UAF:
        BUG: KASan: use after free in vgacon_invert_region+0x9d/0x110 at addr
          ffff880000100000
        Read of size 2 by task syz-executor.1/16489
        page:ffffea0000004000 count:0 mapcount:-127 mapping:          (null)
        index:0x0
        page flags: 0xfffff00000000()
        page dumped because: kasan: bad access detected
        CPU: 1 PID: 16489 Comm: syz-executor.1 Not tainted
        Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
        rel-1.9.3-0-ge2fc41e-prebuilt.qemu-project.org 04/01/2014
        Call Trace:
          [<ffffffffb119f309>] dump_stack+0x1e/0x20
          [<ffffffffb04af957>] kasan_report+0x577/0x950
          [<ffffffffb04ae652>] __asan_load2+0x62/0x80
          [<ffffffffb090f26d>] vgacon_invert_region+0x9d/0x110
          [<ffffffffb0a39d95>] invert_screen+0xe5/0x470
          [<ffffffffb0a21dcb>] set_selection+0x44b/0x12f0
          [<ffffffffb0a3bfae>] tioclinux+0xee/0x490
          [<ffffffffb0a1d114>] vt_ioctl+0xff4/0x2670
          [<ffffffffb0a0089a>] tty_ioctl+0x46a/0x1a10
          [<ffffffffb052db3d>] do_vfs_ioctl+0x5bd/0xc40
          [<ffffffffb052e2f2>] SyS_ioctl+0x132/0x170
          [<ffffffffb11c9b1b>] system_call_fastpath+0x22/0x27
          Memory state around the buggy address:
           ffff8800000fff00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00
           00 00
           ffff8800000fff80: 00 00 00 00 00 00 00 00 00 00 00 00 00
           00 00 00
          >ffff880000100000: ff ff ff ff ff ff ff ff ff ff ff ff ff
           ff ff ff
      
      It can be reproduce in the linux mainline by the program:
        #include <stdio.h>
        #include <stdlib.h>
        #include <unistd.h>
        #include <fcntl.h>
        #include <sys/types.h>
        #include <sys/stat.h>
        #include <sys/ioctl.h>
        #include <linux/vt.h>
      
        struct tiocl_selection {
          unsigned short xs;      /* X start */
          unsigned short ys;      /* Y start */
          unsigned short xe;      /* X end */
          unsigned short ye;      /* Y end */
          unsigned short sel_mode; /* selection mode */
        };
      
        #define TIOCL_SETSEL    2
        struct tiocl {
          unsigned char type;
          unsigned char pad;
          struct tiocl_selection sel;
        };
      
        int main()
        {
          int fd = 0;
          const char *dev = "/dev/char/4:1";
      
          struct vt_consize v = {0};
          struct tiocl tioc = {0};
      
          fd = open(dev, O_RDWR, 0);
      
          v.v_rows = 3346;
          ioctl(fd, VT_RESIZEX, &v);
      
          tioc.type = TIOCL_SETSEL;
          ioctl(fd, TIOCLINUX, &tioc);
      
          return 0;
        }
      
      When resize the screen, update the 'vc->vc_size_row' to the new_row_size,
      but when 'set_origin' in 'vgacon_set_origin', vgacon use 'vga_vram_base'
      for 'vc_origin' and 'vc_visible_origin', not 'vc_screenbuf'. It maybe
      smaller than 'vc_screenbuf'. When TIOCLINUX, use the new_row_size to calc
      the offset, it maybe larger than the vga_vram_size in vgacon driver, then
      bad access.
      Also, if set an larger screenbuf firstly, then set an more larger
      screenbuf, when copy old_origin to new_origin, a bad access may happen.
      
      So, If the screen size larger than vga_vram, resize screen should be
      failed. This alse fix CVE-2020-8649 and CVE-2020-8647.
      
      Linus pointed out that overflow checking seems absent. We're saved by
      the existing bounds checks in vc_do_resize() with rather strict
      limits:
      
      	if (cols > VC_RESIZE_MAXCOL || lines > VC_RESIZE_MAXROW)
      		return -EINVAL;
      
      Fixes: 0aec4867 ("[PATCH] SVGATextMode fix")
      Reference: CVE-2020-8647 and CVE-2020-8649
      Reported-by: NHulk Robot <hulkci@huawei.com>
      Signed-off-by: NZhang Xiaoxu <zhangxiaoxu5@huawei.com>
      [danvet: augment commit message to point out overflow safety]
      Cc: stable@vger.kernel.org
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200304022429.37738-1-zhangxiaoxu5@huawei.comSigned-off-by: NYang Yingliang <yangyingliang@huawei.com>
      Reviewed-by: NZhang Xiaoxu <zhangxiaoxu5@huawei.com>
      Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
      2bc2906d
  3. 11 3月, 2020 4 次提交
  4. 05 3月, 2020 21 次提交