Skip to content
Snippets Groups Projects
Select Git revision
  • 28b546c67ad5b05406ea31184515152c8b0abeba
  • openEuler-1.0-LTS default protected
  • openEuler-22.09
  • OLK-5.10
  • openEuler-22.03-LTS
  • openEuler-22.03-LTS-Ascend
  • master
  • openEuler-22.03-LTS-LoongArch-NW
  • openEuler-22.09-HCK
  • openEuler-20.03-LTS-SP3
  • openEuler-21.09
  • openEuler-21.03
  • openEuler-20.09
  • 4.19.90-2210.5.0
  • 5.10.0-123.0.0
  • 5.10.0-60.63.0
  • 5.10.0-60.62.0
  • 4.19.90-2210.4.0
  • 5.10.0-121.0.0
  • 5.10.0-60.61.0
  • 4.19.90-2210.3.0
  • 5.10.0-60.60.0
  • 5.10.0-120.0.0
  • 5.10.0-60.59.0
  • 5.10.0-119.0.0
  • 4.19.90-2210.2.0
  • 4.19.90-2210.1.0
  • 5.10.0-118.0.0
  • 5.10.0-106.19.0
  • 5.10.0-60.58.0
  • 4.19.90-2209.6.0
  • 5.10.0-106.18.0
  • 5.10.0-106.17.0
33 results

22b970497

  • Clone with SSH
  • Clone with HTTPS
  • user avatar
    Pavel Shilovsky authored and Yongqiang Liu committed
    mainline inclusion
    from mainline-v5.4-rc5
    commit abe57073
    category: bugfix
    bugzilla: 24367, https://gitee.com/openeuler/kernel/issues/I5OE1W
    
    
    CVE: NA
    
    --------------------------------
    
    When the client hits reconnect it iterates over the mid
    pending queue marking entries for retry and moving them
    to a temporary list to issue callbacks later without holding
    GlobalMid_Lock. In the same time there is no guarantee that
    mids can't be removed from the temporary list or even
    freed completely by another thread. It may cause a temporary
    list corruption:
    
    [  430.454897] list_del corruption. prev->next should be ffff98d3a8f316c0, but was 2e885cb266355469
    [  430.464668] ------------[ cut here ]------------
    [  430.466569] kernel BUG at lib/list_debug.c:51!
    [  430.468476] invalid opcode: 0000 [#1] SMP PTI
    [  430.470286] CPU: 0 PID: 13267 Comm: cifsd Kdump: loaded Not tainted 5.4.0-rc3+ #19
    [  430.473472] Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011
    [  430.475872] RIP: 0010:__list_del_entry_valid.cold+0x31/0x55
    ...
    [  430.510426] Call Trace:
    [  430.511500]  cifs_reconnect+0x25e/0x610 [cifs]
    [  430.513350]  cifs_readv_from_socket+0x220/0x250 [cifs]
    [  430.515464]  cifs_read_from_socket+0x4a/0x70 [cifs]
    [  430.517452]  ? try_to_wake_up+0x212/0x650
    [  430.519122]  ? cifs_small_buf_get+0x16/0x30 [cifs]
    [  430.521086]  ? allocate_buffers+0x66/0x120 [cifs]
    [  430.523019]  cifs_demultiplex_thread+0xdc/0xc30 [cifs]
    [  430.525116]  kthread+0xfb/0x130
    [  430.526421]  ? cifs_handle_standard+0x190/0x190 [cifs]
    [  430.528514]  ? kthread_park+0x90/0x90
    [  430.530019]  ret_from_fork+0x35/0x40
    
    Fix this by obtaining extra references for mids being retried
    and marking them as MID_DELETED which indicates that such a mid
    has been dequeued from the pending list.
    
    Also move mid cleanup logic from DeleteMidQEntry to
    _cifs_mid_q_entry_release which is called when the last reference
    to a particular mid is put. This allows to avoid any use-after-free
    of response buffers.
    
    The patch needs to be backported to stable kernels. A stable tag
    is not mentioned below because the patch doesn't apply cleanly
    to any actively maintained stable kernel.
    
    Reviewed-by: default avatarRonnie Sahlberg <lsahlber@redhat.com>
    Reviewed-and-tested-by: default avatarDavid Wysochanski <dwysocha@redhat.com>
    Signed-off-by: default avatarPavel Shilovsky <pshilov@microsoft.com>
    Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
    
    conflicts:
    	fs/cifs/connect.c
    	fs/cifs/transport.c
    
    Signed-off-by: default avatarChenXiaoSong <chenxiaosong2@huawei.com>
    Reviewed-by: default avatarZhang Yi <yi.zhang@huawei.com>
    Reviewed-by: default avatarJason Yan <yanaijie@huawei.com>
    Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
    28b546c6
    History
    Name Last commit Last update