lkml.org 
[lkml]   [2020]   [Aug]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 036/124] scsi: target: tcmu: Fix crash in tcmu_flush_dcache_range on ARM
    Date
    From: Bodo Stroesser <bstroesser@ts.fujitsu.com>

    [ Upstream commit 3145550a7f8b08356c8ff29feaa6c56aca12901d ]

    This patch fixes the following crash (see
    https://bugzilla.kernel.org/show_bug.cgi?id=208045)

    Process iscsi_trx (pid: 7496, stack limit = 0x0000000010dd111a)
    CPU: 0 PID: 7496 Comm: iscsi_trx Not tainted 4.19.118-0419118-generic
    #202004230533
    Hardware name: Greatwall QingTian DF720/F601, BIOS 601FBE20 Sep 26 2019
    pstate: 80400005 (Nzcv daif +PAN -UAO)
    pc : flush_dcache_page+0x18/0x40
    lr : is_ring_space_avail+0x68/0x2f8 [target_core_user]
    sp : ffff000015123a80
    x29: ffff000015123a80 x28: 0000000000000000
    x27: 0000000000001000 x26: ffff000023ea5000
    x25: ffffcfa25bbe08b8 x24: 0000000000000078
    x23: ffff7e0000000000 x22: ffff000023ea5001
    x21: ffffcfa24b79c000 x20: 0000000000000fff
    x19: ffff7e00008fa940 x18: 0000000000000000
    x17: 0000000000000000 x16: ffff2d047e709138
    x15: 0000000000000000 x14: 0000000000000000
    x13: 0000000000000000 x12: ffff2d047fbd0a40
    x11: 0000000000000000 x10: 0000000000000030
    x9 : 0000000000000000 x8 : ffffc9a254820a00
    x7 : 00000000000013b0 x6 : 000000000000003f
    x5 : 0000000000000040 x4 : ffffcfa25bbe08e8
    x3 : 0000000000001000 x2 : 0000000000000078
    x1 : ffffcfa25bbe08b8 x0 : ffff2d040bc88a18
    Call trace:
    flush_dcache_page+0x18/0x40
    is_ring_space_avail+0x68/0x2f8 [target_core_user]
    queue_cmd_ring+0x1f8/0x680 [target_core_user]
    tcmu_queue_cmd+0xe4/0x158 [target_core_user]
    __target_execute_cmd+0x30/0xf0 [target_core_mod]
    target_execute_cmd+0x294/0x390 [target_core_mod]
    transport_generic_new_cmd+0x1e8/0x358 [target_core_mod]
    transport_handle_cdb_direct+0x50/0xb0 [target_core_mod]
    iscsit_execute_cmd+0x2b4/0x350 [iscsi_target_mod]
    iscsit_sequence_cmd+0xd8/0x1d8 [iscsi_target_mod]
    iscsit_process_scsi_cmd+0xac/0xf8 [iscsi_target_mod]
    iscsit_get_rx_pdu+0x404/0xd00 [iscsi_target_mod]
    iscsi_target_rx_thread+0xb8/0x130 [iscsi_target_mod]
    kthread+0x130/0x138
    ret_from_fork+0x10/0x18
    Code: f9000bf3 aa0003f3 aa1e03e0 d503201f (f9400260)
    ---[ end trace 1e451c73f4266776 ]---

    The solution is based on patch:

    "scsi: target: tcmu: Optimize use of flush_dcache_page"

    which restricts the use of tcmu_flush_dcache_range() to addresses from
    vmalloc'ed areas only.

    This patch now replaces the virt_to_page() call in
    tcmu_flush_dcache_range() - which is wrong for vmalloced addrs - by
    vmalloc_to_page().

    The patch was tested on ARM with kernel 4.19.118 and 5.7.2

    Link: https://lore.kernel.org/r/20200618131632.32748-3-bstroesser@ts.fujitsu.com
    Tested-by: JiangYu <lnsyyj@hotmail.com>
    Tested-by: Daniel Meyerholt <dxm523@gmail.com>
    Acked-by: Mike Christie <michael.christie@oracle.com>
    Signed-off-by: Bodo Stroesser <bstroesser@ts.fujitsu.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/target/target_core_user.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/drivers/target/target_core_user.c b/drivers/target/target_core_user.c
    index b63a1e0c4aa6d..a55114975b00d 100644
    --- a/drivers/target/target_core_user.c
    +++ b/drivers/target/target_core_user.c
    @@ -601,7 +601,7 @@ static inline void tcmu_flush_dcache_range(void *vaddr, size_t size)
    size = round_up(size+offset, PAGE_SIZE);

    while (size) {
    - flush_dcache_page(virt_to_page(start));
    + flush_dcache_page(vmalloc_to_page(start));
    start += PAGE_SIZE;
    size -= PAGE_SIZE;
    }
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-08-24 11:47    [W:2.833 / U:0.192 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site