• Akinobu Mita's avatar
    target/file: Fix BUG() when CONFIG_DEBUG_SG=y and DIF protection enabled · cc75f251
    Akinobu Mita authored
    [ Upstream commit 38da0f49 ]
    
    When CONFIG_DEBUG_SG=y and DIF protection support enabled, kernel
    BUG()s are triggered due to the following two issues:
    
    1) prot_sg is not initialized by sg_init_table().
    
    When CONFIG_DEBUG_SG=y, scatterlist helpers check sg entry has a
    correct magic value.
    
    2) vmalloc'ed buffer is passed to sg_set_buf().
    
    sg_set_buf() uses virt_to_page() to convert virtual address to struct
    page, but it doesn't work with vmalloc address.  vmalloc_to_page()
    should be used instead.  As prot_buf isn't usually too large, so
    fix it by allocating prot_buf by kmalloc instead of vmalloc.
    Signed-off-by: default avatarAkinobu Mita <akinobu.mita@gmail.com>
    Cc: Sagi Grimberg <sagig@mellanox.com>
    Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
    Cc: <stable@vger.kernel.org> # v3.14+
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
    cc75f251
target_core_file.c 24.8 KB