aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char
diff options
context:
space:
mode:
authorWenwen Wang <wang6495@umn.edu>2018-12-04 09:16:41 -0600
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-12-19 10:26:31 +0100
commit15b3048aeed8bf8232156456c884ae94ed52d6cd (patch)
treeae9bdd52a6f10357569d8aae37360aebde2c4228 /drivers/char
parentptp: fix an IS_ERR() vs NULL check (diff)
downloadlinux-dev-15b3048aeed8bf8232156456c884ae94ed52d6cd.tar.xz
linux-dev-15b3048aeed8bf8232156456c884ae94ed52d6cd.zip
misc: mic: fix a DMA pool free failure
In _scif_prog_signal(), a DMA pool is allocated if the MIC Coprocessor is not X100, i.e., the boolean variable 'x100' is false. This DMA pool will be freed eventually through the callback function scif_prog_signal_cb() with the parameter of 'status', which actually points to the start of DMA pool. Specifically, in scif_prog_signal_cb(), the 'ep' field and the 'src_dma_addr' field of 'status' are used to free the DMA pool by invoking dma_pool_free(). Given that 'status' points to the start address of the DMA pool, both 'status->ep' and 'status->src_dma_addr' are in the DMA pool. And so, the device has the permission to access them. Even worse, a malicious device can modify them. As a result, dma_pool_free() will not succeed. To avoid the above issue, this patch introduces a new data structure, i.e., scif_cb_arg, to store the arguments required by the call back function. A variable 'cb_arg' is allocated in _scif_prog_signal() to pass the arguments. 'cb_arg' will be freed after dma_pool_free() in scif_prog_signal_cb(). Signed-off-by: Wenwen Wang <wang6495@umn.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/char')
0 files changed, 0 insertions, 0 deletions