aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/misc/genwqe/card_utils.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/misc/genwqe/card_utils.c b/drivers/misc/genwqe/card_utils.c
index 8a679ecc8fd1..fc2794b513fa 100644
--- a/drivers/misc/genwqe/card_utils.c
+++ b/drivers/misc/genwqe/card_utils.c
@@ -352,17 +352,27 @@ int genwqe_alloc_sync_sgl(struct genwqe_dev *cd, struct genwqe_sgl *sgl,
352 if (copy_from_user(sgl->lpage, user_addr + user_size - 352 if (copy_from_user(sgl->lpage, user_addr + user_size -
353 sgl->lpage_size, sgl->lpage_size)) { 353 sgl->lpage_size, sgl->lpage_size)) {
354 rc = -EFAULT; 354 rc = -EFAULT;
355 goto err_out1; 355 goto err_out2;
356 } 356 }
357 } 357 }
358 return 0; 358 return 0;
359 359
360 err_out2:
361 __genwqe_free_consistent(cd, PAGE_SIZE, sgl->lpage,
362 sgl->lpage_dma_addr);
363 sgl->lpage = NULL;
364 sgl->lpage_dma_addr = 0;
360 err_out1: 365 err_out1:
361 __genwqe_free_consistent(cd, PAGE_SIZE, sgl->fpage, 366 __genwqe_free_consistent(cd, PAGE_SIZE, sgl->fpage,
362 sgl->fpage_dma_addr); 367 sgl->fpage_dma_addr);
368 sgl->fpage = NULL;
369 sgl->fpage_dma_addr = 0;
363 err_out: 370 err_out:
364 __genwqe_free_consistent(cd, sgl->sgl_size, sgl->sgl, 371 __genwqe_free_consistent(cd, sgl->sgl_size, sgl->sgl,
365 sgl->sgl_dma_addr); 372 sgl->sgl_dma_addr);
373 sgl->sgl = NULL;
374 sgl->sgl_dma_addr = 0;
375 sgl->sgl_size = 0;
366 return -ENOMEM; 376 return -ENOMEM;
367} 377}
368 378