projects
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
ad03a0f
)
vdpa/mlx5: Fix crash on shutdown for when no ndev exists
author
Dragos Tatulea
<dtatulea@nvidia.com>
Thu, 3 Aug 2023 15:26:33 +0000
(18:26 +0300)
committer
Michael S. Tsirkin
<mst@redhat.com>
Thu, 10 Aug 2023 19:24:29 +0000
(15:24 -0400)
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: bc9a2b3e686e ("vdpa/mlx5: Support interrupt bypassing")
Signed-off-by: Dragos Tatulea <dtatulea@nvidia.com>
Message-Id: <
20230803152648
.199297-1-dtatulea@nvidia.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
drivers/vdpa/mlx5/net/mlx5_vnet.c
patch
|
blob
|
history
diff --git
a/drivers/vdpa/mlx5/net/mlx5_vnet.c
b/drivers/vdpa/mlx5/net/mlx5_vnet.c
index dbbc82eec7de50a876c601cc6e576373b7db7204..37be945a0230884be614ea557cf2db921f2ed6d0 100644
(file)
--- a/
drivers/vdpa/mlx5/net/mlx5_vnet.c
+++ b/
drivers/vdpa/mlx5/net/mlx5_vnet.c
@@
-3556,17
+3556,6
@@
static void mlx5v_remove(struct auxiliary_device *adev)
kfree(mgtdev);
}
-static void mlx5v_shutdown(struct auxiliary_device *auxdev)
-{
- struct mlx5_vdpa_mgmtdev *mgtdev;
- struct mlx5_vdpa_net *ndev;
-
- mgtdev = auxiliary_get_drvdata(auxdev);
- ndev = mgtdev->ndev;
-
- free_irqs(ndev);
-}
-
static const struct auxiliary_device_id mlx5v_id_table[] = {
{ .name = MLX5_ADEV_NAME ".vnet", },
{},
@@
-3578,7
+3567,6
@@
static struct auxiliary_driver mlx5v_driver = {
.name = "vnet",
.probe = mlx5v_probe,
.remove = mlx5v_remove,
- .shutdown = mlx5v_shutdown,
.id_table = mlx5v_id_table,
};