• Andrew Gabbasov's avatar
    spi: Fix per-page mapping of unaligned vmalloc-ed buffer · 65598c13
    Andrew Gabbasov authored
    spi_map_buf() processes mapping of vmalloc-ed buffers in a special way,
    making mapping of every page separately. However, if the buffer is not
    aligned to page boundary (e.g. sub-array in a vmalloc-ed array), it
    fills the scatter table with page-size unaligned pieces, that cross
    page boundaries. This is incorrect and can, for example, cause memory
    corruption and various crashes when working with ubifs on spi-nor chips
    (though those drivers are themselves buggy in that they should be
    providing DMAable memory to the SPI framework).
    
    Fix this by using proper scatter table size and intra-page buffer lengths,
    so that the whole buffer splits into separate scatter table entries on
    page boundaries.
    Signed-off-by: default avatarAndrew Gabbasov <andrew_gabbasov@mentor.com>
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>
    65598c13
spi.c 63.4 KB