diff -ur src.2019-09-09/sys/net/route.c src/sys/net/route.c --- src.2019-09-09/sys/net/route.c 2019-03-14 03:22:43.000000000 +0300 +++ src/sys/net/route.c 2019-10-10 17:13:44.521682000 +0300 @@ -1563,18 +1563,27 @@ if (error != 0) return (error); - rt_notifydelete(rt, info); +// printf("Debug: rtrequest1_fib(): [%s:%d]: rt = %p, rnh = %p, info = %p\n", __func__, __LINE__, rt, rnh, info); /* * If the caller wants it, then it can have it, * but it's up to it to free the rtentry as we won't be * doing it. */ - if (ret_nrt) { + if (ret_nrt) *ret_nrt = rt; - RT_UNLOCK(rt); - } else - RTFREE_LOCKED(rt); + + if (rt != NULL) { + rt_notifydelete(rt, info); + + if (ret_nrt) + RT_UNLOCK(rt); + else + RTFREE_LOCKED(rt); +// } else { +// printf("Debug: rtrequest1_fib(): [%s:%d]: Empty result from rt_unlinkrte(): rt = %p, rnh = %p, info = %p\n", __func__, __LINE__, rt, rnh, info); + } +// printf("Debug: rtrequest1_fib(): [%s:%d]: No crash\n", __func__, __LINE__); break; case RTM_RESOLVE: /* diff -ur src.2019-09-09/sys/net/rtsock.c src/sys/net/rtsock.c --- src.2019-09-09/sys/net/rtsock.c 2019-03-14 03:22:43.000000000 +0300 +++ src/sys/net/rtsock.c 2019-10-10 14:34:48.857770000 +0300 @@ -721,7 +721,7 @@ break; } error = rtrequest1_fib(RTM_DELETE, &info, &saved_nrt, fibnum); - if (error == 0) { + if (error == 0 && saved_nrt != NULL) { RT_LOCK(saved_nrt); rt = saved_nrt; goto report;