21.01.2020, 17:25, "Nick Hibma" <n...@van-laarhoven.org>:
> When using a trivial program to read from the divert socket and post back the 
> machine panics instantly when a packet is sent to userland and back again 
> (incoming packet for the interface, so ifname is set). This is current from 
> today with no changes
>
> Any pointers as to how to fix this?
Could you please try to apply an attached patch and try again?
>
> Thanks in advance for any help.
>
> Nick Hibma
> n...@van-laarhoven.org
>
> -- Open Source: We stand on the shoulders of giants.
>
> Unread portion of the kernel message buffer:
> panic: Assertion in_epoch(net_epoch_preempt) failed at 
> /usr/src/sys/netinet/in.c:968
> cpuid = 0
> time = 1579626632
> KDB: stack backtrace:
> db_trace_self_wrapper(3836393a,1a9000a,0,1fdc088c,bd5320,...) at 
> db_trace_self_wrapper+0x2a/frame 0x1fdc0860
> kdb_backtrace(2,1e03ebc,1fdc08e8,14683a4,20b72500,...) at 
> kdb_backtrace+0x2e/frame 0x1fdc08c0
> vpanic(1461278,1fdc0904,1fdc0904,1fdc0918,11355ac,...) at vpanic+0x11f/frame 
> 0x1fdc08e4
> panic(1461278,1512573,154b440,3c8,20b72500,...) at panic+0x14/frame 0x1fdc08f8
> in_broadcast(f02000a,94df400,20b72594,1dc0ae8,2001be24,...) at 
> in_broadcast+0x8c/frame 0x1fdc0918
> div_send(2001bcc0,0,20b72500,9082e10,0,177f1a80) at div_send+0x1bd/frame 
> 0x1fdc0958
> sosend_generic(2001bcc0,9082e10,1fdc0a18,0,0,0,177f1a80) at 
> sosend_generic+0x3c5/frame 0x1fdc09b4
> sosend(2001bcc0,9082e10,1fdc0a18,0,0,...) at sosend+0x50/frame 0x1fdc09e4
> kern_sendit(177f1a80,3,1fdc0aa0,0,0,0) at kern_sendit+0x1b4/frame 0x1fdc0a50
> sendit(1fdc0aa0,0) at sendit+0x196/frame 0x1fdc0a88
> sys_sendto(177f1a80,177f1d0c) at sys_sendto+0x50/frame 0x1fdc0ac8
> syscall(1fdc0ba8,3b,3b,3b,54,...) at syscall+0x2db/frame 0x1fdc0b9c
> Xint0x80_syscall() at 0xffc033c9/frame 0x1fdc0b9c
> --- syscall (133, FreeBSD ELF32, sys_sendto), eip = 0xffc01230, esp = 
> 0xffc07fe8, ebp = 0xffbfeb68 ---
> KDB: enter: panic
>
> 0x00fd1129 in doadump (textdump=0) at /usr/src/sys/kern/kern_shutdown.c:392
> 392 savectx(&dumppcb);
> (kgdb) quit
> {e}nick@fimkjecurrent:/home/nick % svn info /usr/src
> Path: /usr/src
> Working Copy Root Path: /usr/src
> URL: svn+ssh://repo.freebsd.org/base/head
> Relative URL: ^/head
> Repository Root: svn+ssh://repo.freebsd.org/base
> Repository UUID: ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
> Revision: 356907
> Node Kind: directory
> Schedule: normal
> Last Changed Author: jhibbits
> Last Changed Rev: 356904
> Last Changed Date: 2020-01-20 05:01:35 +0100 (Mon, 20 Jan 2020)
>
>>  On 9 Oct 2019, at 14:04, David Wolfskill <da...@catwhisker.org> wrote:
>>
>>  On Tue, Oct 08, 2019 at 05:15:19AM -0700, David Wolfskill wrote:
>>>  This was on my laptop (build machine, which was updated in parallel,
>>>  but uses a different NIC, had no issues) after a src update from
>>>  r353176 to r353298; laptop's NIC is wlan(4) (which is iwn(4), in
>>>  this case).
>>
>>  After restoring the /boot/*.old set, I was able to reboot & update from
>>  r353298 to r353336. The subsequent reboot seemed OK ... until the
>>  keyboard & mouse were enabled (under X11; I use xdm on the laptop).
>>
>>  Then I got a slightly different panic:
>>
>>  panic: Assertion in_epoch(net_epoch_preempt) failed at 
>> /usr/src/sys/net/if.c:356
>>
>>  Backtrace:
>>
>>  panic: Assertion in_epoch(net_epoch_preempt) failed at 
>> /usr/src/sys/net/if.c:356
>>  cpuid = 0
>>  time = 1570621553
>>  KDB: stack backtrace:
>>  db_trace_self_wrapper() at 0xffffffff8049ebab = 
>> db_trace_self_wrapper+0x2b/frame 0xfffffe1072956580
>>  vpanic() at 0xffffffff80b978fd = vpanic+0x19d/frame 0xfffffe10729565d0
>>  panic() at 0xffffffff80b97693 = panic+0x43/frame 0xfffffe1072956630
>>  if_ref() at 0xffffffff80ca1b10 = if_ref/frame 0xfffffe1072956650
>>  sysctl_ifdata() at 0xffffffff80cb247d = sysctl_ifdata+0x4d/frame 
>> 0xfffffe1072956760
>>  sysctl_root_handler_locked() at 0xffffffff80ba714b = 
>> sysctl_root_handler_locked+0x7b/frame 0xfffffe10729567a0
>>  sysctl_root() at 0xffffffff80ba64dc = sysctl_root+0x20c/frame 
>> 0xfffffe1072956820
>>  userland_sysctl() at 0xffffffff80ba6bab = userland_sysctl+0x17b/frame 
>> 0xfffffe10729568d0
>>  sys___sysctl() at 0xffffffff80ba69ef = sys___sysctl+0x5f/frame 
>> 0xfffffe1072956980
>>  amd64_syscall() at 0xffffffff810480f4 = amd64_syscall+0x2d4/frame 
>> 0xfffffe1072956ab0
>>  fast_syscall_common() at 0xffffffff8101eaa0 = 
>> fast_syscall_common+0x101/frame 0xfffffe1072956ab0
>>  --- syscall (202, FreeBSD ELF64, sys___sysctl), rip = 0x8014d4d2a, rsp = 
>> 0x7fffffffeaa8, rbp = 0x7fffffffeae0 ---
>>  KDB: enter: panic
>>
>>>  The ddb "dump" command recorded a dump, which I managed to capture; the
>>>  information may be found at
>>>  http://www.catwhisker.org/~david/FreeBSD/head/r353298/
>>
>>  This one is at http://www.catwhisker.org/~david/FreeBSD/head/r353336
>>
>>  As before, the (headless) build machine had no issues that I could see.
>>
>>  Peace,
>>  david
>>  --
>>  David H. Wolfskill da...@catwhisker.org
>>  I am amazed that anyone would condone what Trunp has publicly admitted he 
>> did.
>>
>>  See http://www.catwhisker.org/~david/publickey.gpg for my public key.
>
> _______________________________________________
> freebsd-current@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"
Index: sys/netinet/ip_divert.c
===================================================================
--- sys/netinet/ip_divert.c	(revision 356937)
+++ sys/netinet/ip_divert.c	(working copy)
@@ -601,7 +601,10 @@ static int
 div_send(struct socket *so, int flags, struct mbuf *m, struct sockaddr *nam,
     struct mbuf *control, struct thread *td)
 {
+	struct epoch_tracker et;
+	int ret;
 
+
 	/* Packet must have a header (but that's about it) */
 	if (m->m_len < sizeof (struct ip) &&
 	    (m = m_pullup(m, sizeof (struct ip))) == NULL) {
@@ -611,7 +614,9 @@ div_send(struct socket *so, int flags, struct mbuf
 	}
 
 	/* Send packet */
-	return div_output(so, m, (struct sockaddr_in *)nam, control);
+	NET_EPOCH_ENTER(et);
+	ret = div_output(so, m, (struct sockaddr_in *)nam, control);
+	NET_EPOCH_EXIT(et);
 }
 
 static void
_______________________________________________
freebsd-current@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to