[dpdk-dev,v4] examples/qos_sched: fix bad bit shift operation

Message ID 1462956485-3701-1-git-send-email-slawomirx.mrozowicz@intel.com (mailing list archive)
State Accepted, archived
Headers

Commit Message

Slawomir Mrozowicz May 11, 2016, 8:48 a.m. UTC
  Fix issue reported by Coverity.

Coverity ID 30690: Bad bit shift operation
large_shift: In expression 1ULL << i, left shifting by more than 63 bits
has undefined behavior. The shift amount, i, is as much as 127.

Fixes: de3cfa2c9823 ("sched: initial import")

Signed-off-by: Slawomir Mrozowicz <slawomirx.mrozowicz@intel.com>
---
 examples/qos_sched/args.c | 4 ++--
 examples/qos_sched/main.h | 5 ++++-
 2 files changed, 6 insertions(+), 3 deletions(-)
  

Comments

Cristian Dumitrescu May 11, 2016, 10:17 a.m. UTC | #1
> -----Original Message-----
> From: Mrozowicz, SlawomirX
> Sent: Wednesday, May 11, 2016 9:48 AM
> To: Dumitrescu, Cristian <cristian.dumitrescu@intel.com>
> Cc: dev@dpdk.org; Singh, Jasvinder <jasvinder.singh@intel.com>;
> Mrozowicz, SlawomirX <slawomirx.mrozowicz@intel.com>
> Subject: [PATCH v4] examples/qos_sched: fix bad bit shift operation
> 
> Fix issue reported by Coverity.
> 
> Coverity ID 30690: Bad bit shift operation
> large_shift: In expression 1ULL << i, left shifting by more than 63 bits
> has undefined behavior. The shift amount, i, is as much as 127.
> 
> Fixes: de3cfa2c9823 ("sched: initial import")
> 
> Signed-off-by: Slawomir Mrozowicz <slawomirx.mrozowicz@intel.com>
> ---
>  examples/qos_sched/args.c | 4 ++--
>  examples/qos_sched/main.h | 5 ++++-
>  2 files changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/examples/qos_sched/args.c b/examples/qos_sched/args.c
> index 3e7fd08..354372d 100644
> --- a/examples/qos_sched/args.c
> +++ b/examples/qos_sched/args.c
> @@ -123,7 +123,7 @@ app_eal_core_mask(void)
>  	uint64_t cm = 0;
>  	struct rte_config *cfg = rte_eal_get_configuration();
> 
> -	for (i = 0; i < RTE_MAX_LCORE; i++) {
> +	for (i = 0; i < APP_MAX_LCORE; i++) {
>  		if (cfg->lcore_role[i] == ROLE_RTE)
>  			cm |= (1ULL << i);
>  	}
> @@ -142,7 +142,7 @@ app_cpu_core_count(void)
>  	char path[PATH_MAX];
>  	uint32_t ncores = 0;
> 
> -	for(i = 0; i < RTE_MAX_LCORE; i++) {
> +	for (i = 0; i < APP_MAX_LCORE; i++) {
>  		len = snprintf(path, sizeof(path), SYS_CPU_DIR, i);
>  		if (len <= 0 || (unsigned)len >= sizeof(path))
>  			continue;
> diff --git a/examples/qos_sched/main.h b/examples/qos_sched/main.h
> index 82aa0fa..c7490c6 100644
> --- a/examples/qos_sched/main.h
> +++ b/examples/qos_sched/main.h
> @@ -68,7 +68,10 @@ extern "C" {
> 
>  #define BURST_TX_DRAIN_US 100
> 
> -#define MAX_DATA_STREAMS (RTE_MAX_LCORE/2)
> +#ifndef APP_MAX_LCORE
> +#define APP_MAX_LCORE 64
> +#endif
> +#define MAX_DATA_STREAMS (APP_MAX_LCORE/2)
>  #define MAX_SCHED_SUBPORTS		8
>  #define MAX_SCHED_PIPES		4096
> 
> --
> 1.9.1

Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
  
Thomas Monjalon May 16, 2016, 4:34 p.m. UTC | #2
> > Subject: [PATCH v4] examples/qos_sched: fix bad bit shift operation

Slawomir, please use --in-reply-to when sending a new revision,
to let us see the full history in our mailer and in the archives.

[...]
> > diff --git a/examples/qos_sched/args.c b/examples/qos_sched/args.c
> > index 3e7fd08..354372d 100644
> > --- a/examples/qos_sched/args.c
> > +++ b/examples/qos_sched/args.c
> > @@ -123,7 +123,7 @@ app_eal_core_mask(void)
> >  	uint64_t cm = 0;
> >  	struct rte_config *cfg = rte_eal_get_configuration();
> > 
> > -	for (i = 0; i < RTE_MAX_LCORE; i++) {
> > +	for (i = 0; i < APP_MAX_LCORE; i++) {
> >  		if (cfg->lcore_role[i] == ROLE_RTE)
> >  			cm |= (1ULL << i);
> >  	}
> > @@ -142,7 +142,7 @@ app_cpu_core_count(void)
> >  	char path[PATH_MAX];
> >  	uint32_t ncores = 0;
> > 
> > -	for(i = 0; i < RTE_MAX_LCORE; i++) {
> > +	for (i = 0; i < APP_MAX_LCORE; i++) {
> >  		len = snprintf(path, sizeof(path), SYS_CPU_DIR, i);
> >  		if (len <= 0 || (unsigned)len >= sizeof(path))
> >  			continue;
> > diff --git a/examples/qos_sched/main.h b/examples/qos_sched/main.h
> > index 82aa0fa..c7490c6 100644
> > --- a/examples/qos_sched/main.h
> > +++ b/examples/qos_sched/main.h
> > @@ -68,7 +68,10 @@ extern "C" {
> > 
> >  #define BURST_TX_DRAIN_US 100
> > 
> > -#define MAX_DATA_STREAMS (RTE_MAX_LCORE/2)
> > +#ifndef APP_MAX_LCORE
> > +#define APP_MAX_LCORE 64
> > +#endif
> > +#define MAX_DATA_STREAMS (APP_MAX_LCORE/2)
> >  #define MAX_SCHED_SUBPORTS		8
> >  #define MAX_SCHED_PIPES		4096
> > 
> > --
> > 1.9.1
> 
> Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>

Cristian, please remove patch content when acking.
My hand is tired of scrolling ;)
  
Thomas Monjalon May 16, 2016, 4:39 p.m. UTC | #3
> > Fix issue reported by Coverity.
> > 
> > Coverity ID 30690: Bad bit shift operation
> > large_shift: In expression 1ULL << i, left shifting by more than 63 bits
> > has undefined behavior. The shift amount, i, is as much as 127.
> > 
> > Fixes: de3cfa2c9823 ("sched: initial import")
> > 
> > Signed-off-by: Slawomir Mrozowicz <slawomirx.mrozowicz@intel.com>
> 
> Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>

Applied, thanks
  

Patch

diff --git a/examples/qos_sched/args.c b/examples/qos_sched/args.c
index 3e7fd08..354372d 100644
--- a/examples/qos_sched/args.c
+++ b/examples/qos_sched/args.c
@@ -123,7 +123,7 @@  app_eal_core_mask(void)
 	uint64_t cm = 0;
 	struct rte_config *cfg = rte_eal_get_configuration();
 
-	for (i = 0; i < RTE_MAX_LCORE; i++) {
+	for (i = 0; i < APP_MAX_LCORE; i++) {
 		if (cfg->lcore_role[i] == ROLE_RTE)
 			cm |= (1ULL << i);
 	}
@@ -142,7 +142,7 @@  app_cpu_core_count(void)
 	char path[PATH_MAX];
 	uint32_t ncores = 0;
 
-	for(i = 0; i < RTE_MAX_LCORE; i++) {
+	for (i = 0; i < APP_MAX_LCORE; i++) {
 		len = snprintf(path, sizeof(path), SYS_CPU_DIR, i);
 		if (len <= 0 || (unsigned)len >= sizeof(path))
 			continue;
diff --git a/examples/qos_sched/main.h b/examples/qos_sched/main.h
index 82aa0fa..c7490c6 100644
--- a/examples/qos_sched/main.h
+++ b/examples/qos_sched/main.h
@@ -68,7 +68,10 @@  extern "C" {
 
 #define BURST_TX_DRAIN_US 100
 
-#define MAX_DATA_STREAMS (RTE_MAX_LCORE/2)
+#ifndef APP_MAX_LCORE
+#define APP_MAX_LCORE 64
+#endif
+#define MAX_DATA_STREAMS (APP_MAX_LCORE/2)
 #define MAX_SCHED_SUBPORTS		8
 #define MAX_SCHED_PIPES		4096