crypto: af_alg/hash: Support MSG_SPLICE_PAGES
[linux-block.git] / crypto / af_alg.c
index 3cf734835ccbf3997ac28c79c62ea8cfa9f85edf..7d4b6016b83d1ccdc811927d20f73881ec24a5c3 100644 (file)
@@ -542,9 +542,14 @@ void af_alg_free_sg(struct af_alg_sgl *sgl)
 {
        int i;
 
-       if (sgl->need_unpin)
-               for (i = 0; i < sgl->sgt.nents; i++)
-                       unpin_user_page(sg_page(&sgl->sgt.sgl[i]));
+       if (sgl->sgt.sgl) {
+               if (sgl->need_unpin)
+                       for (i = 0; i < sgl->sgt.nents; i++)
+                               unpin_user_page(sg_page(&sgl->sgt.sgl[i]));
+               if (sgl->sgt.sgl != sgl->sgl)
+                       kvfree(sgl->sgt.sgl);
+               sgl->sgt.sgl = NULL;
+       }
 }
 EXPORT_SYMBOL_GPL(af_alg_free_sg);