• Wenwen Wang's avatar
    misc: mic: fix a DMA pool free failure · 6b995f4e
    Wenwen Wang authored
    In _scif_prog_signal(), the boolean variable 'x100' is used to indicate
    whether the MIC Coprocessor is X100. If 'x100' is true, the status
    descriptor will be used to write the value to the destination. Otherwise, a
    DMA pool will be allocated for this purpose. Specifically, if the DMA pool
    is allocated successfully, two memory addresses will be returned. One is
    for the CPU and the other is for the device to access the DMA pool. The
    former is stored to the variable 'status' and the latter is stored to the
    variable 'src'. After the allocation, the address in 'src' is saved to
    'status->src_dma_addr', which is actually in the DMA pool, and 'src' is
    then modified.
    
    Later on, if an error occurs, the execution flow will transfer to the label
    'dma_fail', which will check 'x100' and free up the allocated DMA pool if
    'x100' is false. The point here is that 'status->src_dma_addr' is used for
    freeing up the DMA pool. As mentioned before, 'status->src_dma_addr' is in
    the DMA pool. And thus, the device is able to modify this data. This can
    potentially cause failures when freeing up the DMA pool because of the
    modified device address.
    
    This patch avoids the above issue by using the variable 'src' (with
    necessary calculation) to free up the DMA pool.
    Signed-off-by: default avatarWenwen Wang <wang6495@umn.edu>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    6b995f4e
scif_fence.c 19.6 KB