scatterwalk_map_and_copy may cause kernel oops
From: Joy Latten <hidden>
Date: 2007-12-06 06:26:58
In scatterwalk_map_and_copy(), sg_next(sg) is called, loop goes back to top and scatterwalk_start() gets called again. When next sg is NULL, BUG_ON may occur in next call to scatterwalk_start(). Please let me know if following patch takes right approach to fix this. regards, Joy Signed-off-by: Joy Latten <redacted> diff -urpN cryptodev-2.6.2/crypto/scatterwalk.c cryptodev-2.6.2.sandbox/crypto/scatterwalk.c
--- cryptodev-2.6.2/crypto/scatterwalk.c 2007-12-05 00:23:37.000000000 -0600
+++ cryptodev-2.6.2.sandbox/crypto/scatterwalk.c 2007-12-06 00:10:56.000000000 -0600@@ -106,7 +106,7 @@ void scatterwalk_map_and_copy(void *buf, struct scatter_walk walk; unsigned int offset = 0; - for (;;) { + do { scatterwalk_start(&walk, sg); if (start < offset + sg->length)
@@ -114,7 +114,7 @@ void scatterwalk_map_and_copy(void *buf, offset += sg->length; sg = sg_next(sg); - } + } while (sg != NULL); scatterwalk_advance(&walk, start - offset); scatterwalk_copychunks(buf, &walk, nbytes, out);