29 Jun, 2022

1 commit

  • [ Upstream commit a3bb7b63813f674fb62bac321cdd897cc62de094 ]

    Function fallback_set_params() checks if the module type returned
    by a driver is ETH_MODULE_SFF_8079 and in this case it assumes
    that buffer returns a concatenated content of page A0h and A2h.
    The check is wrong because the correct type is ETH_MODULE_SFF_8472.

    Fixes: 96d971e307cc ("ethtool: Add fallback to get_module_eeprom from netlink command")
    Signed-off-by: Ivan Vecera
    Reviewed-by: Ido Schimmel
    Link: https://lore.kernel.org/r/20220616160856.3623273-1-ivecera@redhat.com
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Sasha Levin

    Ivan Vecera
     

14 Dec, 2021

1 commit

  • commit dde91ccfa25fd58f64c397d91b81a4b393100ffa upstream.

    There is a short period between a net device starts to be unregistered
    and when it is actually gone. In that time frame ethtool operations
    could still be performed, which might end up in unwanted or undefined
    behaviours[1].

    Do not allow ethtool operations after a net device starts its
    unregistration. This patch targets the netlink part as the ioctl one
    isn't affected: the reference to the net device is taken and the
    operation is executed within an rtnl lock section and the net device
    won't be found after unregister.

    [1] For example adding Tx queues after unregister ends up in NULL
    pointer exceptions and UaFs, such as:

    BUG: KASAN: use-after-free in kobject_get+0x14/0x90
    Read of size 1 at addr ffff88801961248c by task ethtool/755

    CPU: 0 PID: 755 Comm: ethtool Not tainted 5.15.0-rc6+ #778
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-4.fc34 04/014
    Call Trace:
    dump_stack_lvl+0x57/0x72
    print_address_description.constprop.0+0x1f/0x140
    kasan_report.cold+0x7f/0x11b
    kobject_get+0x14/0x90
    kobject_add_internal+0x3d1/0x450
    kobject_init_and_add+0xba/0xf0
    netdev_queue_update_kobjects+0xcf/0x200
    netif_set_real_num_tx_queues+0xb4/0x310
    veth_set_channels+0x1c3/0x550
    ethnl_set_channels+0x524/0x610

    Fixes: 041b1c5d4a53 ("ethtool: helper functions for netlink interface")
    Suggested-by: Jakub Kicinski
    Signed-off-by: Antoine Tenart
    Link: https://lore.kernel.org/r/20211203101318.435618-1-atenart@kernel.org
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Greg Kroah-Hartman

    Antoine Tenart
     

01 Dec, 2021

1 commit

  • [ Upstream commit 0276af2176c78771da7f311621a25d7608045827 ]

    ethtool_set_coalesce() now uses both the .get_coalesce() and
    .set_coalesce() callbacks. But the check for their availability is
    buggy, so changing the coalesce settings on a device where the driver
    provides only _one_ of the callbacks results in a NULL pointer
    dereference instead of an -EOPNOTSUPP.

    Fix the condition so that the availability of both callbacks is
    ensured. This also matches the netlink code.

    Note that reproducing this requires some effort - it only affects the
    legacy ioctl path, and needs a specific combination of driver options:
    - have .get_coalesce() and .coalesce_supported but no
    .set_coalesce(), or
    - have .set_coalesce() but no .get_coalesce(). Here eg. ethtool doesn't
    cause the crash as it first attempts to call ethtool_get_coalesce()
    and bails out on error.

    Fixes: f3ccfda19319 ("ethtool: extend coalesce setting uAPI with CQE mode")
    Cc: Yufeng Mo
    Cc: Huazhong Tan
    Cc: Andrew Lunn
    Cc: Heiner Kallweit
    Signed-off-by: Julian Wiedmann
    Link: https://lore.kernel.org/r/20211126175543.28000-1-jwi@linux.ibm.com
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Sasha Levin

    Julian Wiedmann
     

19 Nov, 2021

1 commit

  • [ Upstream commit 1aabe578dd86e9f2867c4db4fba9a15f4ba1825d ]

    ETHTOOL_A_PAUSE_STAT_MAX is the MAX attribute id,
    so we need to subtract non-stats and add one to
    get a count (IOW -2+1 == -1).

    Otherwise we'll see:

    ethnl cmd 21: calculated reply length 40, but consumed 52

    Fixes: 9a27a33027f2 ("ethtool: add standard pause stats")
    Signed-off-by: Jakub Kicinski
    Reviewed-by: Saeed Mahameed
    Signed-off-by: David S. Miller
    Signed-off-by: Sasha Levin

    Jakub Kicinski
     

24 Aug, 2021

2 commits

  • In order to support more coalesce parameters through netlink,
    add two new parameter kernel_coal and extack for .set_coalesce
    and .get_coalesce, then some extra info can return to user with
    the netlink API.

    Signed-off-by: Yufeng Mo
    Signed-off-by: Huazhong Tan
    Signed-off-by: Jakub Kicinski

    Yufeng Mo
     
  • Currently, there are many drivers who support CQE mode configuration,
    some configure it as a fixed when initialized, some provide an
    interface to change it by ethtool private flags. In order to make it
    more generic, add two new 'ETHTOOL_A_COALESCE_USE_CQE_TX' and
    'ETHTOOL_A_COALESCE_USE_CQE_RX' coalesce attributes, then these
    parameters can be accessed by ethtool netlink coalesce uAPI.

    Also add an new structure kernel_ethtool_coalesce, then the
    new parameter can be added into this struct.

    Signed-off-by: Yufeng Mo
    Signed-off-by: Huazhong Tan
    Signed-off-by: Jakub Kicinski

    Yufeng Mo
     

06 Aug, 2021

1 commit

  • Julian reported that after d43c65b05b84 Coverity complains about a
    missing check whether dev is NULL in ethnl_ops_complete().
    There doesn't seem to be any valid case where dev could be NULL when
    calling ethnl_ops_begin(), therefore return an error if dev is NULL.

    Fixes: d43c65b05b84 ("ethtool: runtime-resume netdev parent in ethnl_ops_begin")
    Reported-by: Julian Wiedmann
    Signed-off-by: Heiner Kallweit
    Signed-off-by: David S. Miller

    Heiner Kallweit
     

05 Aug, 2021

1 commit


03 Aug, 2021

4 commits

  • If a network device is runtime-suspended then:
    - network device may be flagged as detached and all ethtool ops (even if not
    accessing the device) will fail because netif_device_present() returns
    false
    - ethtool ops may fail because device is not accessible (e.g. because being
    in D3 in case of a PCI device)

    It may not be desirable that userspace can't use even simple ethtool ops
    that not access the device if interface or link is down. To be more friendly
    to userspace let's ensure that device is runtime-resumed when executing the
    respective ethtool op in kernel.

    Signed-off-by: Heiner Kallweit
    Signed-off-by: David S. Miller

    Heiner Kallweit
     
  • If device is runtime-suspended and not accessible then it may be
    flagged as not present. If checking whether device is present is
    done too early then we may bail out before we have the chance to
    runtime-resume the device. Therefore move this check to
    ethnl_ops_begin(). This is in preparation of a follow-up patch
    that tries to runtime-resume the device before executing ethtool
    ops.

    Signed-off-by: Heiner Kallweit
    Signed-off-by: David S. Miller

    Heiner Kallweit
     
  • In preparation of subsequent extensions to both functions move the
    implementations from netlink.h to netlink.c.

    Signed-off-by: Heiner Kallweit
    Signed-off-by: David S. Miller

    Heiner Kallweit
     
  • If a network device is runtime-suspended then:
    - network device may be flagged as detached and all ethtool ops (even if not
    accessing the device) will fail because netif_device_present() returns
    false
    - ethtool ops may fail because device is not accessible (e.g. because being
    in D3 in case of a PCI device)

    It may not be desirable that userspace can't use even simple ethtool ops
    that not access the device if interface or link is down. To be more friendly
    to userspace let's ensure that device is runtime-resumed when executing the
    respective ethtool op in kernel.

    Signed-off-by: Heiner Kallweit
    Signed-off-by: David S. Miller

    Heiner Kallweit
     

28 Jul, 2021

1 commit

  • The compat handlers for SIOCDEVPRIVATE are incorrect for any driver that
    passes data as part of struct ifreq rather than as an ifr_data pointer, or
    that passes data back this way, since the compat_ifr_data_ioctl() helper
    overwrites the ifr_data pointer and does not copy anything back out.

    Since all drivers using devprivate commands are now converted to the
    new .ndo_siocdevprivate callback, fix this by adding the missing piece
    and passing the pointer separately the whole way.

    This further unifies the native and compat logic for socket ioctls,
    as the new code now passes the correct pointer as well as the correct
    data for both native and compat ioctls.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: David S. Miller

    Arnd Bergmann
     

27 Jul, 2021

1 commit

  • In the cited commit, copy_to_user() got called with the wrong pointer,
    instead of passing the actual buffer ptr to copy from, a pointer to
    the pointer got passed, which causes a buffer overflow calltrace to pop
    up when executing "ethtool -x ethX".

    Fix ethtool_rxnfc_copy_to_user() to use the rxnfc pointer as passed
    to the function, instead of a pointer to it.

    This fixes below call trace:
    [ 15.533533] ------------[ cut here ]------------
    [ 15.539007] Buffer overflow detected (8 < 192)!
    [ 15.544110] WARNING: CPU: 3 PID: 1801 at include/linux/thread_info.h:200 copy_overflow+0x15/0x20
    [ 15.549308] Modules linked in:
    [ 15.551449] CPU: 3 PID: 1801 Comm: ethtool Not tainted 5.14.0-rc2+ #1058
    [ 15.553919] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
    [ 15.558378] RIP: 0010:copy_overflow+0x15/0x20
    [ 15.560648] Code: e9 7c ff ff ff b8 a1 ff ff ff eb c4 66 0f 1f 84 00 00 00 00 00 55 48 89 f2 89 fe 48 c7 c7 88 55 78 8a 48 89 e5 e8 06 5c 1e 00 0b 5d c3 0f 1f 80 00 00 00 00 0f 1f 44 00 00 55 48 89 e5 41 55
    [ 15.565114] RSP: 0018:ffffad49c0523bd0 EFLAGS: 00010286
    [ 15.566231] RAX: 0000000000000000 RBX: 00000000000000c0 RCX: 0000000000000000
    [ 15.567616] RDX: 0000000000000001 RSI: ffffffff8a7912e7 RDI: 00000000ffffffff
    [ 15.569050] RBP: ffffad49c0523bd0 R08: ffffffff8ab2ae28 R09: 00000000ffffdfff
    [ 15.570534] R10: ffffffff8aa4ae40 R11: ffffffff8aa4ae40 R12: 0000000000000000
    [ 15.571899] R13: 00007ffd4cc2a230 R14: ffffad49c0523c00 R15: 0000000000000000
    [ 15.573584] FS: 00007f538112f740(0000) GS:ffff96d5bdd80000(0000) knlGS:0000000000000000
    [ 15.575639] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [ 15.577092] CR2: 00007f5381226d40 CR3: 0000000013542000 CR4: 00000000001506e0
    [ 15.578929] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [ 15.580695] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [ 15.582441] Call Trace:
    [ 15.582970] ethtool_rxnfc_copy_to_user+0x30/0x46
    [ 15.583815] ethtool_get_rxnfc.cold+0x23/0x2b
    [ 15.584584] dev_ethtool+0x29c/0x25f0
    [ 15.585286] ? security_netlbl_sid_to_secattr+0x77/0xd0
    [ 15.586728] ? do_set_pte+0xc4/0x110
    [ 15.587349] ? _raw_spin_unlock+0x18/0x30
    [ 15.588118] ? __might_sleep+0x49/0x80
    [ 15.588956] dev_ioctl+0x2c1/0x490
    [ 15.589616] sock_ioctl+0x18e/0x330
    [ 15.591143] __x64_sys_ioctl+0x41c/0x990
    [ 15.591823] ? irqentry_exit_to_user_mode+0x9/0x20
    [ 15.592657] ? irqentry_exit+0x33/0x40
    [ 15.593308] ? exc_page_fault+0x32f/0x770
    [ 15.593877] ? exit_to_user_mode_prepare+0x3c/0x130
    [ 15.594775] do_syscall_64+0x35/0x80
    [ 15.595397] entry_SYSCALL_64_after_hwframe+0x44/0xae
    [ 15.596037] RIP: 0033:0x7f5381226d4b
    [ 15.596492] Code: 0f 1e fa 48 8b 05 3d b1 0c 00 64 c7 00 26 00 00 00 48 c7 c0 ff ff ff ff c3 66 0f 1f 44 00 00 f3 0f 1e fa b8 10 00 00 00 0f 05 3d 01 f0 ff ff 73 01 c3 48 8b 0d 0d b1 0c 00 f7 d8 64 89 01 48
    [ 15.598743] RSP: 002b:00007ffd4cc2a1f8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
    [ 15.599804] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f5381226d4b
    [ 15.600795] RDX: 00007ffd4cc2a350 RSI: 0000000000008946 RDI: 0000000000000003
    [ 15.601712] RBP: 00007ffd4cc2a340 R08: 00007ffd4cc2a350 R09: 0000000000000001
    [ 15.602751] R10: 00007f538128a990 R11: 0000000000000246 R12: 0000000000000000
    [ 15.603882] R13: 00007ffd4cc2a350 R14: 00007ffd4cc2a4b0 R15: 0000000000000000
    [ 15.605042] ---[ end trace 325cf185e2795048 ]---

    Fixes: dd98d2895de6 ("ethtool: improve compat ioctl handling")
    Reported-by: Shannon Nelson
    CC: Arnd Bergmann
    CC: Christoph Hellwig
    Signed-off-by: Saeed Mahameed
    Tested-by: Shannon Nelson
    Acked-by: Arnd Bergmann
    Signed-off-by: David S. Miller

    Saeed Mahameed
     

23 Jul, 2021

1 commit

  • The ethtool compat ioctl handling is hidden away in net/socket.c,
    which introduces a couple of minor oddities:

    - The implementation may end up diverging, as seen in the RXNFC
    extension in commit 84a1d9c48200 ("net: ethtool: extend RXNFC
    API to support RSS spreading of filter matches") that does not work
    in compat mode.

    - Most architectures do not need the compat handling at all
    because u64 and compat_u64 have the same alignment.

    - On x86, the conversion is done for both x32 and i386 user space,
    but it's actually wrong to do it for x32 and cannot work there.

    - On 32-bit Arm, it never worked for compat oabi user space, since
    that needs to do the same conversion but does not.

    - It would be nice to get rid of both compat_alloc_user_space()
    and copy_in_user() throughout the kernel.

    None of these actually seems to be a serious problem that real
    users are likely to encounter, but fixing all of them actually
    leads to code that is both shorter and more readable.

    Signed-off-by: Arnd Bergmann
    Reviewed-by: Christoph Hellwig
    Signed-off-by: David S. Miller

    Arnd Bergmann
     

02 Jul, 2021

2 commits

  • Since PTP virtual clock support is added, there can be
    several PTP virtual clocks based on one PTP physical
    clock for timestamping.

    This patch is to extend SO_TIMESTAMPING API to support
    PHC (PTP Hardware Clock) binding by adding a new flag
    SOF_TIMESTAMPING_BIND_PHC. When PTP virtual clocks are
    in use, user space can configure to bind one for
    timestamping, but PTP physical clock is not supported
    and not needed to bind.

    This patch is preparation for timestamp conversion from
    raw timestamp to a specific PTP virtual clock time in
    core net.

    Signed-off-by: Yangbo Lu
    Signed-off-by: David S. Miller

    Yangbo Lu
     
  • Add an interface for getting PHC (PTP Hardware Clock)
    virtual clocks, which are based on PHC physical clock
    providing hardware timestamp to network packets.

    Signed-off-by: Yangbo Lu
    Signed-off-by: David S. Miller

    Yangbo Lu
     

23 Jun, 2021

3 commits


19 Jun, 2021

1 commit


16 Jun, 2021

1 commit

  • There has been a few errors in the ethtool reply size calculations,
    most of those are hard to trigger during basic testing because of
    skb size rounding up and netdev names being shorter than max.
    Add a more precise check.

    This change will affect the value of payload length displayed in
    case of -EMSGSIZE but that should be okay, "payload length" isn't
    a well defined term here.

    Signed-off-by: Jakub Kicinski
    Signed-off-by: David S. Miller

    Jakub Kicinski
     

15 Jun, 2021

1 commit

  • Outer nest for ETHTOOL_A_STRSET_STRINGSETS is not accounted for.
    This may result in ETHTOOL_MSG_STRSET_GET producing a warning like:

    calculated message payload length (684) not sufficient
    WARNING: CPU: 0 PID: 30967 at net/ethtool/netlink.c:369 ethnl_default_doit+0x87a/0xa20

    and a splat.

    As usually with such warnings three conditions must be met for the warning
    to trigger:
    - there must be no skb size rounding up (e.g. reply_size of 684);
    - string set must be per-device (so that the header gets populated);
    - the device name must be at least 12 characters long.

    all in all with current user space it looks like reading priv flags
    is the only place this could potentially happen. Or with syzbot :)

    Reported-by: syzbot+59aa77b92d06cd5a54f2@syzkaller.appspotmail.com
    Fixes: 71921690f974 ("ethtool: provide string sets with STRSET_GET request")
    Signed-off-by: Jakub Kicinski
    Signed-off-by: David S. Miller

    Jakub Kicinski
     

10 Jun, 2021

1 commit


08 Jun, 2021

1 commit

  • When get_module_eeprom_by_page() is not implemented by the driver, NULL
    pointer dereference can occur [1].

    Fix by testing if get_module_eeprom_by_page() is implemented instead of
    get_module_info().

    [1]
    BUG: kernel NULL pointer dereference, address: 0000000000000000
    [...]
    CPU: 0 PID: 251 Comm: ethtool Not tainted 5.13.0-rc3-custom-00940-g3822d0670c9d #989
    Call Trace:
    eeprom_prepare_data+0x101/0x2d0
    ethnl_default_doit+0xc2/0x290
    genl_family_rcv_msg_doit+0xdc/0x140
    genl_rcv_msg+0xd7/0x1d0
    netlink_rcv_skb+0x49/0xf0
    genl_rcv+0x1f/0x30
    netlink_unicast+0x1f6/0x2c0
    netlink_sendmsg+0x1f9/0x400
    __sys_sendto+0xe1/0x130
    __x64_sys_sendto+0x1b/0x20
    do_syscall_64+0x3a/0x70
    entry_SYSCALL_64_after_hwframe+0x44/0xae

    Fixes: c97a31f66ebc ("ethtool: wire in generic SFP module access")
    Signed-off-by: Ido Schimmel
    Acked-by: Moshe Shemesh
    Signed-off-by: David S. Miller

    Ido Schimmel
     

03 Jun, 2021

1 commit


20 May, 2021

1 commit


06 May, 2021

1 commit

  • When dumping the ethtool information from all the interfaces, the
    netlink reply should contain the NLM_F_MULTI flag. This flag allows
    userspace tools to identify that multiple messages are expected.

    Link: https://bugzilla.redhat.com/1953847
    Fixes: 365f9ae4ee36 ("ethtool: fix genlmsg_put() failure handling in ethnl_default_dumpit()")
    Signed-off-by: Fernando Fernandez Mancera
    Signed-off-by: David S. Miller

    Fernando Fernandez Mancera
     

20 Apr, 2021

2 commits

  • Ido suggests we add a comment about the init of stats to -1.
    This is unlikely to be clear to first time readers.

    Suggested-by: Ido Schimmel
    Signed-off-by: Jakub Kicinski
    Signed-off-by: David S. Miller

    Jakub Kicinski
     
  • Fix the following out-of-bounds warning:

    net/ethtool/ioctl.c:492:2: warning: 'memcpy' offset [49, 84] from the object at 'link_usettings' is out of the bounds of referenced subobject 'base' with type 'struct ethtool_link_settings' at offset 0 [-Warray-bounds]

    The problem is that the original code is trying to copy data into a
    some struct members adjacent to each other in a single call to
    memcpy(). This causes a legitimate compiler warning because memcpy()
    overruns the length of &link_usettings.base. Fix this by directly
    using &link_usettings and _from_ as destination and source addresses,
    instead.

    This helps with the ongoing efforts to globally enable -Warray-bounds
    and get us closer to being able to tighten the FORTIFY_SOURCE routines
    on memcpy().

    Link: https://github.com/KSPP/linux/issues/109
    Reported-by: kernel test robot
    Signed-off-by: Gustavo A. R. Silva
    Signed-off-by: David S. Miller

    Gustavo A. R. Silva
     

18 Apr, 2021

1 commit


17 Apr, 2021

4 commits

  • Most devices maintain RMON (RFC 2819) stats - particularly
    the "histogram" of packets received by size. Unlike other
    RFCs which duplicate IEEE stats, the short/oversized frame
    counters in RMON don't seem to match IEEE stats 1-to-1 either,
    so expose those, too. Do not expose basic packet, CRC errors
    etc - those are already otherwise covered.

    Because standard defines packet ranges only up to 1518, and
    everything above that should theoretically be "oversized"
    - devices often create their own ranges.

    Going beyond what the RFC defines - expose the "histogram"
    in the Tx direction (assume for now that the ranges will
    be the same).

    Signed-off-by: Jakub Kicinski
    Signed-off-by: David S. Miller

    Jakub Kicinski
     
  • Number of devices maintains the standard-based MAC control
    counters for control frames. Add a API for those.

    Signed-off-by: Jakub Kicinski
    Signed-off-by: David S. Miller

    Jakub Kicinski
     
  • Most of the MAC statistics are included in
    struct rtnl_link_stats64, but some fields
    are aggregated. Besides it's good to expose
    these clearly hardware stats separately.

    Signed-off-by: Jakub Kicinski
    Signed-off-by: David S. Miller

    Jakub Kicinski
     
  • Add an interface for reading standard stats, including
    stats which don't have a corresponding control interface.

    Start with IEEE 802.3 PHY stats. There seems to be only
    one stat to expose there.

    Define API to not require user space changes when new
    stats or groups are added. Groups are based on bitset,
    stats have a string set associated.

    v1: wrap stats in a nest

    Signed-off-by: Jakub Kicinski
    Signed-off-by: David S. Miller

    Jakub Kicinski
     

16 Apr, 2021

3 commits

  • Similarly to pause statistics add stats for FEC.

    The IEEE standard mandates two sets of counters:
    - 30.5.1.1.17 aFECCorrectedBlocks
    - 30.5.1.1.18 aFECUncorrectableBlocks
    where block is a block of bits FEC operates on.
    Each of these counters is defined per lane (PCS instance).

    Multiple vendors provide number of corrected _bits_ rather
    than/as well as blocks.

    This set adds the 2 standard-based block counters and a extra
    one for corrected bits.

    Counters are exposed to user space via netlink in new attributes.
    Each attribute carries an array of u64s, first element is
    the total count, and the following ones are a per-lane break down.

    Much like with pause stats the operation will not fail when driver
    does not implement the get_fec_stats callback (nor can the driver
    fail the operation by returning an error). If stats can't be
    reported the relevant attributes will be empty.

    Signed-off-by: Jakub Kicinski
    Signed-off-by: David S. Miller

    Jakub Kicinski
     
  • Refactor fec_prepare_data() a little bit to skip the body
    of the function and exit on error. Currently the code
    depends on the fact that we only have one call which
    may fail between ethnl_ops_begin() and ethnl_ops_complete()
    and simply saves the error code. This will get hairy with
    the stats also being queried.

    No functional changes.

    Signed-off-by: Jakub Kicinski
    Signed-off-by: David S. Miller

    Jakub Kicinski
     
  • We'll need it for FEC stats as well.

    Signed-off-by: Jakub Kicinski
    Signed-off-by: David S. Miller

    Jakub Kicinski
     

15 Apr, 2021

1 commit

  • The intention was for pause statistics to not be reported
    when driver does not have the relevant callback (only
    report an empty netlink nest). What happens currently
    we report all 0s instead. Make sure statistics are
    initialized to "not set" (which is -1) so the dumping
    code skips them.

    Fixes: 9a27a33027f2 ("ethtool: add standard pause stats")
    Signed-off-by: Jakub Kicinski
    Signed-off-by: David S. Miller

    Jakub Kicinski
     

13 Apr, 2021

1 commit