Hi,

We are seeing reproducible kernel panics on the i40e driver when an
ethtool command is interrupted, for instance with OOM.

The issue reproduces on 7.0.0 as well as 7.1-rc7 (built with Clang
22.1.7), on Ubuntu 22.04 LTS
on a system with the following hardware: Gigabyte MZ92-FS1-00 - Dual
EPYC 7763 - Intel XL710 NIC (both ports connected)
with the following kernel parameters: mem=8G nr_cpus=128
then running this command while the system is under memory pressure:
ethtool -G $nic rx 4096 tx 4096

The ethtool command is killed by OOM and leaves the driver in an invalid
state; it then panics during packet processing.

Below is the full oops, including information from
./scripts/decode_stacktrace.sh:

[   33.028260] BUG: unable to handle page fault for address: 0000000000002000
[   33.035732] #PF: supervisor read access in kernel mode
[   33.035735] #PF: error_code(0x0000) - not-present page
[   33.035737] PGD 0 P4D 0
[   33.049543] Oops: Oops: 0000 [#1] SMP NOPTI
[   33.049548] CPU: 29 UID: 0 PID: 0 Comm: swapper/29 Not tainted 7.1.0-rc7-fly 
#glocaltest PREEMPT(full)
[   33.049553] Hardware name: GIGABYTE R182-Z93-00/MZ92-FS1-00, BIOS M10 
11/23/2021
[   33.049555] RIP: 0010:i40e_napi_poll (??:0 
drivers/net/ethernet/intel/i40e/i40e_txrx.c:942 
drivers/net/ethernet/intel/i40e/i40e_txrx.c:2769) i40e
[   33.076892] Code: 00 00 00 00 4d 01 ef 41 c1 e7 03 4c 03 7b 28 48 8b 43 08 
45 89 ec 41 c1 e4 04 49 01 c4 0f b7 8b 84 00 00 00 41 29 cd c1 e1 04 <8b> 0c 08 
48 c1 e1 04 48 01 c1 48 89 8d 30 ff ff ff c7 45 cc 00 00
All code
========
   0:   00 00                   add    %al,(%rax)
   2:   00 00                   add    %al,(%rax)
   4:   4d 01 ef                add    %r13,%r15
   7:   41 c1 e7 03             shl    $0x3,%r15d
   b:   4c 03 7b 28             add    0x28(%rbx),%r15
   f:   48 8b 43 08             mov    0x8(%rbx),%rax
  13:   45 89 ec                mov    %r13d,%r12d
  16:   41 c1 e4 04             shl    $0x4,%r12d
  1a:   49 01 c4                add    %rax,%r12
  1d:   0f b7 8b 84 00 00 00    movzwl 0x84(%rbx),%ecx
  24:   41 29 cd                sub    %ecx,%r13d
  27:   c1 e1 04                shl    $0x4,%ecx
  2a:*  8b 0c 08                mov    (%rax,%rcx,1),%ecx               <-- 
trapping instruction
  2d:   48 c1 e1 04             shl    $0x4,%rcx
  31:   48 01 c1                add    %rax,%rcx
  34:   48 89 8d 30 ff ff ff    mov    %rcx,-0xd0(%rbp)
  3b:   c7                      .byte 0xc7
  3c:   45 cc                   rex.RB int3
        ...

Code starting with the faulting instruction
===========================================
   0:   8b 0c 08                mov    (%rax,%rcx,1),%ecx
   3:   48 c1 e1 04             shl    $0x4,%rcx
   7:   48 01 c1                add    %rax,%rcx
   a:   48 89 8d 30 ff ff ff    mov    %rcx,-0xd0(%rbp)
  11:   c7                      .byte 0xc7
  12:   45 cc                   rex.RB int3
        ...
[   33.076895] RSP: 0018:ffffd4a0c1034d30 EFLAGS: 00010216
[   33.096198] RAX: 0000000000000000 RBX: ffff8d0a53ea9800 RCX: 0000000000002000
[   33.096200] RDX: 0000000000000000 RSI: 0000000000000040 RDI: ffff8d0a53e99810
[   33.096202] RBP: ffffd4a0c1034e20 R08: ffffd4a0c1034ea0 R09: 0000000000000000
[   33.123880] R10: 0000000000000000 R11: ffffffffc0953970 R12: 0000000000000000
[   33.123881] R13: 00000000fffffe00 R14: ffffd4a0c1034eb7 R15: 0000000000000000
[   33.123884] FS:  0000000000000000(0000) GS:ffff8d0b871a0000(0000) 
knlGS:0000000000000000
[   33.147004] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   33.147006] CR2: 0000000000002000 CR3: 000000000383a005 CR4: 0000000000f70ef0
[   33.147008] PKRU: 55555554
[   33.147009] Call Trace:
[   33.147011]  <IRQ>
[   33.147023]  __napi_poll (net/core/dev.c:7733)
[   33.147029]  net_rx_action (net/core/dev.c:7796 net/core/dev.c:7953)
[   33.147037]  handle_softirqs (kernel/softirq.c:622)
[   33.147042]  __irq_exit_rcu (kernel/softirq.c:656 kernel/softirq.c:496 
kernel/softirq.c:735)
[   33.147045]  irq_exit_rcu (kernel/softirq.c:752)
[   33.147047]  common_interrupt (arch/x86/kernel/irq.c:326)
[   33.147053]  </IRQ>
[   33.147054]  <TASK>
[   33.147056]  asm_common_interrupt (./arch/x86/include/asm/idtentry.h:688)
[   33.147059] RIP: 0010:cpuidle_enter_state (drivers/cpuidle/cpuidle.c:289 
drivers/cpuidle/cpuidle.c:292)
[   33.147062] Code: ef ff ff 49 89 c5 8b 73 04 bf ff ff ff ff e8 75 bf c6 ff 
31 ff e8 9e 31 dd fe 45 84 f6 74 05 e8 d4 bf c6 ff fb 0f 1f 44 00 00 <4c> 8b 45 
d0 45 85 c0 0f 88 9b 00 00 00 45 89 c1 41 83 f8 0a 0f 83
All code
========
   0:   ef                      out    %eax,(%dx)
   1:   ff                      (bad)
   2:   ff 49 89                decl   -0x77(%rcx)
   5:   c5 8b 73                (bad)
   8:   04 bf                   add    $0xbf,%al
   a:   ff                      (bad)
   b:   ff                      (bad)
   c:   ff                      (bad)
   d:   ff                      (bad)
   e:   e8 75 bf c6 ff          call   0xffffffffffc6bf88
  13:   31 ff                   xor    %edi,%edi
  15:   e8 9e 31 dd fe          call   0xfffffffffedd31b8
  1a:   45 84 f6                test   %r14b,%r14b
  1d:   74 05                   je     0x24
  1f:   e8 d4 bf c6 ff          call   0xffffffffffc6bff8
  24:   fb                      sti
  25:   0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)
  2a:*  4c 8b 45 d0             mov    -0x30(%rbp),%r8          <-- trapping 
instruction
  2e:   45 85 c0                test   %r8d,%r8d
  31:   0f 88 9b 00 00 00       js     0xd2
  37:   45 89 c1                mov    %r8d,%r9d
  3a:   41 83 f8 0a             cmp    $0xa,%r8d
  3e:   0f                      .byte 0xf
  3f:   83                      .byte 0x83

Code starting with the faulting instruction
===========================================
   0:   4c 8b 45 d0             mov    -0x30(%rbp),%r8
   4:   45 85 c0                test   %r8d,%r8d
   7:   0f 88 9b 00 00 00       js     0xa8
   d:   45 89 c1                mov    %r8d,%r9d
  10:   41 83 f8 0a             cmp    $0xa,%r8d
  14:   0f                      .byte 0xf
  15:   83                      .byte 0x83
[   33.147063] RSP: 0018:ffffd4a0c04a7e48 EFLAGS: 00000246
[   33.147065] RAX: 0000000000000000 RBX: ffff8d0a44fe7c00 RCX: 0000000000000000
[   33.147067] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
[   33.147068] RBP: ffffd4a0c04a7e90 R08: 0000000000000000 R09: 0000000000000000
[   33.147069] R10: 0000000000000000 R11: ffffffffaa9bfd20 R12: 0000000000000002
[   33.147070] R13: 00000007b0a32cf7 R14: 0000000000000000 R15: ffffffffabce2c70
[   33.147072]  ? __pfx_acpi_idle_enter+0x10/0x10
[   33.147078]  ? cpuidle_enter_state (drivers/cpuidle/cpuidle.c:286)
[   33.147081]  cpuidle_enter (drivers/cpuidle/cpuidle.c:391)
[   33.147084]  do_idle (kernel/sched/idle.c:161 kernel/sched/idle.c:247 
kernel/sched/idle.c:352)
[   33.147089]  cpu_startup_entry (kernel/sched/idle.c:451)
[   33.147091]  start_secondary (arch/x86/kernel/smpboot.c:312)
[   33.147095]  common_startup_64 (arch/x86/kernel/head_64.S:418)
[   33.147101]  </TASK>
[   33.147102] Modules linked in: ip_set nvme_fabrics wireguard libcurve25519 
ip6_udp_tunnel udp_tunnel nft_ct nft_chain_nat nf_nat nf_conntrack 
nf_defrag_ipv6 nf_defrag_ipv4 nfnetlink_log dm_thin_pool dm_persistent_data 
dm_bio_prison dm_bufio binfmt_misc ipmi_ssif nls_utf8 amd_atl intel_rapl_msr 
intel_rapl_common amd64_edac edac_mce_amd kvm_amd kvm irqbypass rapl bonding 
wmi_bmof tls igb joydev input_leds ast cdc_ether dca mac_hid i2c_algo_bit 
usbnet mii i40e libie_adminq libie i2c_piix4 ptdma k10temp i2c_smbus acpi_ipmi 
ipmi_si ipmi_devintf ipmi_msghandler sch_fq dm_multipath nf_tables scsi_dh_rdac 
scsi_dh_emc nfnetlink scsi_dh_alua efi_pstore ip_tables x_tables raid1 nvme 
nvme_core nvme_keyring ahci uas nvme_auth libahci ccp usb_storage wmi 
hid_generic usbhid hid tcp_bbr autofs4 aesni_intel gf128mul
[   33.147185] CR2: 0000000000002000
[   33.147187] ---[ end trace 0000000000000000 ]---

I will post the full dmesg and .config in a followup mail.

I'm not familiar with this driver, but from a quick look this appears to
be related to, but not the exact same issue as, this previous report
from Jakub Kicinski:
https://lore.kernel.org/intel-wired-lan/[email protected]/

Kindly,
Lillian

Reply via email to