lkml.org 
[lkml]   [2015]   [Mar]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.16.y-ckt 009/165] rtnetlink: ifla_vf_policy: fix misuses of NLA_BINARY
    Date
    3.16.7-ckt9 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Daniel Borkmann <daniel@iogearbox.net>

    commit 364d5716a7adb91b731a35765d369602d68d2881 upstream.

    ifla_vf_policy[] is wrong in advertising its individual member types as
    NLA_BINARY since .type = NLA_BINARY in combination with .len declares the
    len member as *max* attribute length [0, len].

    The issue is that when do_setvfinfo() is being called to set up a VF
    through ndo handler, we could set corrupted data if the attribute length
    is less than the size of the related structure itself.

    The intent is exactly the opposite, namely to make sure to pass at least
    data of minimum size of len.

    Fixes: ebc08a6f47ee ("rtnetlink: Add VF config code to rtnetlink")
    Cc: Mitch Williams <mitch.a.williams@intel.com>
    Cc: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Thomas Graf <tgraf@suug.ch>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
    ---
    net/core/rtnetlink.c | 18 ++++++------------
    1 file changed, 6 insertions(+), 12 deletions(-)

    diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
    index 2128423f8a7c..888136a75454 100644
    --- a/net/core/rtnetlink.c
    +++ b/net/core/rtnetlink.c
    @@ -1207,18 +1207,12 @@ static const struct nla_policy ifla_vfinfo_policy[IFLA_VF_INFO_MAX+1] = {
    };

    static const struct nla_policy ifla_vf_policy[IFLA_VF_MAX+1] = {
    - [IFLA_VF_MAC] = { .type = NLA_BINARY,
    - .len = sizeof(struct ifla_vf_mac) },
    - [IFLA_VF_VLAN] = { .type = NLA_BINARY,
    - .len = sizeof(struct ifla_vf_vlan) },
    - [IFLA_VF_TX_RATE] = { .type = NLA_BINARY,
    - .len = sizeof(struct ifla_vf_tx_rate) },
    - [IFLA_VF_SPOOFCHK] = { .type = NLA_BINARY,
    - .len = sizeof(struct ifla_vf_spoofchk) },
    - [IFLA_VF_RATE] = { .type = NLA_BINARY,
    - .len = sizeof(struct ifla_vf_rate) },
    - [IFLA_VF_LINK_STATE] = { .type = NLA_BINARY,
    - .len = sizeof(struct ifla_vf_link_state) },
    + [IFLA_VF_MAC] = { .len = sizeof(struct ifla_vf_mac) },
    + [IFLA_VF_VLAN] = { .len = sizeof(struct ifla_vf_vlan) },
    + [IFLA_VF_TX_RATE] = { .len = sizeof(struct ifla_vf_tx_rate) },
    + [IFLA_VF_SPOOFCHK] = { .len = sizeof(struct ifla_vf_spoofchk) },
    + [IFLA_VF_RATE] = { .len = sizeof(struct ifla_vf_rate) },
    + [IFLA_VF_LINK_STATE] = { .len = sizeof(struct ifla_vf_link_state) },
    };

    static const struct nla_policy ifla_port_policy[IFLA_PORT_MAX+1] = {

    \
     
     \ /
      Last update: 2015-03-25 16:21    [W:4.041 / U:0.148 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site