* [PATCH] infiniband/hw/ocrdma: increase frame warning limit in verifier when using KASAN or KCSAN
@ 2024-07-09 10:52 flyingpenghao
2024-07-09 12:27 ` Leon Romanovsky
0 siblings, 1 reply; 6+ messages in thread
From: flyingpenghao @ 2024-07-09 10:52 UTC (permalink / raw)
To: gg, nathan; +Cc: linux-rdma, Peng Hao
From: Peng Hao <flyingpeng@tencent.com>
When building kernel with clang, which will typically
have sanitizers enabled, there is a warning about a large stack frame.
drivers/infiniband/hw/ocrdma/ocrdma_stats.c:686:16: error: stack frame size (20664) exceeds limit (8192) in 'ocrdma_dbgfs_ops_read' [-Werror,-Wframe-larger-than]
static ssize_t ocrdma_dbgfs_ops_read(struct file *filp, char __user *buffer,
^
Increase the frame size by 20% to set.
Signed-off-by: Peng Hao <flyingpeng@tencent.com>
---
drivers/infiniband/hw/ocrdma/Makefile | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/infiniband/hw/ocrdma/Makefile b/drivers/infiniband/hw/ocrdma/Makefile
index 14fba95021d8..a1e9fcc04751 100644
--- a/drivers/infiniband/hw/ocrdma/Makefile
+++ b/drivers/infiniband/hw/ocrdma/Makefile
@@ -3,4 +3,10 @@ ccflags-y := -I $(srctree)/drivers/net/ethernet/emulex/benet
obj-$(CONFIG_INFINIBAND_OCRDMA) += ocrdma.o
+ifneq ($(CONFIG_FRAME_WARN),0)
+ifeq ($(filter y,$(CONFIG_KASAN)$(CONFIG_KCSAN)),y)
+CFLAGS_ocrdma_stats.o = -Wframe-larger-than=22664
+endif
+endif
+
ocrdma-y := ocrdma_main.o ocrdma_verbs.o ocrdma_hw.o ocrdma_ah.o ocrdma_stats.o
--
2.27.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH] infiniband/hw/ocrdma: increase frame warning limit in verifier when using KASAN or KCSAN 2024-07-09 10:52 [PATCH] infiniband/hw/ocrdma: increase frame warning limit in verifier when using KASAN or KCSAN flyingpenghao @ 2024-07-09 12:27 ` Leon Romanovsky 2024-07-09 21:26 ` Nathan Chancellor 0 siblings, 1 reply; 6+ messages in thread From: Leon Romanovsky @ 2024-07-09 12:27 UTC (permalink / raw) To: flyingpenghao; +Cc: gg, nathan, linux-rdma, Peng Hao On Tue, Jul 09, 2024 at 06:52:42PM +0800, flyingpenghao@gmail.com wrote: > From: Peng Hao <flyingpeng@tencent.com> > > When building kernel with clang, which will typically > have sanitizers enabled, there is a warning about a large stack frame. > > drivers/infiniband/hw/ocrdma/ocrdma_stats.c:686:16: error: stack frame size (20664) exceeds limit (8192) in 'ocrdma_dbgfs_ops_read' [-Werror,-Wframe-larger-than] > static ssize_t ocrdma_dbgfs_ops_read(struct file *filp, char __user *buffer, > ^ Please fix it, not hide it. Thanks > > Increase the frame size by 20% to set. > > Signed-off-by: Peng Hao <flyingpeng@tencent.com> > --- > drivers/infiniband/hw/ocrdma/Makefile | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/drivers/infiniband/hw/ocrdma/Makefile b/drivers/infiniband/hw/ocrdma/Makefile > index 14fba95021d8..a1e9fcc04751 100644 > --- a/drivers/infiniband/hw/ocrdma/Makefile > +++ b/drivers/infiniband/hw/ocrdma/Makefile > @@ -3,4 +3,10 @@ ccflags-y := -I $(srctree)/drivers/net/ethernet/emulex/benet > > obj-$(CONFIG_INFINIBAND_OCRDMA) += ocrdma.o > > +ifneq ($(CONFIG_FRAME_WARN),0) > +ifeq ($(filter y,$(CONFIG_KASAN)$(CONFIG_KCSAN)),y) > +CFLAGS_ocrdma_stats.o = -Wframe-larger-than=22664 > +endif > +endif > + > ocrdma-y := ocrdma_main.o ocrdma_verbs.o ocrdma_hw.o ocrdma_ah.o ocrdma_stats.o > -- > 2.27.0 > > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] infiniband/hw/ocrdma: increase frame warning limit in verifier when using KASAN or KCSAN 2024-07-09 12:27 ` Leon Romanovsky @ 2024-07-09 21:26 ` Nathan Chancellor 2024-07-10 6:02 ` Leon Romanovsky 0 siblings, 1 reply; 6+ messages in thread From: Nathan Chancellor @ 2024-07-09 21:26 UTC (permalink / raw) To: Leon Romanovsky; +Cc: flyingpenghao, jgg, linux-rdma, Peng Hao On Tue, Jul 09, 2024 at 03:27:37PM +0300, Leon Romanovsky wrote: > On Tue, Jul 09, 2024 at 06:52:42PM +0800, flyingpenghao@gmail.com wrote: > > From: Peng Hao <flyingpeng@tencent.com> > > > > When building kernel with clang, which will typically > > have sanitizers enabled, there is a warning about a large stack frame. > > > > drivers/infiniband/hw/ocrdma/ocrdma_stats.c:686:16: error: stack frame size (20664) exceeds limit (8192) in 'ocrdma_dbgfs_ops_read' [-Werror,-Wframe-larger-than] > > static ssize_t ocrdma_dbgfs_ops_read(struct file *filp, char __user *buffer, > > ^ > > Please fix it, not hide it. Agreed, this is far from an acceptable solution. No details were provided around compiler, architecture, or configuration, so I can only speculate what is happening here. From reading the code, I suspect that ocrdma_add_stat() is getting inlined into all of its callsites but the stack slot for buff[128] is not getting reused, which may be related to a missing lifetime marker like [1] or sanitizer instrumentation. I am guessing that marking ocrdma_dbgfs_ops_read() as noinline_for_stack would resolve this. static noinline_for_stack int ocrdma_add_stat(char *start, char *pcur, If this is not tolerable for all configurations, it could be made more pointed with something like static #if defined(CONFIG_CC_IS_CLANG) && (defined(CONFIG_KASAN) || defined(CONFIG_KCSAN)) noinline_for_stack #endif int ocrdma_add_stat(char *start, char *pcur, but I am aware that is quite ugly. [1]: https://github.com/llvm/llvm-project/issues/38157#issuecomment-1756321571 Cheers, Nathan > > Increase the frame size by 20% to set. > > > > Signed-off-by: Peng Hao <flyingpeng@tencent.com> > > --- > > drivers/infiniband/hw/ocrdma/Makefile | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > > diff --git a/drivers/infiniband/hw/ocrdma/Makefile b/drivers/infiniband/hw/ocrdma/Makefile > > index 14fba95021d8..a1e9fcc04751 100644 > > --- a/drivers/infiniband/hw/ocrdma/Makefile > > +++ b/drivers/infiniband/hw/ocrdma/Makefile > > @@ -3,4 +3,10 @@ ccflags-y := -I $(srctree)/drivers/net/ethernet/emulex/benet > > > > obj-$(CONFIG_INFINIBAND_OCRDMA) += ocrdma.o > > > > +ifneq ($(CONFIG_FRAME_WARN),0) > > +ifeq ($(filter y,$(CONFIG_KASAN)$(CONFIG_KCSAN)),y) > > +CFLAGS_ocrdma_stats.o = -Wframe-larger-than=22664 > > +endif > > +endif > > + > > ocrdma-y := ocrdma_main.o ocrdma_verbs.o ocrdma_hw.o ocrdma_ah.o ocrdma_stats.o > > -- > > 2.27.0 > > > > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] infiniband/hw/ocrdma: increase frame warning limit in verifier when using KASAN or KCSAN 2024-07-09 21:26 ` Nathan Chancellor @ 2024-07-10 6:02 ` Leon Romanovsky 2024-07-10 13:46 ` Hao Peng 0 siblings, 1 reply; 6+ messages in thread From: Leon Romanovsky @ 2024-07-10 6:02 UTC (permalink / raw) To: Nathan Chancellor; +Cc: flyingpenghao, jgg, linux-rdma, Peng Hao On Tue, Jul 09, 2024 at 02:26:08PM -0700, Nathan Chancellor wrote: > On Tue, Jul 09, 2024 at 03:27:37PM +0300, Leon Romanovsky wrote: > > On Tue, Jul 09, 2024 at 06:52:42PM +0800, flyingpenghao@gmail.com wrote: > > > From: Peng Hao <flyingpeng@tencent.com> > > > > > > When building kernel with clang, which will typically > > > have sanitizers enabled, there is a warning about a large stack frame. > > > > > > drivers/infiniband/hw/ocrdma/ocrdma_stats.c:686:16: error: stack frame size (20664) exceeds limit (8192) in 'ocrdma_dbgfs_ops_read' [-Werror,-Wframe-larger-than] > > > static ssize_t ocrdma_dbgfs_ops_read(struct file *filp, char __user *buffer, > > > ^ > > > > Please fix it, not hide it. > > Agreed, this is far from an acceptable solution. No details were > provided around compiler, architecture, or configuration, so I can only > speculate what is happening here. From reading the code, I suspect that > ocrdma_add_stat() is getting inlined into all of its callsites but the > stack slot for buff[128] is not getting reused, which may be related to > a missing lifetime marker like [1] or sanitizer instrumentation. I am > guessing that marking ocrdma_dbgfs_ops_read() as noinline_for_stack > would resolve this. > > static noinline_for_stack int ocrdma_add_stat(char *start, char *pcur, This is a good solution, but first let's see if the author can provide more details. > > If this is not tolerable for all configurations, it could be made more > pointed with something like > > static > #if defined(CONFIG_CC_IS_CLANG) && (defined(CONFIG_KASAN) || defined(CONFIG_KCSAN)) > noinline_for_stack > #endif > int ocrdma_add_stat(char *start, char *pcur, > > but I am aware that is quite ugly. > > [1]: https://github.com/llvm/llvm-project/issues/38157#issuecomment-1756321571 > > Cheers, > Nathan > > > > Increase the frame size by 20% to set. > > > > > > Signed-off-by: Peng Hao <flyingpeng@tencent.com> > > > --- > > > drivers/infiniband/hw/ocrdma/Makefile | 6 ++++++ > > > 1 file changed, 6 insertions(+) > > > > > > diff --git a/drivers/infiniband/hw/ocrdma/Makefile b/drivers/infiniband/hw/ocrdma/Makefile > > > index 14fba95021d8..a1e9fcc04751 100644 > > > --- a/drivers/infiniband/hw/ocrdma/Makefile > > > +++ b/drivers/infiniband/hw/ocrdma/Makefile > > > @@ -3,4 +3,10 @@ ccflags-y := -I $(srctree)/drivers/net/ethernet/emulex/benet > > > > > > obj-$(CONFIG_INFINIBAND_OCRDMA) += ocrdma.o > > > > > > +ifneq ($(CONFIG_FRAME_WARN),0) > > > +ifeq ($(filter y,$(CONFIG_KASAN)$(CONFIG_KCSAN)),y) > > > +CFLAGS_ocrdma_stats.o = -Wframe-larger-than=22664 > > > +endif > > > +endif > > > + > > > ocrdma-y := ocrdma_main.o ocrdma_verbs.o ocrdma_hw.o ocrdma_ah.o ocrdma_stats.o > > > -- > > > 2.27.0 > > > > > > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] infiniband/hw/ocrdma: increase frame warning limit in verifier when using KASAN or KCSAN 2024-07-10 6:02 ` Leon Romanovsky @ 2024-07-10 13:46 ` Hao Peng 2024-07-10 15:24 ` Nathan Chancellor 0 siblings, 1 reply; 6+ messages in thread From: Hao Peng @ 2024-07-10 13:46 UTC (permalink / raw) To: Leon Romanovsky, Nathan Chancellor; +Cc: jgg, linux-rdma, Peng Hao On Wed, Jul 10, 2024 at 2:02 PM Leon Romanovsky <leon@kernel.org> wrote: > > On Tue, Jul 09, 2024 at 02:26:08PM -0700, Nathan Chancellor wrote: > > On Tue, Jul 09, 2024 at 03:27:37PM +0300, Leon Romanovsky wrote: > > > On Tue, Jul 09, 2024 at 06:52:42PM +0800, flyingpenghao@gmail.com wrote: > > > > From: Peng Hao <flyingpeng@tencent.com> > > > > > > > > When building kernel with clang, which will typically > > > > have sanitizers enabled, there is a warning about a large stack frame. > > > > > > > > drivers/infiniband/hw/ocrdma/ocrdma_stats.c:686:16: error: stack frame size (20664) exceeds limit (8192) in 'ocrdma_dbgfs_ops_read' [-Werror,-Wframe-larger-than] > > > > static ssize_t ocrdma_dbgfs_ops_read(struct file *filp, char __user *buffer, > > > > ^ > > > > > > Please fix it, not hide it. > > > > Agreed, this is far from an acceptable solution. No details were > > provided around compiler, architecture, or configuration, so I can only > > speculate what is happening here. From reading the code, I suspect that > > ocrdma_add_stat() is getting inlined into all of its callsites but the > > stack slot for buff[128] is not getting reused, which may be related to > > a missing lifetime marker like [1] or sanitizer instrumentation. I am > > guessing that marking ocrdma_dbgfs_ops_read() as noinline_for_stack > > would resolve this. > > KASAN is generally enabled for testing environments; noinline_for_stack is used to solve the problem of needing to track deeper call chains. I also tried to use noinline_for_stack and issued a new patch, but I think the v1 method is better. My environment is: x86_64, clang version 15.0.7 CONFIG_FRAME_WARN=8192 > > static noinline_for_stack int ocrdma_add_stat(char *start, char *pcur, > > This is a good solution, but first let's see if the author can provide > more details. > > > > > If this is not tolerable for all configurations, it could be made more > > pointed with something like > > > > static > > #if defined(CONFIG_CC_IS_CLANG) && (defined(CONFIG_KASAN) || defined(CONFIG_KCSAN)) > > noinline_for_stack > > #endif > > int ocrdma_add_stat(char *start, char *pcur, > > > > but I am aware that is quite ugly. > > > > [1]: https://github.com/llvm/llvm-project/issues/38157#issuecomment-1756321571 > > > > Cheers, > > Nathan > > > > > > Increase the frame size by 20% to set. > > > > > > > > Signed-off-by: Peng Hao <flyingpeng@tencent.com> > > > > --- > > > > drivers/infiniband/hw/ocrdma/Makefile | 6 ++++++ > > > > 1 file changed, 6 insertions(+) > > > > > > > > diff --git a/drivers/infiniband/hw/ocrdma/Makefile b/drivers/infiniband/hw/ocrdma/Makefile > > > > index 14fba95021d8..a1e9fcc04751 100644 > > > > --- a/drivers/infiniband/hw/ocrdma/Makefile > > > > +++ b/drivers/infiniband/hw/ocrdma/Makefile > > > > @@ -3,4 +3,10 @@ ccflags-y := -I $(srctree)/drivers/net/ethernet/emulex/benet > > > > > > > > obj-$(CONFIG_INFINIBAND_OCRDMA) += ocrdma.o > > > > > > > > +ifneq ($(CONFIG_FRAME_WARN),0) > > > > +ifeq ($(filter y,$(CONFIG_KASAN)$(CONFIG_KCSAN)),y) > > > > +CFLAGS_ocrdma_stats.o = -Wframe-larger-than=22664 > > > > +endif > > > > +endif > > > > + > > > > ocrdma-y := ocrdma_main.o ocrdma_verbs.o ocrdma_hw.o ocrdma_ah.o ocrdma_stats.o > > > > -- > > > > 2.27.0 > > > > > > > > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] infiniband/hw/ocrdma: increase frame warning limit in verifier when using KASAN or KCSAN 2024-07-10 13:46 ` Hao Peng @ 2024-07-10 15:24 ` Nathan Chancellor 0 siblings, 0 replies; 6+ messages in thread From: Nathan Chancellor @ 2024-07-10 15:24 UTC (permalink / raw) To: Hao Peng; +Cc: Leon Romanovsky, jgg, linux-rdma, Peng Hao On Wed, Jul 10, 2024 at 09:46:27PM +0800, Hao Peng wrote: > On Wed, Jul 10, 2024 at 2:02 PM Leon Romanovsky <leon@kernel.org> wrote: > > > > On Tue, Jul 09, 2024 at 02:26:08PM -0700, Nathan Chancellor wrote: > > > On Tue, Jul 09, 2024 at 03:27:37PM +0300, Leon Romanovsky wrote: > > > > On Tue, Jul 09, 2024 at 06:52:42PM +0800, flyingpenghao@gmail.com wrote: > > > > > From: Peng Hao <flyingpeng@tencent.com> > > > > > > > > > > When building kernel with clang, which will typically > > > > > have sanitizers enabled, there is a warning about a large stack frame. > > > > > > > > > > drivers/infiniband/hw/ocrdma/ocrdma_stats.c:686:16: error: stack frame size (20664) exceeds limit (8192) in 'ocrdma_dbgfs_ops_read' [-Werror,-Wframe-larger-than] > > > > > static ssize_t ocrdma_dbgfs_ops_read(struct file *filp, char __user *buffer, > > > > > ^ > > > > > > > > Please fix it, not hide it. > > > > > > Agreed, this is far from an acceptable solution. No details were > > > provided around compiler, architecture, or configuration, so I can only > > > speculate what is happening here. From reading the code, I suspect that > > > ocrdma_add_stat() is getting inlined into all of its callsites but the > > > stack slot for buff[128] is not getting reused, which may be related to > > > a missing lifetime marker like [1] or sanitizer instrumentation. I am > > > guessing that marking ocrdma_dbgfs_ops_read() as noinline_for_stack This should have been ocrdma_add_stat()... > > > would resolve this. > > > > KASAN is generally enabled for testing environments; > noinline_for_stack is used to solve the problem of needing to > track deeper call chains. I also tried to use noinline_for_stack and > issued a new patch, but I think the v1 method is better. As far as I understand it, this stack usage would be a problem at runtime if running without VMAP_STACK, so I am going to disagree. v2 gets more at the heart of the problem (although I wonder if that just moves the high stack usage to those other functions under the limit). > My environment is: > x86_64, clang version 15.0.7 > CONFIG_FRAME_WARN=8192 Is CONFIG_KASAN_STACK enabled? I realized that could be another reason you see this warning, as that option is known to have high stack usage with clang. > > > static noinline_for_stack int ocrdma_add_stat(char *start, char *pcur, > > > > This is a good solution, but first let's see if the author can provide > > more details. > > > > > > > > If this is not tolerable for all configurations, it could be made more > > > pointed with something like > > > > > > static > > > #if defined(CONFIG_CC_IS_CLANG) && (defined(CONFIG_KASAN) || defined(CONFIG_KCSAN)) > > > noinline_for_stack > > > #endif > > > int ocrdma_add_stat(char *start, char *pcur, > > > > > > but I am aware that is quite ugly. > > > > > > [1]: https://github.com/llvm/llvm-project/issues/38157#issuecomment-1756321571 > > > > > > Cheers, > > > Nathan > > > > > > > > Increase the frame size by 20% to set. > > > > > > > > > > Signed-off-by: Peng Hao <flyingpeng@tencent.com> > > > > > --- > > > > > drivers/infiniband/hw/ocrdma/Makefile | 6 ++++++ > > > > > 1 file changed, 6 insertions(+) > > > > > > > > > > diff --git a/drivers/infiniband/hw/ocrdma/Makefile b/drivers/infiniband/hw/ocrdma/Makefile > > > > > index 14fba95021d8..a1e9fcc04751 100644 > > > > > --- a/drivers/infiniband/hw/ocrdma/Makefile > > > > > +++ b/drivers/infiniband/hw/ocrdma/Makefile > > > > > @@ -3,4 +3,10 @@ ccflags-y := -I $(srctree)/drivers/net/ethernet/emulex/benet > > > > > > > > > > obj-$(CONFIG_INFINIBAND_OCRDMA) += ocrdma.o > > > > > > > > > > +ifneq ($(CONFIG_FRAME_WARN),0) > > > > > +ifeq ($(filter y,$(CONFIG_KASAN)$(CONFIG_KCSAN)),y) > > > > > +CFLAGS_ocrdma_stats.o = -Wframe-larger-than=22664 > > > > > +endif > > > > > +endif > > > > > + > > > > > ocrdma-y := ocrdma_main.o ocrdma_verbs.o ocrdma_hw.o ocrdma_ah.o ocrdma_stats.o > > > > > -- > > > > > 2.27.0 > > > > > > > > > > ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-07-10 15:24 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-07-09 10:52 [PATCH] infiniband/hw/ocrdma: increase frame warning limit in verifier when using KASAN or KCSAN flyingpenghao 2024-07-09 12:27 ` Leon Romanovsky 2024-07-09 21:26 ` Nathan Chancellor 2024-07-10 6:02 ` Leon Romanovsky 2024-07-10 13:46 ` Hao Peng 2024-07-10 15:24 ` Nathan Chancellor
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.