Thread (6 messages) 6 messages, 3 authors, 2017-11-30

Re: general protection fault in af_alg_free_areq_sgls

flat view

From: Eric Biggers <hidden>
Date: 2017-11-28 18:39:42
Also in: lkml

Possibly related (same subject, not in this thread)

On Tue, Nov 28, 2017 at 10:10:55AM +0100, Stephan Mueller wrote:
quoted
diff --git a/crypto/af_alg.c b/crypto/af_alg.c
index 358749c38894..415a54ced4d6 100644
--- a/crypto/af_alg.c
+++ b/crypto/af_alg.c
@@ -672,14 +672,15 @@ void af_alg_free_areq_sgls(struct af_alg_async_req
*areq) }

 	tsgl = areq->tsgl;
-	for_each_sg(tsgl, sg, areq->tsgl_entries, i) {
-		if (!sg_page(sg))
-			continue;
-		put_page(sg_page(sg));
-	}
+	if (tsgl) {
+		for_each_sg(tsgl, sg, areq->tsgl_entries, i) {
+			if (!sg_page(sg))
+				continue;
+			put_page(sg_page(sg));
+		}

-	if (areq->tsgl && areq->tsgl_entries)
Why do you want to remove the check for areq->tsgl_entries? I know in the 
current code that cannot happen. But it should be caught in case of a 
programming error.

Thus, should we add a BUG_ON(!areq->tsgl_entries)?
sock_kfree_s() works even if the size is 0.  So there's no reason to check.

Eric
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help