• J
    ixgbe: ethtool: stats user buffer overrun · 9cc00b51
    John Fastabend 提交于
    If the number of tx/rx queues changes the ethtool ioctl
    ETHTOOL_GSTATS may overrun the userspace buffer. This
    occurs because the general practice in user space to
    query stats is to issue a ETHTOOL_GSSET cmd to learn the
    buffer size needed, allocate the buffer, then call
    ETHTOOL_GSTIRNGS and ETHTOOL_GSTATS. If the number of
    real_num_queues is changed or flow control attributes
    are changed after ETHTOOL_GSSET but before the
    ETHTOOL_GSTRINGS/ETHTOOL_GSTATS a user space buffer
    overrun occurs.
    
    To fix the overrun always return the max buffer size
    needed from get_sset_count() then return all strings
    and stats from get_strings()/get_ethtool_stats().
    
    This _will_ change the output from the ioctl() call
    which could break applications and script parsing in
    theory. I believe these changes should not break existing
    tools because the only changes will be more {tx|rx}_queues
    and the {tx|rx}_pb_* stats will always be returned.
    Existing scripts already need to handle changing number
    of queues because this occurs today depending on system
    and current features. The {tx|rx}_pb_* stats are at the
    end of the output and should be handled by scripts today
    regardless.
    
    Finally get_ethtool_stats and get_strings are free-form
    outputs tools parsing these outputs should be defensive
    anyways. In the end these updates are better then
    having a tool segfault because of a buffer overrun.
    Signed-off-by: NJohn Fastabend <john.r.fastabend@intel.com>
    Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
    9cc00b51
ixgbe_ethtool.c 77.9 KB