lkml.org 
[lkml]   [2020]   [Jan]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.14 328/371] ioat: ioat_alloc_ring() failure handling.
    Date
    From: "Alexander.Barabash@dell.com" <Alexander.Barabash@dell.com>

    [ Upstream commit b0b5ce1010ffc50015eaec72b0028aaae3f526bb ]

    If dma_alloc_coherent() returns NULL in ioat_alloc_ring(), ring
    allocation must not proceed.

    Until now, if the first call to dma_alloc_coherent() in
    ioat_alloc_ring() returned NULL, the processing could proceed, failing
    with NULL-pointer dereferencing further down the line.

    Signed-off-by: Alexander Barabash <alexander.barabash@dell.com>
    Acked-by: Dave Jiang <dave.jiang@intel.com>
    Link: https://lore.kernel.org/r/75e9c0e84c3345d693c606c64f8b9ab5@x13pwhopdag1307.AMER.DELL.COM
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/dma/ioat/dma.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    diff --git a/drivers/dma/ioat/dma.c b/drivers/dma/ioat/dma.c
    index f70cc74032ea..e3899ae429e0 100644
    --- a/drivers/dma/ioat/dma.c
    +++ b/drivers/dma/ioat/dma.c
    @@ -388,10 +388,11 @@ ioat_alloc_ring(struct dma_chan *c, int order, gfp_t flags)

    descs->virt = dma_alloc_coherent(to_dev(ioat_chan),
    SZ_2M, &descs->hw, flags);
    - if (!descs->virt && (i > 0)) {
    + if (!descs->virt) {
    int idx;

    for (idx = 0; idx < i; idx++) {
    + descs = &ioat_chan->descs[idx];
    dma_free_coherent(to_dev(ioat_chan), SZ_2M,
    descs->virt, descs->hw);
    descs->virt = NULL;
    --
    2.20.1
    \
     
     \ /
      Last update: 2020-01-16 18:31    [W:4.098 / U:0.116 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site