• Dragos Tatulea's avatar
    vdpa/mlx5: Fix crash on shutdown for when no ndev exists · 810b0cc1
    Dragos Tatulea authored
    The ndev was accessed on shutdown without a check if it actually exists.
    This triggered the crash pasted below.
    
    Instead of doing the ndev check, delete the shutdown handler altogether.
    The irqs will be released at the parent VF level (mlx5_core).
    
     BUG: kernel NULL pointer dereference, address: 0000000000000300
     #PF: supervisor read access in kernel mode
     #PF: error_code(0x0000) - not-present page
     PGD 0 P4D 0
     Oops: 0000 [#1] SMP
     CPU: 0 PID: 1 Comm: systemd-shutdow Not tainted 6.5.0-rc2_for_upstream_min_debug_2023_07_17_15_05 #1
     Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
     RIP: 0010:mlx5v_shutdown+0xe/0x50 [mlx5_vdpa]
     RSP: 0018:ffff8881003bfdc0 EFLAGS: 00010286
     RAX: ffff888103befba0 RBX: ffff888109d28008 RCX: 0000000000000017
     RDX: 0000000000000001 RSI: 0000000000000212 RDI: ffff888109d28000
     RBP: 0000000000000000 R08: 0000000d3a3a3882 R09: 0000000000000001
     R10: 0000000000000000 R11: 0000000000000000 R12: ffff888109d28000
     R13: ffff888109d28080 R14: 00000000fee1dead R15: 0000000000000000
     FS:  00007f4969e0be40(0000) GS:ffff88852c800000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 0000000000000300 CR3: 00000001051cd006 CR4: 0000000000370eb0
     DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
     DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
     Call Trace:
      <TASK>
      ? __die+0x20/0x60
      ? page_fault_oops+0x14c/0x3c0
      ? exc_page_fault+0x75/0x140
      ? asm_exc_page_fault+0x22/0x30
      ? mlx5v_shutdown+0xe/0x50 [mlx5_vdpa]
      device_shutdown+0x13e/0x1e0
      kernel_restart+0x36/0x90
      __do_sys_reboot+0x141/0x210
      ? vfs_writev+0xcd/0x140
      ? handle_mm_fault+0x161/0x260
      ? do_writev+0x6b/0x110
      do_syscall_64+0x3d/0x90
      entry_SYSCALL_64_after_hwframe+0x46/0xb0
     RIP: 0033:0x7f496990fb56
     RSP: 002b:00007fffc7bdde88 EFLAGS: 00000206 ORIG_RAX: 00000000000000a9
     RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f496990fb56
     RDX: 0000000001234567 RSI: 0000000028121969 RDI: fffffffffee1dead
     RBP: 00007fffc7bde1d0 R08: 0000000000000000 R09: 0000000000000000
     R10: 0000000000000000 R11: 0000000000000206 R12: 0000000000000000
     R13: 00007fffc7bddf10 R14: 0000000000000000 R15: 00007fffc7bde2b8
      </TASK>
     CR2: 0000000000000300
     ---[ end trace 0000000000000000 ]---
    
    Fixes: bc9a2b3e ("vdpa/mlx5: Support interrupt bypassing")
    Signed-off-by: default avatarDragos Tatulea <dtatulea@nvidia.com>
    Message-Id: <20230803152648.199297-1-dtatulea@nvidia.com>
    Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    810b0cc1
mlx5_vnet.c 94.4 KB