lkml.org 
[lkml]   [2021]   [Dec]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 03/17] net/mlx5e: Use struct_group() for memcpy() region
    Date
    In preparation for FORTIFY_SOURCE performing compile-time and run-time
    field bounds checking for memcpy(), memmove(), and memset(), avoid
    intentionally writing across neighboring fields.

    Use struct_group() in struct vlan_ethhdr around members h_dest and
    h_source, so they can be referenced together. This will allow memcpy()
    and sizeof() to more easily reason about sizes, improve readability,
    and avoid future warnings about writing beyond the end of h_dest.

    "pahole" shows no size nor member offset changes to struct vlan_ethhdr.
    "objdump -d" shows no object code changes.

    Cc: Saeed Mahameed <saeedm@nvidia.com>
    Cc: Leon Romanovsky <leon@kernel.org>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Jakub Kicinski <kuba@kernel.org>
    Cc: netdev@vger.kernel.org
    Cc: linux-rdma@vger.kernel.org
    Signed-off-by: Kees Cook <keescook@chromium.org>
    ---
    drivers/net/ethernet/mellanox/mlx5/core/en_tx.c | 2 +-
    include/linux/if_vlan.h | 6 ++++--
    2 files changed, 5 insertions(+), 3 deletions(-)

    diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c
    index 7fd33b356cc8..ee7ecb88adc1 100644
    --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c
    +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c
    @@ -208,7 +208,7 @@ static inline void mlx5e_insert_vlan(void *start, struct sk_buff *skb, u16 ihs)
    int cpy1_sz = 2 * ETH_ALEN;
    int cpy2_sz = ihs - cpy1_sz;

    - memcpy(vhdr, skb->data, cpy1_sz);
    + memcpy(&vhdr->addrs, skb->data, cpy1_sz);
    vhdr->h_vlan_proto = skb->vlan_proto;
    vhdr->h_vlan_TCI = cpu_to_be16(skb_vlan_tag_get(skb));
    memcpy(&vhdr->h_vlan_encapsulated_proto, skb->data + cpy1_sz, cpy2_sz);
    diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h
    index 8420fe504927..2be4dd7e90a9 100644
    --- a/include/linux/if_vlan.h
    +++ b/include/linux/if_vlan.h
    @@ -46,8 +46,10 @@ struct vlan_hdr {
    * @h_vlan_encapsulated_proto: packet type ID or len
    */
    struct vlan_ethhdr {
    - unsigned char h_dest[ETH_ALEN];
    - unsigned char h_source[ETH_ALEN];
    + struct_group(addrs,
    + unsigned char h_dest[ETH_ALEN];
    + unsigned char h_source[ETH_ALEN];
    + );
    __be16 h_vlan_proto;
    __be16 h_vlan_TCI;
    __be16 h_vlan_encapsulated_proto;
    --
    2.30.2
    \
     
     \ /
      Last update: 2021-12-13 23:34    [W:5.633 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site