提交 17ebba1f 编写于 作者: N Nicolas Pitre 提交者: Russell King

ARM: 6165/1: trap overflows on highmem pages from kmap_atomic when debugging

When CONFIG_DEBUG_HIGHMEM is used, the fixmap entry used for a highmem page
by kmap_atomic() is always cleared by kunmap_atomic().  This helps find
bad usages such as dereferences after the unmap, or overflow into the
adjacent fixmap areas.

But this debugging aid is completely bypassed when a kmap for the same
page already exists as the kmap is reused instead.  ON VIVT systems we
have no choice but to reuse that kmap due to cache coherency issues,
but on non VIVT systems we should always force the fixmap usage when
debugging is active.
Signed-off-by: NNicolas Pitre <nicolas.pitre@linaro.org>
Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
上级 b394eebd
...@@ -48,6 +48,15 @@ void *kmap_atomic(struct page *page, enum km_type type) ...@@ -48,6 +48,15 @@ void *kmap_atomic(struct page *page, enum km_type type)
debug_kmap_atomic(type); debug_kmap_atomic(type);
#ifdef CONFIG_DEBUG_HIGHMEM
/*
* There is no cache coherency issue when non VIVT, so force the
* dedicated kmap usage for better debugging purposes in that case.
*/
if (!cache_is_vivt())
kmap = NULL;
else
#endif
kmap = kmap_high_get(page); kmap = kmap_high_get(page);
if (kmap) if (kmap)
return kmap; return kmap;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册