From: Zhihong Peng <zhihongx.peng@intel.com> After adding ASan, the gcc compilation check will be stricter. "Control reaches end of non-void function" error occurs here. Fixes: f38913b7fb8e (pipeline: add meter array to SWX) Cc: stable@dpdk.org Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> --- lib/pipeline/rte_swx_pipeline.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pipeline/rte_swx_pipeline.c b/lib/pipeline/rte_swx_pipeline.c index 8eb978a30c..aaa0107d02 100644 --- a/lib/pipeline/rte_swx_pipeline.c +++ b/lib/pipeline/rte_swx_pipeline.c @@ -6340,7 +6340,7 @@ instr_meter_translate(struct rte_swx_pipeline *p, return 0; } - CHECK(0, EINVAL); + return -EINVAL; } static inline struct meter * @@ -8025,7 +8025,7 @@ instr_translate(struct rte_swx_pipeline *p, instr, data); - CHECK(0, EINVAL); + return -EINVAL; } static struct instruction_data * -- 2.25.1
From: Zhihong Peng <zhihongx.peng@intel.com> After adding ASan, the gcc compilation check will be stricter. "Control reaches end of non-void function" error occurs here. Fixes: f38913b7fb8e (pipeline: add meter array to SWX) Cc: stable@dpdk.org Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> --- lib/pipeline/rte_swx_pipeline.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pipeline/rte_swx_pipeline.c b/lib/pipeline/rte_swx_pipeline.c index 8eb978a30c..aaa0107d02 100644 --- a/lib/pipeline/rte_swx_pipeline.c +++ b/lib/pipeline/rte_swx_pipeline.c @@ -6340,7 +6340,7 @@ instr_meter_translate(struct rte_swx_pipeline *p, return 0; } - CHECK(0, EINVAL); + return -EINVAL; } static inline struct meter * @@ -8025,7 +8025,7 @@ instr_translate(struct rte_swx_pipeline *p, instr, data); - CHECK(0, EINVAL); + return -EINVAL; } static struct instruction_data * -- 2.25.1
From: Zhihong Peng <zhihongx.peng@intel.com> After adding ASan, the gcc compilation check will be stricter. "Control reaches end of non-void function" error occurs here. Fixes: f38913b7fb8e (pipeline: add meter array to SWX) Cc: stable@dpdk.org Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> --- lib/pipeline/rte_swx_pipeline.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pipeline/rte_swx_pipeline.c b/lib/pipeline/rte_swx_pipeline.c index 8eb978a30c..aaa0107d02 100644 --- a/lib/pipeline/rte_swx_pipeline.c +++ b/lib/pipeline/rte_swx_pipeline.c @@ -6340,7 +6340,7 @@ instr_meter_translate(struct rte_swx_pipeline *p, return 0; } - CHECK(0, EINVAL); + return -EINVAL; } static inline struct meter * @@ -8025,7 +8025,7 @@ instr_translate(struct rte_swx_pipeline *p, instr, data); - CHECK(0, EINVAL); + return -EINVAL; } static struct instruction_data * -- 2.25.1
From: Zhihong Peng <zhihongx.peng@intel.com> After adding ASan, the gcc compilation check will be stricter. "Control reaches end of non-void function" error occurs here. Fixes: f38913b7fb8e (pipeline: add meter array to SWX) Cc: stable@dpdk.org Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> --- lib/pipeline/rte_swx_pipeline.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pipeline/rte_swx_pipeline.c b/lib/pipeline/rte_swx_pipeline.c index 1cd09a4b44..0acd6c6752 100644 --- a/lib/pipeline/rte_swx_pipeline.c +++ b/lib/pipeline/rte_swx_pipeline.c @@ -4642,7 +4642,7 @@ instr_meter_translate(struct rte_swx_pipeline *p, return 0; } - CHECK(0, EINVAL); + return -EINVAL; } static inline void @@ -5937,7 +5937,7 @@ instr_translate(struct rte_swx_pipeline *p, instr, data); - CHECK(0, EINVAL); + return -EINVAL; } static struct instruction_data * -- 2.25.1
On Thu, Sep 30, 2021 at 7:37 AM <zhihongx.peng@intel.com> wrote: > > From: Zhihong Peng <zhihongx.peng@intel.com> Commit titles don't start with lib/. > > After adding ASan, the gcc compilation check will be stricter. > "Control reaches end of non-void function" error occurs here. Fwiw, I could not pinpoint the right version where this warning appears. I can't see it with gcc v4.8.5 (rhel7), but I get it with gcc 11.2.1 (fc34). Do you know which versions are affected? Just asking for info. > > Fixes: f38913b7fb8e (pipeline: add meter array to SWX) Should be formatted as: Fixes: f38913b7fb8e ("pipeline: add meter array to SWX") Please use a git alias as suggested in the contribution guide. > Cc: stable@dpdk.org > > Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> > Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> > --- > lib/pipeline/rte_swx_pipeline.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/lib/pipeline/rte_swx_pipeline.c b/lib/pipeline/rte_swx_pipeline.c > index 1cd09a4b44..0acd6c6752 100644 > --- a/lib/pipeline/rte_swx_pipeline.c > +++ b/lib/pipeline/rte_swx_pipeline.c > @@ -4642,7 +4642,7 @@ instr_meter_translate(struct rte_swx_pipeline *p, > return 0; > } > > - CHECK(0, EINVAL); > + return -EINVAL; > } > > static inline void > @@ -5937,7 +5937,7 @@ instr_translate(struct rte_swx_pipeline *p, > instr, > data); > > - CHECK(0, EINVAL); > + return -EINVAL; > } > > static struct instruction_data * There are two other functions (instr_table_translate, and instr_extern_translate) which have the same pattern in this file. Odd that the compiler is not reporting them. -- David Marchand
From: Zhihong Peng <zhihongx.peng@intel.com> After adding ASan, the gcc compilation check will be stricter. "Control reaches end of non-void function" error occurs here. Fixes: f38913b7fb8e (pipeline: add meter array to SWX) Cc: stable@dpdk.org Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> --- lib/pipeline/rte_swx_pipeline.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pipeline/rte_swx_pipeline.c b/lib/pipeline/rte_swx_pipeline.c index 1cd09a4b44..0acd6c6752 100644 --- a/lib/pipeline/rte_swx_pipeline.c +++ b/lib/pipeline/rte_swx_pipeline.c @@ -4642,7 +4642,7 @@ instr_meter_translate(struct rte_swx_pipeline *p, return 0; } - CHECK(0, EINVAL); + return -EINVAL; } static inline void @@ -5937,7 +5937,7 @@ instr_translate(struct rte_swx_pipeline *p, instr, data); - CHECK(0, EINVAL); + return -EINVAL; } static struct instruction_data * -- 2.25.1
From: Zhihong Peng <zhihongx.peng@intel.com> The gcc will check code more stricter when ASan enabled. "Control reaches end of non-void function" error occurs here. Fixes: f38913b7fb8e (pipeline: add meter array to SWX) Cc: stable@dpdk.org Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> --- lib/pipeline/rte_swx_pipeline.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pipeline/rte_swx_pipeline.c b/lib/pipeline/rte_swx_pipeline.c index 1cd09a4b44..0acd6c6752 100644 --- a/lib/pipeline/rte_swx_pipeline.c +++ b/lib/pipeline/rte_swx_pipeline.c @@ -4642,7 +4642,7 @@ instr_meter_translate(struct rte_swx_pipeline *p, return 0; } - CHECK(0, EINVAL); + return -EINVAL; } static inline void @@ -5937,7 +5937,7 @@ instr_translate(struct rte_swx_pipeline *p, instr, data); - CHECK(0, EINVAL); + return -EINVAL; } static struct instruction_data * -- 2.25.1
From: Zhihong Peng <zhihongx.peng@intel.com> The gcc will check code more stricter when ASan enabled. "Control reaches end of non-void function" error occurs here. Fixes: f38913b7fb8e (pipeline: add meter array to SWX) Cc: stable@dpdk.org Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> --- lib/pipeline/rte_swx_pipeline.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pipeline/rte_swx_pipeline.c b/lib/pipeline/rte_swx_pipeline.c index 1cd09a4b44..0acd6c6752 100644 --- a/lib/pipeline/rte_swx_pipeline.c +++ b/lib/pipeline/rte_swx_pipeline.c @@ -4642,7 +4642,7 @@ instr_meter_translate(struct rte_swx_pipeline *p, return 0; } - CHECK(0, EINVAL); + return -EINVAL; } static inline void @@ -5937,7 +5937,7 @@ instr_translate(struct rte_swx_pipeline *p, instr, data); - CHECK(0, EINVAL); + return -EINVAL; } static struct instruction_data * -- 2.25.1
> -----Original Message----- > From: David Marchand <david.marchand@redhat.com> > Sent: Thursday, September 30, 2021 4:30 PM > To: Peng, ZhihongX <zhihongx.peng@intel.com> > Cc: Burakov, Anatoly <anatoly.burakov@intel.com>; Ananyev, Konstantin > <konstantin.ananyev@intel.com>; Stephen Hemminger > <stephen@networkplumber.org>; dev <dev@dpdk.org>; Lin, Xueqin > <xueqin.lin@intel.com>; dpdk stable <stable@dpdk.org> > Subject: Re: [dpdk-stable] [PATCH v6 2/2] lib/pipeline: Fix gcc compilation > error using ASan > > On Thu, Sep 30, 2021 at 7:37 AM <zhihongx.peng@intel.com> wrote: > > > > From: Zhihong Peng <zhihongx.peng@intel.com> > > Commit titles don't start with lib/. The v9 version will be fixed. > > > > > After adding ASan, the gcc compilation check will be stricter. > > "Control reaches end of non-void function" error occurs here. > > Fwiw, I could not pinpoint the right version where this warning appears. > I can't see it with gcc v4.8.5 (rhel7), but I get it with gcc 11.2.1 (fc34). > Do you know which versions are affected? Just asking for info. > > > > > > Fixes: f38913b7fb8e (pipeline: add meter array to SWX) > > Should be formatted as: > Fixes: f38913b7fb8e ("pipeline: add meter array to SWX") > > Please use a git alias as suggested in the contribution guide. The v9 version will be fixed. > > > Cc: stable@dpdk.org > > > > Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> > > Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> > > --- > > lib/pipeline/rte_swx_pipeline.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/lib/pipeline/rte_swx_pipeline.c > > b/lib/pipeline/rte_swx_pipeline.c index 1cd09a4b44..0acd6c6752 100644 > > --- a/lib/pipeline/rte_swx_pipeline.c > > +++ b/lib/pipeline/rte_swx_pipeline.c > > @@ -4642,7 +4642,7 @@ instr_meter_translate(struct rte_swx_pipeline *p, > > return 0; > > } > > > > - CHECK(0, EINVAL); > > + return -EINVAL; > > } > > > > static inline void > > @@ -5937,7 +5937,7 @@ instr_translate(struct rte_swx_pipeline *p, > > instr, > > data); > > > > - CHECK(0, EINVAL); > > + return -EINVAL; > > } > > > > static struct instruction_data * > > There are two other functions (instr_table_translate, and > instr_extern_translate) which have the same pattern in this file. > Odd that the compiler is not reporting them. The lowest version we tried is gcc version 7.4.0, the highest gcc version 9.3.0, these versions will report errors. As for why some do not report errors, it may be gcc's own problem, we just let the compilation pass. > -- > David Marchand
From: Zhihong Peng <zhihongx.peng@intel.com> The gcc will check code more stricter when ASan enabled. "Control reaches end of non-void function" error occurs here. Fixes: f38913b7fb8e ("pipeline: add meter array to SWX") Cc: stable@dpdk.org Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> --- v7: no change v8: no change v9: Modify the submit log --- lib/pipeline/rte_swx_pipeline.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pipeline/rte_swx_pipeline.c b/lib/pipeline/rte_swx_pipeline.c index 1cd09a4b44..0acd6c6752 100644 --- a/lib/pipeline/rte_swx_pipeline.c +++ b/lib/pipeline/rte_swx_pipeline.c @@ -4642,7 +4642,7 @@ instr_meter_translate(struct rte_swx_pipeline *p, return 0; } - CHECK(0, EINVAL); + return -EINVAL; } static inline void @@ -5937,7 +5937,7 @@ instr_translate(struct rte_swx_pipeline *p, instr, data); - CHECK(0, EINVAL); + return -EINVAL; } static struct instruction_data * -- 2.25.1
From: Zhihong Peng <zhihongx.peng@intel.com> The gcc will check code more stricter when ASan enabled. "Control reaches end of non-void function" error occurs here. Fixes: f38913b7fb8e ("pipeline: add meter array to SWX") Cc: stable@dpdk.org Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> --- lib/pipeline/rte_swx_pipeline.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pipeline/rte_swx_pipeline.c b/lib/pipeline/rte_swx_pipeline.c index 1cd09a4b44..0acd6c6752 100644 --- a/lib/pipeline/rte_swx_pipeline.c +++ b/lib/pipeline/rte_swx_pipeline.c @@ -4642,7 +4642,7 @@ instr_meter_translate(struct rte_swx_pipeline *p, return 0; } - CHECK(0, EINVAL); + return -EINVAL; } static inline void @@ -5937,7 +5937,7 @@ instr_translate(struct rte_swx_pipeline *p, instr, data); - CHECK(0, EINVAL); + return -EINVAL; } static struct instruction_data * -- 2.25.1
From: Zhihong Peng <zhihongx.peng@intel.com> The gcc(arm-linux-gcc) will check code more stricter when ASan enabled. "strncpy specified bound XX equals destination size" error occurs here. Fixes: 116819b9ed0d ("examples/performance-thread: add lthread subsystem") Cc: stable@dpdk.org Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> --- examples/performance-thread/common/lthread.c | 2 +- examples/performance-thread/common/lthread_cond.c | 4 ++-- examples/performance-thread/common/lthread_mutex.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/performance-thread/common/lthread.c b/examples/performance-thread/common/lthread.c index 3f1f48db43..dd4b3b27ee 100644 --- a/examples/performance-thread/common/lthread.c +++ b/examples/performance-thread/common/lthread.c @@ -463,6 +463,6 @@ void lthread_set_funcname(const char *f) { struct lthread *lt = THIS_LTHREAD; - strncpy(lt->funcname, f, sizeof(lt->funcname)); + strncpy(lt->funcname, f, sizeof(lt->funcname) - 1); lt->funcname[sizeof(lt->funcname)-1] = 0; } diff --git a/examples/performance-thread/common/lthread_cond.c b/examples/performance-thread/common/lthread_cond.c index cdcc7a7b5a..6ec8bc7e82 100644 --- a/examples/performance-thread/common/lthread_cond.c +++ b/examples/performance-thread/common/lthread_cond.c @@ -57,9 +57,9 @@ lthread_cond_init(char *name, struct lthread_cond **cond, } if (name == NULL) - strncpy(c->name, "no name", sizeof(c->name)); + strncpy(c->name, "no name", sizeof(c->name) - 1); else - strncpy(c->name, name, sizeof(c->name)); + strncpy(c->name, name, sizeof(c->name) - 1); c->name[sizeof(c->name)-1] = 0; c->root_sched = THIS_SCHED; diff --git a/examples/performance-thread/common/lthread_mutex.c b/examples/performance-thread/common/lthread_mutex.c index 01da6cad4f..7e5da609b1 100644 --- a/examples/performance-thread/common/lthread_mutex.c +++ b/examples/performance-thread/common/lthread_mutex.c @@ -52,9 +52,9 @@ lthread_mutex_init(char *name, struct lthread_mutex **mutex, } if (name == NULL) - strncpy(m->name, "no name", sizeof(m->name)); + strncpy(m->name, "no name", sizeof(m->name) - 1); else - strncpy(m->name, name, sizeof(m->name)); + strncpy(m->name, name, sizeof(m->name) - 1); m->name[sizeof(m->name)-1] = 0; m->root_sched = THIS_SCHED; -- 2.25.1
From: Zhihong Peng <zhihongx.peng@intel.com> The gcc will check code more stricter when ASan enabled. "Control reaches end of non-void function" error occurs here. Fixes: f38913b7fb8e ("pipeline: add meter array to SWX") Cc: stable@dpdk.org Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> --- lib/pipeline/rte_swx_pipeline.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pipeline/rte_swx_pipeline.c b/lib/pipeline/rte_swx_pipeline.c index 1cd09a4b44..0acd6c6752 100644 --- a/lib/pipeline/rte_swx_pipeline.c +++ b/lib/pipeline/rte_swx_pipeline.c @@ -4642,7 +4642,7 @@ instr_meter_translate(struct rte_swx_pipeline *p, return 0; } - CHECK(0, EINVAL); + return -EINVAL; } static inline void @@ -5937,7 +5937,7 @@ instr_translate(struct rte_swx_pipeline *p, instr, data); - CHECK(0, EINVAL); + return -EINVAL; } static struct instruction_data * -- 2.25.1
From: Zhihong Peng <zhihongx.peng@intel.com> The gcc(arm-linux-gcc) will check code more stricter when ASan enabled. "strncpy specified bound XX equals destination size" error occurs here. Fixes: 116819b9ed0d ("examples/performance-thread: add lthread subsystem") Cc: stable@dpdk.org Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> --- examples/performance-thread/common/lthread.c | 2 +- examples/performance-thread/common/lthread_cond.c | 4 ++-- examples/performance-thread/common/lthread_mutex.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/performance-thread/common/lthread.c b/examples/performance-thread/common/lthread.c index 3f1f48db43..dd4b3b27ee 100644 --- a/examples/performance-thread/common/lthread.c +++ b/examples/performance-thread/common/lthread.c @@ -463,6 +463,6 @@ void lthread_set_funcname(const char *f) { struct lthread *lt = THIS_LTHREAD; - strncpy(lt->funcname, f, sizeof(lt->funcname)); + strncpy(lt->funcname, f, sizeof(lt->funcname) - 1); lt->funcname[sizeof(lt->funcname)-1] = 0; } diff --git a/examples/performance-thread/common/lthread_cond.c b/examples/performance-thread/common/lthread_cond.c index cdcc7a7b5a..6ec8bc7e82 100644 --- a/examples/performance-thread/common/lthread_cond.c +++ b/examples/performance-thread/common/lthread_cond.c @@ -57,9 +57,9 @@ lthread_cond_init(char *name, struct lthread_cond **cond, } if (name == NULL) - strncpy(c->name, "no name", sizeof(c->name)); + strncpy(c->name, "no name", sizeof(c->name) - 1); else - strncpy(c->name, name, sizeof(c->name)); + strncpy(c->name, name, sizeof(c->name) - 1); c->name[sizeof(c->name)-1] = 0; c->root_sched = THIS_SCHED; diff --git a/examples/performance-thread/common/lthread_mutex.c b/examples/performance-thread/common/lthread_mutex.c index 01da6cad4f..7e5da609b1 100644 --- a/examples/performance-thread/common/lthread_mutex.c +++ b/examples/performance-thread/common/lthread_mutex.c @@ -52,9 +52,9 @@ lthread_mutex_init(char *name, struct lthread_mutex **mutex, } if (name == NULL) - strncpy(m->name, "no name", sizeof(m->name)); + strncpy(m->name, "no name", sizeof(m->name) - 1); else - strncpy(m->name, name, sizeof(m->name)); + strncpy(m->name, name, sizeof(m->name) - 1); m->name[sizeof(m->name)-1] = 0; m->root_sched = THIS_SCHED; -- 2.25.1
From: Zhihong Peng <zhihongx.peng@intel.com> The gcc will check code more stricter when ASan enabled. "Control reaches end of non-void function" error occurs here. Fixes: f38913b7fb8e ("pipeline: add meter array to SWX") Cc: stable@dpdk.org Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> --- v7: no change v8: no change v9: Modify the submit log v10:no change --- lib/pipeline/rte_swx_pipeline.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pipeline/rte_swx_pipeline.c b/lib/pipeline/rte_swx_pipeline.c index 1cd09a4b44..0acd6c6752 100644 --- a/lib/pipeline/rte_swx_pipeline.c +++ b/lib/pipeline/rte_swx_pipeline.c @@ -4642,7 +4642,7 @@ instr_meter_translate(struct rte_swx_pipeline *p, return 0; } - CHECK(0, EINVAL); + return -EINVAL; } static inline void @@ -5937,7 +5937,7 @@ instr_translate(struct rte_swx_pipeline *p, instr, data); - CHECK(0, EINVAL); + return -EINVAL; } static struct instruction_data * -- 2.25.1
From: Zhihong Peng <zhihongx.peng@intel.com> The gcc(arm-linux-gcc) will check code more stricter when ASan enabled. "strncpy specified bound XX equals destination size" error occurs here. Fixes: 116819b9ed0d ("examples/performance-thread: add lthread subsystem") Cc: stable@dpdk.org Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> --- examples/performance-thread/common/lthread.c | 2 +- examples/performance-thread/common/lthread_cond.c | 4 ++-- examples/performance-thread/common/lthread_mutex.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/performance-thread/common/lthread.c b/examples/performance-thread/common/lthread.c index 3f1f48db43..dd4b3b27ee 100644 --- a/examples/performance-thread/common/lthread.c +++ b/examples/performance-thread/common/lthread.c @@ -463,6 +463,6 @@ void lthread_set_funcname(const char *f) { struct lthread *lt = THIS_LTHREAD; - strncpy(lt->funcname, f, sizeof(lt->funcname)); + strncpy(lt->funcname, f, sizeof(lt->funcname) - 1); lt->funcname[sizeof(lt->funcname)-1] = 0; } diff --git a/examples/performance-thread/common/lthread_cond.c b/examples/performance-thread/common/lthread_cond.c index cdcc7a7b5a..6ec8bc7e82 100644 --- a/examples/performance-thread/common/lthread_cond.c +++ b/examples/performance-thread/common/lthread_cond.c @@ -57,9 +57,9 @@ lthread_cond_init(char *name, struct lthread_cond **cond, } if (name == NULL) - strncpy(c->name, "no name", sizeof(c->name)); + strncpy(c->name, "no name", sizeof(c->name) - 1); else - strncpy(c->name, name, sizeof(c->name)); + strncpy(c->name, name, sizeof(c->name) - 1); c->name[sizeof(c->name)-1] = 0; c->root_sched = THIS_SCHED; diff --git a/examples/performance-thread/common/lthread_mutex.c b/examples/performance-thread/common/lthread_mutex.c index 01da6cad4f..7e5da609b1 100644 --- a/examples/performance-thread/common/lthread_mutex.c +++ b/examples/performance-thread/common/lthread_mutex.c @@ -52,9 +52,9 @@ lthread_mutex_init(char *name, struct lthread_mutex **mutex, } if (name == NULL) - strncpy(m->name, "no name", sizeof(m->name)); + strncpy(m->name, "no name", sizeof(m->name) - 1); else - strncpy(m->name, name, sizeof(m->name)); + strncpy(m->name, name, sizeof(m->name) - 1); m->name[sizeof(m->name)-1] = 0; m->root_sched = THIS_SCHED; -- 2.25.1
> -----Original Message-----
> From: Peng, ZhihongX <zhihongx.peng@intel.com>
> Sent: Friday, October 15, 2021 4:11 PM
> To: david.marchand@redhat.com; Burakov, Anatoly
> <anatoly.burakov@intel.com>; Ananyev, Konstantin
> <konstantin.ananyev@intel.com>; stephen@networkplumber.org;
> Dumitrescu, Cristian <cristian.dumitrescu@intel.com>; Mcnamara, John
> <john.mcnamara@intel.com>
> Cc: dev@dpdk.org; Lin, Xueqin <xueqin.lin@intel.com>; Peng, ZhihongX
> <zhihongx.peng@intel.com>; stable@dpdk.org
> Subject: [PATCH v10 3/4] pipeline: Fix compilation error with gcc ASan
>
> From: Zhihong Peng <zhihongx.peng@intel.com>
>
> The gcc will check code more stricter when ASan enabled.
> "Control reaches end of non-void function" error occurs here.
>
> Fixes: f38913b7fb8e ("pipeline: add meter array to SWX")
> Cc: stable@dpdk.org
>
> Signed-off-by: Xueqin Lin <xueqin.lin@intel.com>
> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com>
> ---
> v7: no change
> v8: no change
> v9: Modify the submit log
> v10:no change
> ---
> lib/pipeline/rte_swx_pipeline.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/lib/pipeline/rte_swx_pipeline.c b/lib/pipeline/rte_swx_pipeline.c
> index 1cd09a4b44..0acd6c6752 100644
> --- a/lib/pipeline/rte_swx_pipeline.c
> +++ b/lib/pipeline/rte_swx_pipeline.c
> @@ -4642,7 +4642,7 @@ instr_meter_translate(struct rte_swx_pipeline *p,
> return 0;
> }
>
> - CHECK(0, EINVAL);
> + return -EINVAL;
> }
>
> static inline void
> @@ -5937,7 +5937,7 @@ instr_translate(struct rte_swx_pipeline *p,
> instr,
> data);
>
> - CHECK(0, EINVAL);
> + return -EINVAL;
> }
>
> static struct instruction_data *
> --
> 2.25.1
NACK.
This is a false issue, no bug is here. CHECK(0, EINVAL) translates to an unconditional return -EINVAL.
Does this tool work correctly when macros are present? Maybe the tool should parse the preprocessed C code as opposed to initial C code?
Regards,
Cristian
> -----Original Message----- > From: Dumitrescu, Cristian <cristian.dumitrescu@intel.com> > Sent: Monday, October 18, 2021 8:22 PM > To: Peng, ZhihongX <zhihongx.peng@intel.com>; > david.marchand@redhat.com; Burakov, Anatoly > <anatoly.burakov@intel.com>; Ananyev, Konstantin > <konstantin.ananyev@intel.com>; stephen@networkplumber.org; > Mcnamara, John <john.mcnamara@intel.com> > Cc: dev@dpdk.org; Lin, Xueqin <xueqin.lin@intel.com>; stable@dpdk.org > Subject: RE: [PATCH v10 3/4] pipeline: Fix compilation error with gcc ASan > > > > > -----Original Message----- > > From: Peng, ZhihongX <zhihongx.peng@intel.com> > > Sent: Friday, October 15, 2021 4:11 PM > > To: david.marchand@redhat.com; Burakov, Anatoly > > <anatoly.burakov@intel.com>; Ananyev, Konstantin > > <konstantin.ananyev@intel.com>; stephen@networkplumber.org; > > Dumitrescu, Cristian <cristian.dumitrescu@intel.com>; Mcnamara, John > > <john.mcnamara@intel.com> > > Cc: dev@dpdk.org; Lin, Xueqin <xueqin.lin@intel.com>; Peng, ZhihongX > > <zhihongx.peng@intel.com>; stable@dpdk.org > > Subject: [PATCH v10 3/4] pipeline: Fix compilation error with gcc ASan > > > > From: Zhihong Peng <zhihongx.peng@intel.com> > > > > The gcc will check code more stricter when ASan enabled. > > "Control reaches end of non-void function" error occurs here. > > > > Fixes: f38913b7fb8e ("pipeline: add meter array to SWX") > > Cc: stable@dpdk.org > > > > Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> > > Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> > > --- > > v7: no change > > v8: no change > > v9: Modify the submit log > > v10:no change > > --- > > lib/pipeline/rte_swx_pipeline.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/lib/pipeline/rte_swx_pipeline.c > > b/lib/pipeline/rte_swx_pipeline.c index 1cd09a4b44..0acd6c6752 100644 > > --- a/lib/pipeline/rte_swx_pipeline.c > > +++ b/lib/pipeline/rte_swx_pipeline.c > > @@ -4642,7 +4642,7 @@ instr_meter_translate(struct rte_swx_pipeline *p, > > return 0; > > } > > > > - CHECK(0, EINVAL); > > + return -EINVAL; > > } > > > > static inline void > > @@ -5937,7 +5937,7 @@ instr_translate(struct rte_swx_pipeline *p, > > instr, > > data); > > > > - CHECK(0, EINVAL); > > + return -EINVAL; > > } > > > > static struct instruction_data * > > -- > > 2.25.1 > > NACK. > > This is a false issue, no bug is here. CHECK(0, EINVAL) translates to an > unconditional return -EINVAL. > Does this tool work correctly when macros are present? Maybe the tool > should parse the preprocessed C code as opposed to initial C code? Yes, this is not a bug, it just solves the problem that cannot be passed after adding the asan compiler option. Only part of the macro reports errors, which may be caused by the tool itself, but this tool is part of gcc and clang, so we still have to make the code not report errors. > Regards, > Cristian
> -----Original Message-----
> From: Peng, ZhihongX <zhihongx.peng@intel.com>
> Sent: Friday, October 15, 2021 11:11 PM
> To: david.marchand@redhat.com; Burakov, Anatoly
> <anatoly.burakov@intel.com>; Ananyev, Konstantin
> <konstantin.ananyev@intel.com>; stephen@networkplumber.org;
> Dumitrescu, Cristian <cristian.dumitrescu@intel.com>; Mcnamara, John
> <john.mcnamara@intel.com>
> Cc: dev@dpdk.org; Lin, Xueqin <xueqin.lin@intel.com>; Peng, ZhihongX
> <ZhihongX.Peng@intel.com>; stable@dpdk.org
> Subject: [PATCH v10 4/4] performance-thread: Fix cross compilation failed
>
> From: Zhihong Peng <zhihongx.peng@intel.com>
>
> The gcc(arm-linux-gcc) will check code more stricter when ASan enabled.
> "strncpy specified bound XX equals destination size" error occurs here.
>
> Fixes: 116819b9ed0d ("examples/performance-thread: add lthread
> subsystem")
> Cc: stable@dpdk.org
>
> Signed-off-by: Xueqin Lin <xueqin.lin@intel.com>
> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com>
> ---
> examples/performance-thread/common/lthread.c | 2 +-
> examples/performance-thread/common/lthread_cond.c | 4 ++--
> examples/performance-thread/common/lthread_mutex.c | 4 ++--
> 3 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/examples/performance-thread/common/lthread.c
> b/examples/performance-thread/common/lthread.c
> index 3f1f48db43..dd4b3b27ee 100644
> --- a/examples/performance-thread/common/lthread.c
> +++ b/examples/performance-thread/common/lthread.c
> @@ -463,6 +463,6 @@ void lthread_set_funcname(const char *f) {
> struct lthread *lt = THIS_LTHREAD;
>
> - strncpy(lt->funcname, f, sizeof(lt->funcname));
> + strncpy(lt->funcname, f, sizeof(lt->funcname) - 1);
> lt->funcname[sizeof(lt->funcname)-1] = 0; } diff --git
> a/examples/performance-thread/common/lthread_cond.c
> b/examples/performance-thread/common/lthread_cond.c
> index cdcc7a7b5a..6ec8bc7e82 100644
> --- a/examples/performance-thread/common/lthread_cond.c
> +++ b/examples/performance-thread/common/lthread_cond.c
> @@ -57,9 +57,9 @@ lthread_cond_init(char *name, struct lthread_cond
> **cond,
> }
>
> if (name == NULL)
> - strncpy(c->name, "no name", sizeof(c->name));
> + strncpy(c->name, "no name", sizeof(c->name) - 1);
> else
> - strncpy(c->name, name, sizeof(c->name));
> + strncpy(c->name, name, sizeof(c->name) - 1);
> c->name[sizeof(c->name)-1] = 0;
>
> c->root_sched = THIS_SCHED;
> diff --git a/examples/performance-thread/common/lthread_mutex.c
> b/examples/performance-thread/common/lthread_mutex.c
> index 01da6cad4f..7e5da609b1 100644
> --- a/examples/performance-thread/common/lthread_mutex.c
> +++ b/examples/performance-thread/common/lthread_mutex.c
> @@ -52,9 +52,9 @@ lthread_mutex_init(char *name, struct lthread_mutex
> **mutex,
> }
>
> if (name == NULL)
> - strncpy(m->name, "no name", sizeof(m->name));
> + strncpy(m->name, "no name", sizeof(m->name) - 1);
> else
> - strncpy(m->name, name, sizeof(m->name));
> + strncpy(m->name, name, sizeof(m->name) - 1);
> m->name[sizeof(m->name)-1] = 0;
>
> m->root_sched = THIS_SCHED;
> --
> 2.25.1
Hi, John
Can you give me an ack?
Thanks!
From: Zhihong Peng <zhihongx.peng@intel.com> The gcc will check code more stricter when ASan enabled. "Control reaches end of non-void function" error occurs here. Fixes: f38913b7fb8e ("pipeline: add meter array to SWX") Cc: stable@dpdk.org Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> --- v7: no change v8: no change v9: Modify the submit log v10:no change v11:no change --- lib/pipeline/rte_swx_pipeline.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pipeline/rte_swx_pipeline.c b/lib/pipeline/rte_swx_pipeline.c index 1cd09a4b44..0acd6c6752 100644 --- a/lib/pipeline/rte_swx_pipeline.c +++ b/lib/pipeline/rte_swx_pipeline.c @@ -4642,7 +4642,7 @@ instr_meter_translate(struct rte_swx_pipeline *p, return 0; } - CHECK(0, EINVAL); + return -EINVAL; } static inline void @@ -5937,7 +5937,7 @@ instr_translate(struct rte_swx_pipeline *p, instr, data); - CHECK(0, EINVAL); + return -EINVAL; } static struct instruction_data * -- 2.25.1
From: Zhihong Peng <zhihongx.peng@intel.com> The gcc(arm-linux-gcc) will check code more stricter when ASan enabled. "strncpy specified bound XX equals destination size" error occurs here. Fixes: 116819b9ed0d ("examples/performance-thread: add lthread subsystem") Cc: stable@dpdk.org Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> --- v11: Use rte_strlcpy to replace strncpy. --- examples/performance-thread/common/lthread.c | 4 ++-- examples/performance-thread/common/lthread_cond.c | 6 +++--- examples/performance-thread/common/lthread_mutex.c | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/performance-thread/common/lthread.c b/examples/performance-thread/common/lthread.c index 3f1f48db43..7949beb8e2 100644 --- a/examples/performance-thread/common/lthread.c +++ b/examples/performance-thread/common/lthread.c @@ -20,6 +20,7 @@ #include <sys/mman.h> #include <rte_log.h> +#include <rte_string_fns.h> #include <ctx.h> #include <stack.h> @@ -463,6 +464,5 @@ void lthread_set_funcname(const char *f) { struct lthread *lt = THIS_LTHREAD; - strncpy(lt->funcname, f, sizeof(lt->funcname)); - lt->funcname[sizeof(lt->funcname)-1] = 0; + rte_strlcpy(lt->funcname, f, sizeof(lt->funcname)); } diff --git a/examples/performance-thread/common/lthread_cond.c b/examples/performance-thread/common/lthread_cond.c index cdcc7a7b5a..398735c192 100644 --- a/examples/performance-thread/common/lthread_cond.c +++ b/examples/performance-thread/common/lthread_cond.c @@ -20,6 +20,7 @@ #include <rte_log.h> #include <rte_common.h> +#include <rte_string_fns.h> #include "lthread_api.h" #include "lthread_diag_api.h" @@ -57,10 +58,9 @@ lthread_cond_init(char *name, struct lthread_cond **cond, } if (name == NULL) - strncpy(c->name, "no name", sizeof(c->name)); + rte_strlcpy(c->name, "no name", sizeof(c->name)); else - strncpy(c->name, name, sizeof(c->name)); - c->name[sizeof(c->name)-1] = 0; + rte_strlcpy(c->name, name, sizeof(c->name)); c->root_sched = THIS_SCHED; diff --git a/examples/performance-thread/common/lthread_mutex.c b/examples/performance-thread/common/lthread_mutex.c index 01da6cad4f..1911e5ac67 100644 --- a/examples/performance-thread/common/lthread_mutex.c +++ b/examples/performance-thread/common/lthread_mutex.c @@ -19,6 +19,7 @@ #include <rte_log.h> #include <rte_spinlock.h> #include <rte_common.h> +#include <rte_string_fns.h> #include "lthread_api.h" #include "lthread_int.h" @@ -52,10 +53,9 @@ lthread_mutex_init(char *name, struct lthread_mutex **mutex, } if (name == NULL) - strncpy(m->name, "no name", sizeof(m->name)); + rte_strlcpy(m->name, "no name", sizeof(m->name)); else - strncpy(m->name, name, sizeof(m->name)); - m->name[sizeof(m->name)-1] = 0; + rte_strlcpy(m->name, name, sizeof(m->name)); m->root_sched = THIS_SCHED; m->owner = NULL; -- 2.25.1
On Tue, Oct 19, 2021 at 06:12:07PM +0800, zhihongx.peng@intel.com wrote:
> From: Zhihong Peng <zhihongx.peng@intel.com>
>
> The gcc(arm-linux-gcc) will check code more stricter when ASan enabled.
> "strncpy specified bound XX equals destination size" error occurs here.
>
> Fixes: 116819b9ed0d ("examples/performance-thread: add lthread subsystem")
> Cc: stable@dpdk.org
>
> Signed-off-by: Xueqin Lin <xueqin.lin@intel.com>
> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com>
> ---
> v11: Use rte_strlcpy to replace strncpy.
> ---
+1 to using strlcpy, but it should be "strlcpy" rather than "rte_strlcpy"
which should be used. Analysis tools are likely to be familiar with strlcpy
but won't know the DPDK-specific version of it.
With that change to remove the rte_ prefix
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
/Bruce
> -----Original Message-----
> From: Peng, ZhihongX <zhihongx.peng@intel.com>
> Sent: Monday, October 18, 2021 1:55 PM
> To: Dumitrescu, Cristian <cristian.dumitrescu@intel.com>;
> david.marchand@redhat.com; Burakov, Anatoly
> <anatoly.burakov@intel.com>; Ananyev, Konstantin
> <konstantin.ananyev@intel.com>; stephen@networkplumber.org;
> Mcnamara, John <john.mcnamara@intel.com>
> Cc: dev@dpdk.org; Lin, Xueqin <xueqin.lin@intel.com>; stable@dpdk.org
> Subject: RE: [PATCH v10 3/4] pipeline: Fix compilation error with gcc ASan
>
> > -----Original Message-----
> > From: Dumitrescu, Cristian <cristian.dumitrescu@intel.com>
> > Sent: Monday, October 18, 2021 8:22 PM
> > To: Peng, ZhihongX <zhihongx.peng@intel.com>;
> > david.marchand@redhat.com; Burakov, Anatoly
> > <anatoly.burakov@intel.com>; Ananyev, Konstantin
> > <konstantin.ananyev@intel.com>; stephen@networkplumber.org;
> > Mcnamara, John <john.mcnamara@intel.com>
> > Cc: dev@dpdk.org; Lin, Xueqin <xueqin.lin@intel.com>; stable@dpdk.org
> > Subject: RE: [PATCH v10 3/4] pipeline: Fix compilation error with gcc ASan
> >
> >
> >
> > > -----Original Message-----
> > > From: Peng, ZhihongX <zhihongx.peng@intel.com>
> > > Sent: Friday, October 15, 2021 4:11 PM
> > > To: david.marchand@redhat.com; Burakov, Anatoly
> > > <anatoly.burakov@intel.com>; Ananyev, Konstantin
> > > <konstantin.ananyev@intel.com>; stephen@networkplumber.org;
> > > Dumitrescu, Cristian <cristian.dumitrescu@intel.com>; Mcnamara, John
> > > <john.mcnamara@intel.com>
> > > Cc: dev@dpdk.org; Lin, Xueqin <xueqin.lin@intel.com>; Peng, ZhihongX
> > > <zhihongx.peng@intel.com>; stable@dpdk.org
> > > Subject: [PATCH v10 3/4] pipeline: Fix compilation error with gcc ASan
> > >
> > > From: Zhihong Peng <zhihongx.peng@intel.com>
> > >
> > > The gcc will check code more stricter when ASan enabled.
> > > "Control reaches end of non-void function" error occurs here.
> > >
> > > Fixes: f38913b7fb8e ("pipeline: add meter array to SWX")
> > > Cc: stable@dpdk.org
> > >
> > > Signed-off-by: Xueqin Lin <xueqin.lin@intel.com>
> > > Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com>
> > > ---
> > > v7: no change
> > > v8: no change
> > > v9: Modify the submit log
> > > v10:no change
> > > ---
> > > lib/pipeline/rte_swx_pipeline.c | 4 ++--
> > > 1 file changed, 2 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/lib/pipeline/rte_swx_pipeline.c
> > > b/lib/pipeline/rte_swx_pipeline.c index 1cd09a4b44..0acd6c6752 100644
> > > --- a/lib/pipeline/rte_swx_pipeline.c
> > > +++ b/lib/pipeline/rte_swx_pipeline.c
> > > @@ -4642,7 +4642,7 @@ instr_meter_translate(struct rte_swx_pipeline
> *p,
> > > return 0;
> > > }
> > >
> > > - CHECK(0, EINVAL);
> > > + return -EINVAL;
> > > }
> > >
> > > static inline void
> > > @@ -5937,7 +5937,7 @@ instr_translate(struct rte_swx_pipeline *p,
> > > instr,
> > > data);
> > >
> > > - CHECK(0, EINVAL);
> > > + return -EINVAL;
> > > }
> > >
> > > static struct instruction_data *
> > > --
> > > 2.25.1
> >
> > NACK.
> >
> > This is a false issue, no bug is here. CHECK(0, EINVAL) translates to an
> > unconditional return -EINVAL.
> > Does this tool work correctly when macros are present? Maybe the tool
> > should parse the preprocessed C code as opposed to initial C code?
>
> Yes, this is not a bug, it just solves the problem that cannot be passed after
> adding the asan compiler option.
> Only part of the macro reports errors, which may be caused by the tool itself,
> but this tool is part of gcc and clang, so we still have to make the code not
> report errors.
> > Regards,
> > Cristian
Hi Zhihong,
If this is not a bug in the pipeline library, why then does your patch has fix in the tile, has the Fixes label and CC-es stable@dpdk.org? Please remove and rephrase accordingly.
I agree this is not a bug, and based on your statements I understand this is a sort of issue or limitation with the tool . I would prefer we fix the tool rather than fixing correct code in order to please the tool. This is likely not going to be an isolated case, but a recurring issue.
Hence, I am reluctantly OK to ack this patch in order to allow the tool in (after the "fix" claim is removed), hopefully the tool will prove its benefit to DPDK.
Regards,
Cristian
> -----Original Message----- > From: Dumitrescu, Cristian <cristian.dumitrescu@intel.com> > Sent: Tuesday, October 19, 2021 7:26 PM > To: Peng, ZhihongX <zhihongx.peng@intel.com>; > david.marchand@redhat.com; Burakov, Anatoly > <anatoly.burakov@intel.com>; Ananyev, Konstantin > <konstantin.ananyev@intel.com>; stephen@networkplumber.org; > Mcnamara, John <john.mcnamara@intel.com> > Cc: dev@dpdk.org; Lin, Xueqin <xueqin.lin@intel.com>; stable@dpdk.org > Subject: RE: [PATCH v10 3/4] pipeline: Fix compilation error with gcc ASan > > > > > -----Original Message----- > > From: Peng, ZhihongX <zhihongx.peng@intel.com> > > Sent: Monday, October 18, 2021 1:55 PM > > To: Dumitrescu, Cristian <cristian.dumitrescu@intel.com>; > > david.marchand@redhat.com; Burakov, Anatoly > > <anatoly.burakov@intel.com>; Ananyev, Konstantin > > <konstantin.ananyev@intel.com>; stephen@networkplumber.org; > Mcnamara, > > John <john.mcnamara@intel.com> > > Cc: dev@dpdk.org; Lin, Xueqin <xueqin.lin@intel.com>; stable@dpdk.org > > Subject: RE: [PATCH v10 3/4] pipeline: Fix compilation error with gcc > > ASan > > > > > -----Original Message----- > > > From: Dumitrescu, Cristian <cristian.dumitrescu@intel.com> > > > Sent: Monday, October 18, 2021 8:22 PM > > > To: Peng, ZhihongX <zhihongx.peng@intel.com>; > > > david.marchand@redhat.com; Burakov, Anatoly > > > <anatoly.burakov@intel.com>; Ananyev, Konstantin > > > <konstantin.ananyev@intel.com>; stephen@networkplumber.org; > > > Mcnamara, John <john.mcnamara@intel.com> > > > Cc: dev@dpdk.org; Lin, Xueqin <xueqin.lin@intel.com>; > > > stable@dpdk.org > > > Subject: RE: [PATCH v10 3/4] pipeline: Fix compilation error with > > > gcc ASan > > > > > > > > > > > > > -----Original Message----- > > > > From: Peng, ZhihongX <zhihongx.peng@intel.com> > > > > Sent: Friday, October 15, 2021 4:11 PM > > > > To: david.marchand@redhat.com; Burakov, Anatoly > > > > <anatoly.burakov@intel.com>; Ananyev, Konstantin > > > > <konstantin.ananyev@intel.com>; stephen@networkplumber.org; > > > > Dumitrescu, Cristian <cristian.dumitrescu@intel.com>; Mcnamara, > > > > John <john.mcnamara@intel.com> > > > > Cc: dev@dpdk.org; Lin, Xueqin <xueqin.lin@intel.com>; Peng, > > > > ZhihongX <zhihongx.peng@intel.com>; stable@dpdk.org > > > > Subject: [PATCH v10 3/4] pipeline: Fix compilation error with gcc > > > > ASan > > > > > > > > From: Zhihong Peng <zhihongx.peng@intel.com> > > > > > > > > The gcc will check code more stricter when ASan enabled. > > > > "Control reaches end of non-void function" error occurs here. > > > > > > > > Fixes: f38913b7fb8e ("pipeline: add meter array to SWX") > > > > Cc: stable@dpdk.org > > > > > > > > Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> > > > > Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> > > > > --- > > > > v7: no change > > > > v8: no change > > > > v9: Modify the submit log > > > > v10:no change > > > > --- > > > > lib/pipeline/rte_swx_pipeline.c | 4 ++-- > > > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > > > > > diff --git a/lib/pipeline/rte_swx_pipeline.c > > > > b/lib/pipeline/rte_swx_pipeline.c index 1cd09a4b44..0acd6c6752 > > > > 100644 > > > > --- a/lib/pipeline/rte_swx_pipeline.c > > > > +++ b/lib/pipeline/rte_swx_pipeline.c > > > > @@ -4642,7 +4642,7 @@ instr_meter_translate(struct > > > > rte_swx_pipeline > > *p, > > > > return 0; > > > > } > > > > > > > > - CHECK(0, EINVAL); > > > > + return -EINVAL; > > > > } > > > > > > > > static inline void > > > > @@ -5937,7 +5937,7 @@ instr_translate(struct rte_swx_pipeline *p, > > > > instr, > > > > data); > > > > > > > > - CHECK(0, EINVAL); > > > > + return -EINVAL; > > > > } > > > > > > > > static struct instruction_data * > > > > -- > > > > 2.25.1 > > > > > > NACK. > > > > > > This is a false issue, no bug is here. CHECK(0, EINVAL) translates > > > to an unconditional return -EINVAL. > > > Does this tool work correctly when macros are present? Maybe the > > > tool should parse the preprocessed C code as opposed to initial C code? > > > > Yes, this is not a bug, it just solves the problem that cannot be > > passed after adding the asan compiler option. > > Only part of the macro reports errors, which may be caused by the tool > > itself, but this tool is part of gcc and clang, so we still have to > > make the code not report errors. > > > Regards, > > > Cristian > > Hi Zhihong, > > If this is not a bug in the pipeline library, why then does your patch has fix in > the tile, has the Fixes label and CC-es stable@dpdk.org? Please remove and > rephrase accordingly. > > I agree this is not a bug, and based on your statements I understand this is a > sort of issue or limitation with the tool . I would prefer we fix the tool rather > than fixing correct code in order to please the tool. This is likely not going to > be an isolated case, but a recurring issue. > > Hence, I am reluctantly OK to ack this patch in order to allow the tool in (after > the "fix" claim is removed), hopefully the tool will prove its benefit to DPDK. ok, I will delete it. > Regards, > Cristian
From: Zhihong Peng <zhihongx.peng@intel.com> The gcc(arm-linux-gcc) will check code more stricter when ASan enabled. "strncpy specified bound XX equals destination size" error occurs here. Fixes: 116819b9ed0d ("examples/performance-thread: add lthread subsystem") Cc: stable@dpdk.org Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> --- v11: Use rte_strlcpy to replace strncpy. v12: Delete rte_strlcpy's rte_. --- examples/performance-thread/common/lthread.c | 4 ++-- examples/performance-thread/common/lthread_cond.c | 6 +++--- examples/performance-thread/common/lthread_mutex.c | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/performance-thread/common/lthread.c b/examples/performance-thread/common/lthread.c index 3f1f48db43..190e5874b1 100644 --- a/examples/performance-thread/common/lthread.c +++ b/examples/performance-thread/common/lthread.c @@ -20,6 +20,7 @@ #include <sys/mman.h> #include <rte_log.h> +#include <rte_string_fns.h> #include <ctx.h> #include <stack.h> @@ -463,6 +464,5 @@ void lthread_set_funcname(const char *f) { struct lthread *lt = THIS_LTHREAD; - strncpy(lt->funcname, f, sizeof(lt->funcname)); - lt->funcname[sizeof(lt->funcname)-1] = 0; + strlcpy(lt->funcname, f, sizeof(lt->funcname)); } diff --git a/examples/performance-thread/common/lthread_cond.c b/examples/performance-thread/common/lthread_cond.c index cdcc7a7b5a..e7be17089a 100644 --- a/examples/performance-thread/common/lthread_cond.c +++ b/examples/performance-thread/common/lthread_cond.c @@ -20,6 +20,7 @@ #include <rte_log.h> #include <rte_common.h> +#include <rte_string_fns.h> #include "lthread_api.h" #include "lthread_diag_api.h" @@ -57,10 +58,9 @@ lthread_cond_init(char *name, struct lthread_cond **cond, } if (name == NULL) - strncpy(c->name, "no name", sizeof(c->name)); + strlcpy(c->name, "no name", sizeof(c->name)); else - strncpy(c->name, name, sizeof(c->name)); - c->name[sizeof(c->name)-1] = 0; + strlcpy(c->name, name, sizeof(c->name)); c->root_sched = THIS_SCHED; diff --git a/examples/performance-thread/common/lthread_mutex.c b/examples/performance-thread/common/lthread_mutex.c index 01da6cad4f..709ab9f553 100644 --- a/examples/performance-thread/common/lthread_mutex.c +++ b/examples/performance-thread/common/lthread_mutex.c @@ -19,6 +19,7 @@ #include <rte_log.h> #include <rte_spinlock.h> #include <rte_common.h> +#include <rte_string_fns.h> #include "lthread_api.h" #include "lthread_int.h" @@ -52,10 +53,9 @@ lthread_mutex_init(char *name, struct lthread_mutex **mutex, } if (name == NULL) - strncpy(m->name, "no name", sizeof(m->name)); + strlcpy(m->name, "no name", sizeof(m->name)); else - strncpy(m->name, name, sizeof(m->name)); - m->name[sizeof(m->name)-1] = 0; + strlcpy(m->name, name, sizeof(m->name)); m->root_sched = THIS_SCHED; m->owner = NULL; -- 2.25.1
From: Zhihong Peng <zhihongx.peng@intel.com> The gcc(arm-linux-gcc) will check code more stricter when ASan enabled. "strncpy specified bound XX equals destination size" error occurs here. Fixes: 116819b9ed0d ("examples/performance-thread: add lthread subsystem") Cc: stable@dpdk.org Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> --- v11: Use rte_strlcpy to replace strncpy. v12: Delete rte_strlcpy's rte_. --- examples/performance-thread/common/lthread.c | 4 ++-- examples/performance-thread/common/lthread_cond.c | 6 +++--- examples/performance-thread/common/lthread_mutex.c | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/performance-thread/common/lthread.c b/examples/performance-thread/common/lthread.c index 3f1f48db43..190e5874b1 100644 --- a/examples/performance-thread/common/lthread.c +++ b/examples/performance-thread/common/lthread.c @@ -20,6 +20,7 @@ #include <sys/mman.h> #include <rte_log.h> +#include <rte_string_fns.h> #include <ctx.h> #include <stack.h> @@ -463,6 +464,5 @@ void lthread_set_funcname(const char *f) { struct lthread *lt = THIS_LTHREAD; - strncpy(lt->funcname, f, sizeof(lt->funcname)); - lt->funcname[sizeof(lt->funcname)-1] = 0; + strlcpy(lt->funcname, f, sizeof(lt->funcname)); } diff --git a/examples/performance-thread/common/lthread_cond.c b/examples/performance-thread/common/lthread_cond.c index cdcc7a7b5a..e7be17089a 100644 --- a/examples/performance-thread/common/lthread_cond.c +++ b/examples/performance-thread/common/lthread_cond.c @@ -20,6 +20,7 @@ #include <rte_log.h> #include <rte_common.h> +#include <rte_string_fns.h> #include "lthread_api.h" #include "lthread_diag_api.h" @@ -57,10 +58,9 @@ lthread_cond_init(char *name, struct lthread_cond **cond, } if (name == NULL) - strncpy(c->name, "no name", sizeof(c->name)); + strlcpy(c->name, "no name", sizeof(c->name)); else - strncpy(c->name, name, sizeof(c->name)); - c->name[sizeof(c->name)-1] = 0; + strlcpy(c->name, name, sizeof(c->name)); c->root_sched = THIS_SCHED; diff --git a/examples/performance-thread/common/lthread_mutex.c b/examples/performance-thread/common/lthread_mutex.c index 01da6cad4f..709ab9f553 100644 --- a/examples/performance-thread/common/lthread_mutex.c +++ b/examples/performance-thread/common/lthread_mutex.c @@ -19,6 +19,7 @@ #include <rte_log.h> #include <rte_spinlock.h> #include <rte_common.h> +#include <rte_string_fns.h> #include "lthread_api.h" #include "lthread_int.h" @@ -52,10 +53,9 @@ lthread_mutex_init(char *name, struct lthread_mutex **mutex, } if (name == NULL) - strncpy(m->name, "no name", sizeof(m->name)); + strlcpy(m->name, "no name", sizeof(m->name)); else - strncpy(m->name, name, sizeof(m->name)); - m->name[sizeof(m->name)-1] = 0; + strlcpy(m->name, name, sizeof(m->name)); m->root_sched = THIS_SCHED; m->owner = NULL; -- 2.25.1
From: Zhihong Peng <zhihongx.peng@intel.com> The gcc(arm-linux-gcc) will check code more stricter when ASan enabled. "strncpy specified bound XX equals destination size" error occurs here. Fixes: 116819b9ed0d ("examples/performance-thread: add lthread subsystem") Cc: stable@dpdk.org Signed-off-by: Xueqin Lin <xueqin.lin@intel.com> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com> --- v11: Use rte_strlcpy to replace strncpy. v12: Delete rte_strlcpy's rte_. --- examples/performance-thread/common/lthread.c | 4 ++-- examples/performance-thread/common/lthread_cond.c | 6 +++--- examples/performance-thread/common/lthread_mutex.c | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/performance-thread/common/lthread.c b/examples/performance-thread/common/lthread.c index 3f1f48db43..190e5874b1 100644 --- a/examples/performance-thread/common/lthread.c +++ b/examples/performance-thread/common/lthread.c @@ -20,6 +20,7 @@ #include <sys/mman.h> #include <rte_log.h> +#include <rte_string_fns.h> #include <ctx.h> #include <stack.h> @@ -463,6 +464,5 @@ void lthread_set_funcname(const char *f) { struct lthread *lt = THIS_LTHREAD; - strncpy(lt->funcname, f, sizeof(lt->funcname)); - lt->funcname[sizeof(lt->funcname)-1] = 0; + strlcpy(lt->funcname, f, sizeof(lt->funcname)); } diff --git a/examples/performance-thread/common/lthread_cond.c b/examples/performance-thread/common/lthread_cond.c index cdcc7a7b5a..e7be17089a 100644 --- a/examples/performance-thread/common/lthread_cond.c +++ b/examples/performance-thread/common/lthread_cond.c @@ -20,6 +20,7 @@ #include <rte_log.h> #include <rte_common.h> +#include <rte_string_fns.h> #include "lthread_api.h" #include "lthread_diag_api.h" @@ -57,10 +58,9 @@ lthread_cond_init(char *name, struct lthread_cond **cond, } if (name == NULL) - strncpy(c->name, "no name", sizeof(c->name)); + strlcpy(c->name, "no name", sizeof(c->name)); else - strncpy(c->name, name, sizeof(c->name)); - c->name[sizeof(c->name)-1] = 0; + strlcpy(c->name, name, sizeof(c->name)); c->root_sched = THIS_SCHED; diff --git a/examples/performance-thread/common/lthread_mutex.c b/examples/performance-thread/common/lthread_mutex.c index 01da6cad4f..709ab9f553 100644 --- a/examples/performance-thread/common/lthread_mutex.c +++ b/examples/performance-thread/common/lthread_mutex.c @@ -19,6 +19,7 @@ #include <rte_log.h> #include <rte_spinlock.h> #include <rte_common.h> +#include <rte_string_fns.h> #include "lthread_api.h" #include "lthread_int.h" @@ -52,10 +53,9 @@ lthread_mutex_init(char *name, struct lthread_mutex **mutex, } if (name == NULL) - strncpy(m->name, "no name", sizeof(m->name)); + strlcpy(m->name, "no name", sizeof(m->name)); else - strncpy(m->name, name, sizeof(m->name)); - m->name[sizeof(m->name)-1] = 0; + strlcpy(m->name, name, sizeof(m->name)); m->root_sched = THIS_SCHED; m->owner = NULL; -- 2.25.1