diff options
| -rw-r--r-- | drivers/misc/genwqe/card_utils.c | 12 |
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 | ||
