[dpdk-dev] net/tap: fix memcpy with incorrect size

Message ID 20180406113031.30340-1-pbhagavatula@caviumnetworks.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation fail apply issues

Commit Message

Pavan Nikhilesh April 6, 2018, 11:30 a.m. UTC
  Fix incorrect sizeof operation being used for getting mac addr size.

Found while compiling with arm64 clang.
drivers/net/tap/rte_eth_tap.c:1410:40: error: argument to 'sizeof' in
    'memcpy' call is the same pointer type 'struct ether_addr *' as the
    destination; expected 'struct ether_addr' or an explicit length
    [-Werror,-Wsizeof-pointer-memaccess]
       rte_memcpy(&pmd->eth_addr, mac_addr, sizeof(mac_addr));
                  ~~~~~~~~~~~~~~            ^~~~~~~~~~~~~~~~

Fixes: bcab6c1d27fa ("net/tap: allow user MAC to be passed as args")

Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
---
 drivers/net/tap/rte_eth_tap.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Yang, Zhiyong April 6, 2018, 11:50 a.m. UTC | #1
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Pavan Nikhilesh
> Sent: Friday, April 6, 2018 7:31 PM
> To: jerin.jacob@caviumnetworks.com; Yigit, Ferruh <ferruh.yigit@intel.com>;
> pascal.mazon@6wind.com; Varghese, Vipin <vipin.varghese@intel.com>;
> thomas@monjalon.net
> Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> Subject: [dpdk-dev] [PATCH] net/tap: fix memcpy with incorrect size
> 
> Fix incorrect sizeof operation being used for getting mac addr size.
> 
> Found while compiling with arm64 clang.
> drivers/net/tap/rte_eth_tap.c:1410:40: error: argument to 'sizeof' in
>     'memcpy' call is the same pointer type 'struct ether_addr *' as the
>     destination; expected 'struct ether_addr' or an explicit length
>     [-Werror,-Wsizeof-pointer-memaccess]
>        rte_memcpy(&pmd->eth_addr, mac_addr, sizeof(mac_addr));
>                   ~~~~~~~~~~~~~~            ^~~~~~~~~~~~~~~~
> 
> Fixes: bcab6c1d27fa ("net/tap: allow user MAC to be passed as args")
> 
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> ---

Good catch!

Acked-by: Zhiyong Yang <zhiyong.yang@intel.com>
  
Ferruh Yigit April 6, 2018, 3:02 p.m. UTC | #2
On 4/6/2018 12:50 PM, Yang, Zhiyong wrote:
> 
>> -----Original Message-----
>> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Pavan Nikhilesh
>> Sent: Friday, April 6, 2018 7:31 PM
>> To: jerin.jacob@caviumnetworks.com; Yigit, Ferruh <ferruh.yigit@intel.com>;
>> pascal.mazon@6wind.com; Varghese, Vipin <vipin.varghese@intel.com>;
>> thomas@monjalon.net
>> Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
>> Subject: [dpdk-dev] [PATCH] net/tap: fix memcpy with incorrect size
>>
>> Fix incorrect sizeof operation being used for getting mac addr size.
>>
>> Found while compiling with arm64 clang.
>> drivers/net/tap/rte_eth_tap.c:1410:40: error: argument to 'sizeof' in
>>     'memcpy' call is the same pointer type 'struct ether_addr *' as the
>>     destination; expected 'struct ether_addr' or an explicit length
>>     [-Werror,-Wsizeof-pointer-memaccess]
>>        rte_memcpy(&pmd->eth_addr, mac_addr, sizeof(mac_addr));
>>                   ~~~~~~~~~~~~~~            ^~~~~~~~~~~~~~~~
>>
>> Fixes: bcab6c1d27fa ("net/tap: allow user MAC to be passed as args")
>>
>> Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>

> Acked-by: Zhiyong Yang <zhiyong.yang@intel.com>

Applied to dpdk-next-net/master, thanks.
  

Patch

diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
index 3e4f7a8e8..6ed4a8a02 100644
--- a/drivers/net/tap/rte_eth_tap.c
+++ b/drivers/net/tap/rte_eth_tap.c
@@ -1406,7 +1406,7 @@  eth_dev_tap_create(struct rte_vdev_device *vdev, char *tap_name,
 	if (is_zero_ether_addr(mac_addr))
 		eth_random_addr((uint8_t *)&pmd->eth_addr);
 	else
-		rte_memcpy(&pmd->eth_addr, mac_addr, sizeof(mac_addr));
+		rte_memcpy(&pmd->eth_addr, mac_addr, sizeof(*mac_addr));
 
 	/* Immediately create the netdevice (this will create the 1st queue). */
 	/* rx queue */