Arnd Bergmann
no leída,2 mar 2017, 11:38:512/3/17Iniciar sesión para responder al autor
Iniciar sesión para reenviar
No tienes permiso para eliminar mensajes de este grupo
Inicia sesión para denunciar el mensaje
Mostrar el mensaje original
Las direcciones de correo electrónico de este grupo son anónimas o necesitas el permiso para ver las direcciones de correo electrónico de los miembros para poder ver el mensaje original
a kasa...@googlegroups.com,Andrey Ryabinin,Alexander Potapenko,Dmitry Vyukov,net...@vger.kernel.org,linux-...@vger.kernel.org,linux...@vger.kernel.org,linux-w...@vger.kernel.org,kernel-bui...@lists.linaro.org,David S . Miller,Arnd Bergmann
When CONFIG_KASAN is set, we can run into some code that uses incredible
amounts of kernel stack:
drivers/staging/dgnc/dgnc_neo.c:1056:1: error: the frame size of 11112 bytes is larger than 2048 bytes [-Werror=frame-larger-than=]
drivers/media/i2c/cx25840/cx25840-core.c:4960:1: error: the frame size of 94000 bytes is larger than 2048 bytes [-Werror=frame-larger-than=]
drivers/media/dvb-frontends/stv090x.c:3430:1: error: the frame size of 5312 bytes is larger than 3072 bytes [-Werror=frame-larger-than=]
This happens when a sanitizer uses stack memory each time an inline function
gets called. This introduces a new annotation for those functions to make
them either 'inline' or 'noinline' dependning on the CONFIG_KASAN symbol.
Signed-off-by: Arnd Bergmann <
ar...@arndb.de>
---
include/linux/compiler.h | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/include/linux/compiler.h b/include/linux/compiler.h
index f8110051188f..56b90897a459 100644
--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
@@ -416,6 +416,17 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
*/
#define noinline_for_stack noinline
+/*
+ * CONFIG_KASAN can lead to extreme stack usage with certain patterns when
+ * one function gets inlined many times and each instance requires a stack
+ * ckeck.
+ */
+#ifdef CONFIG_KASAN
+#define noinline_for_kasan noinline __maybe_unused
+#else
+#define noinline_for_kasan inline
+#endif
+
#ifndef __always_inline
#define __always_inline inline
#endif
--
2.9.0