• Alexander Lobakin's avatar
    net: qed: fix buffer overflow on ethtool -d · da328711
    Alexander Lobakin authored
    When generating debug dump, driver firstly collects all data in binary
    form, and then performs per-feature formatting to human-readable if it
    is supported.
    
    For ethtool -d, this is roughly incorrect for two reasons. First of all,
    drivers should always provide only original raw dumps to Ethtool without
    any changes.
    The second, and more critical, is that Ethtool's output buffer size is
    strictly determined by ethtool_ops::get_regs_len(), and all data *must*
    fit in it. The current version of driver always returns the size of raw
    data, but the size of the formatted buffer exceeds it in most cases.
    This leads to out-of-bound writes and memory corruption.
    
    Address both issues by adding an option to return original, non-formatted
    debug data, and using it for Ethtool case.
    
    v2:
     - Expand commit message to make it more clear;
     - No functional changes.
    
    Fixes: c965db44 ("qed: Add support for debug data collection")
    Signed-off-by: default avatarAlexander Lobakin <alobakin@marvell.com>
    Signed-off-by: default avatarIgor Russkikh <irusskikh@marvell.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    da328711
qed_debug.c 225 KB