[patch 013/104] lib/scatterlist.c: fix kunmap() argument in sg_miter_stop()

Greg KH
2008-12-03T19:55:37Z

[-- Attachment #1: lib-scatterlist.c-fix-kunmap-argument-in-sg_miter_stop.patch --]
[-- Type: text/plain, Size: 1181 bytes --]

2.6.27-stable review patch. If anyone has any objections, please let us know.

------------------
From: Arjan van de Ven <arjan@infradead.org>

commit f652c521e0bec2e70cf123f47e80117a7e6ed139 upstream.

kunmap() takes as argument the struct page that orginally got kmap()'d,
however the sg_miter_stop() function passed it the kernel virtual address
instead, resulting in weird stuff.

Somehow I ended up fixing this bug by accident while looking for a bug in
the same area.

Reported-by: kerneloops.org
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
Cc: Hugh Dickins <hugh@veritas.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
lib/scatterlist.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

--- a/lib/scatterlist.c
+++ b/lib/scatterlist.c
@@ -395,7 +395,7 @@ void sg_miter_stop(struct sg_mapping_ite
WARN_ON(!irqs_disabled());
kunmap_atomic(miter->addr, KM_BIO_SRC_IRQ);
} else
- kunmap(miter->addr);
+ kunmap(miter->page);

miter->page = NULL;
miter->addr = NULL;