test/table: fix build with GCC 11

Message ID 20210517155739.800371-1-ferruh.yigit@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Thomas Monjalon
Headers
Series test/table: fix build with GCC 11 |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-abi-testing success Testing PASS
ci/iol-testing success Testing PASS
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/github-robot success github build: passed
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-mellanox-Functional success Functional Testing PASS

Commit Message

Ferruh Yigit May 17, 2021, 3:57 p.m. UTC
  Build error:
../app/test/test_table_tables.c: In function ‘test_table_stub’:
../app/test/test_table_tables.c:31:9:
	warning: ‘memset’ offset [0, 31] is out of the bounds [0, 0]
	[-Warray-bounds]
         memset((uint8_t *)mbuf + sizeof(struct rte_mbuf) + 32, 0, 32); \
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../app/test/test_table_tables.c:151:25:
	note: in expansion of macro ‘PREPARE_PACKET’
  151 |                         PREPARE_PACKET(mbufs[i], 0xadadadad);
      |                         ^~~~~~~~~~~~~~

'key' points to mbuf header + 32 bytes, and memset clears next 32 bytes
of 'key', so overall there needs to be 64 bytes after mbuf header.
Adding a mbuf size check before memset.

The original code has an assumption that mbuf data buffer follows mbuf
header, this patch accepts same assumption.

Bugzilla ID: 677
Fixes: 5205954791cb ("app/test: packet framework unit tests")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: cristian.dumitrescu@intel.com
Cc: Kevin Traynor <ktraynor@redhat.com>

Not exactly clear why compiler complains about, compiler can't know the
bounds of the memory we try to memset here.
But adding a size check seems logic thing to do also fixes the compiler
warning.
---
 app/test/test_table_tables.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
  

Comments

Thomas Monjalon May 18, 2021, 8:55 a.m. UTC | #1
17/05/2021 17:57, Ferruh Yigit:
> Build error:
> ../app/test/test_table_tables.c: In function ‘test_table_stub’:
> ../app/test/test_table_tables.c:31:9:
> 	warning: ‘memset’ offset [0, 31] is out of the bounds [0, 0]
> 	[-Warray-bounds]
>          memset((uint8_t *)mbuf + sizeof(struct rte_mbuf) + 32, 0, 32); \
>          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ../app/test/test_table_tables.c:151:25:
> 	note: in expansion of macro ‘PREPARE_PACKET’
>   151 |                         PREPARE_PACKET(mbufs[i], 0xadadadad);
>       |                         ^~~~~~~~~~~~~~
> 
> 'key' points to mbuf header + 32 bytes, and memset clears next 32 bytes
> of 'key', so overall there needs to be 64 bytes after mbuf header.
> Adding a mbuf size check before memset.
> 
> The original code has an assumption that mbuf data buffer follows mbuf
> header, this patch accepts same assumption.
> 
> Bugzilla ID: 677
> Fixes: 5205954791cb ("app/test: packet framework unit tests")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
> Cc: cristian.dumitrescu@intel.com
> Cc: Kevin Traynor <ktraynor@redhat.com>
> 
> Not exactly clear why compiler complains about, compiler can't know the
> bounds of the memory we try to memset here.
> But adding a size check seems logic thing to do also fixes the compiler
> warning.

Applied, thanks
  
Kevin Traynor May 18, 2021, 9:29 a.m. UTC | #2
On 18/05/2021 09:55, Thomas Monjalon wrote:
> 17/05/2021 17:57, Ferruh Yigit:
>> Build error:
>> ../app/test/test_table_tables.c: In function ‘test_table_stub’:
>> ../app/test/test_table_tables.c:31:9:
>> 	warning: ‘memset’ offset [0, 31] is out of the bounds [0, 0]
>> 	[-Warray-bounds]
>>          memset((uint8_t *)mbuf + sizeof(struct rte_mbuf) + 32, 0, 32); \
>>          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> ../app/test/test_table_tables.c:151:25:
>> 	note: in expansion of macro ‘PREPARE_PACKET’
>>   151 |                         PREPARE_PACKET(mbufs[i], 0xadadadad);
>>       |                         ^~~~~~~~~~~~~~
>>
>> 'key' points to mbuf header + 32 bytes, and memset clears next 32 bytes
>> of 'key', so overall there needs to be 64 bytes after mbuf header.
>> Adding a mbuf size check before memset.
>>
>> The original code has an assumption that mbuf data buffer follows mbuf
>> header, this patch accepts same assumption.
>>
>> Bugzilla ID: 677
>> Fixes: 5205954791cb ("app/test: packet framework unit tests")
>> Cc: stable@dpdk.org
>>
>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
>> ---
>> Cc: cristian.dumitrescu@intel.com
>> Cc: Kevin Traynor <ktraynor@redhat.com>
>>
>> Not exactly clear why compiler complains about, compiler can't know the
>> bounds of the memory we try to memset here.
>> But adding a size check seems logic thing to do also fixes the compiler
>> warning.
> 
> Applied, thanks
> 

Was just testing this. fwiw, passing build on F34/gcc11 and LGTM.

> 
>
  

Patch

diff --git a/app/test/test_table_tables.c b/app/test/test_table_tables.c
index 1aa269f95d27..4ff6ab16aaaa 100644
--- a/app/test/test_table_tables.c
+++ b/app/test/test_table_tables.c
@@ -28,7 +28,8 @@  table_test table_tests[] = {
 			APP_METADATA_OFFSET(0));			\
 	key = RTE_MBUF_METADATA_UINT8_PTR(mbuf,			\
 			APP_METADATA_OFFSET(32));			\
-	memset(key, 0, 32);						\
+	if (mbuf->priv_size + mbuf->buf_len >= 64)			\
+		memset(key, 0, 32);					\
 	k32 = (uint32_t *) key;						\
 	k32[0] = (value);						\
 	*signature = pipeline_test_hash(key, NULL, 0, 0);			\