kern/176471: [xen] xn driver crash on detach
Roger Pau Monné
roger.pau at citrix.com
Thu Feb 28 17:10:05 UTC 2013
The following reply was made to PR kern/176471; it has been noted by GNATS.
From: =?ISO-8859-1?Q?Roger_Pau_Monn=E9?= <roger.pau at citrix.com>
To: <bug-followup at FreeBSD.org>, <pete at helenius.fi>
Cc:
Subject: Re: kern/176471: [xen] xn driver crash on detach
Date: Thu, 28 Feb 2013 18:00:12 +0100
Hello,
I've been able to reproduce this bug with Xen unstable, here is a fix
for it.
---
From 6206137f80cbe5812294b1733a86f28e5cdc01bd Mon Sep 17 00:00:00 2001
From: Roger Pau Monne <roger.pau at citrix.com>
Date: Thu, 28 Feb 2013 17:43:34 +0100
Subject: [PATCH] xen-netfront: fix detach of network interfaces
Remove all the media and the interface when detaching it. Prevents the
following panic when detaching an interface (xl network-detach freebsd
1)
xn1: detached
Fatal trap 12: page fault while in kernel mode
cpuid = 3; apic id = 06
fault virtual address = 0xffffff80028ff2a0
fault code = supervisor read data, page not present
instruction pointer = 0x20:0xffffffff809653af
stack pointer = 0x28:0xffffff8117cb4940
frame pointer = 0x28:0xffffff8117cb4980
code segment = base 0x0, limit 0xfffff, type 0x1b
= DPL 0, pres 1, long 1, def32 0, gran 1
processor eflags = interrupt enabled, resume, IOPL = 0
current process = 699 (devd)
[ thread pid 699 tid 100107 ]
Stopped at ifmedia_ioctl+0x3f: movq 0x8(%r12),%rcx
db> trace
Tracing pid 706 tid 100059 td 0xfffffe0006b69480
ifmedia_ioctl() at ifmedia_ioctl+0x3f/frame 0xffffff80f774c980
ifioctl() at ifioctl+0xeb7/frame 0xffffff80f774ca40
kern_ioctl() at kern_ioctl+0x1ce/frame 0xffffff80f774ca90
sys_ioctl() at sys_ioctl+0x11f/frame 0xffffff80f774cae0
amd64_syscall() at amd64_syscall+0x265/frame 0xffffff80f774cbf0
Xfast_syscall() at Xfast_syscall+0xfb/frame 0xffffff80f774cbf0
--- syscall (54, FreeBSD ELF64, sys_ioctl), rip = 0x44c60a, rsp = 0x7fffffffd678, rbp = 0x7fffffffd750 ---
PR: 176471
---
sys/dev/xen/netfront/netfront.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/sys/dev/xen/netfront/netfront.c b/sys/dev/xen/netfront/netfront.c
index 88641e3..167fd12 100644
--- a/sys/dev/xen/netfront/netfront.c
+++ b/sys/dev/xen/netfront/netfront.c
@@ -2172,6 +2172,9 @@ static void
netif_free(struct netfront_info *info)
{
netif_disconnect_backend(info);
+ ifmedia_removeall(&info->sc_media);
+ ether_ifdetach(info->xn_ifp);
+ if_free(info->xn_ifp);
#if 0
close_netdev(info);
#endif
--
1.7.7.5 (Apple Git-26)
More information about the freebsd-xen
mailing list