Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 6 Dec 2012 14:50:05 GMT
From:      Lutz Donnerhacke <lutz@donnerhacke.de>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   kern/174236: "kldunload ipdivert" corrupts kernel
Message-ID:  <201212061450.qB6Eo5d3046262@red.freebsd.org>
Resent-Message-ID: <201212061500.qB6F01Rh047047@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         174236
>Category:       kern
>Synopsis:       "kldunload ipdivert" corrupts kernel
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Dec 06 15:00:00 UTC 2012
>Closed-Date:
>Last-Modified:
>Originator:     Lutz Donnerhacke
>Release:        FreeBSD 8.3-RELEASE (GENERIC)
>Organization:
IKS Service GmbH
>Environment:
FreeBSD server6 8.3-RELEASE FreeBSD 8.3-RELEASE #0: Mon Apr  9 21:23:18 UTC 2012     root@mason.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  amd64

>Description:
After unsuccessful kldunload of ipdivert.ko, all kernel module maintainence operations block.
>How-To-Repeat:
Reboot the server to a fresh state. In short:
 # kldload ipfw
 # kldload ipdivert
 # kldunload ipdivert
 # kldstat
 {hangs]

And now the glory details:

[root@server6 ~]# cat /boot/loader.conf
aacu64_load="YES"
if_lagg_load="YES"
net.inet.ip.fw.default_to_accept=1
ipfw_load="YES"
ipfw_nat_load="YES"

[root@server6 ~]# grep firewall /etc/rc.conf
firewall_enable="YES"
firewall_type="/etc/firewall.rules"

[root@server6 ~]# cat /etc/firewall.rules
-f flush
# defining NAT pools
nat 128 config ip x.y.z.128 log same_ports
[... same up to ...]
nat 159 config ip x.y.z.159 log same_ports
# active ruleset
add   10 deny log ip4 from any to any not verrevpath in
add 1128 nat 128 ipv4 from 100.64.0.0:255.192.0.31 to any out
[... same up to ...]
add 1159 nat 159 ipv4 from 100.64.0.31:255.192.0.31 to any out
add 2128 nat 128 ip4 from any to x.y.z.128
[... same up to ...]
add 2159 nat 159 ip4 from any to x.y.z.159
# Diverting dhpcv6 in future
# add 9000 divert 12345 ipv6 from fe80::/16 to ff02::1:2 via ng* in
# Allow everything
add 9999 allow all from any to any

[root@server6 ~]# kldstat
Id Refs Address            Size     Name
 1   34 0xffffffff80100000 e56d68   kernel
 2    2 0xffffffff80f57000 1a3e0    ipfw.ko
 3    1 0xffffffff80f72000 192b0    aacu64.ko
 4    1 0xffffffff80f8c000 c470     if_lagg.ko
 5    1 0xffffffff80f99000 4088     ipfw_nat.ko
 6    2 0xffffffff80f9e000 14320    libalias.ko
 7    1 0xffffffff81012000 1e2c     ng_socket.ko
 8    7 0xffffffff81014000 8d38     netgraph.ko
 9    1 0xffffffff8101d000 186a     ng_mppc.ko
10    1 0xffffffff8101f000 28c      rc4.ko
11    1 0xffffffff81020000 2a08     ng_l2tp.ko
12    1 0xffffffff81023000 2080     ng_ksocket.ko
13    1 0xffffffff81026000 aa8      ng_tee.ko
14    1 0xffffffff81027000 13b0     ng_iface.ko
15    1 0xffffffff81029000 45e8     ng_ppp.ko
[root@server6 ~]# kldload ipdivert
[root@server6 ~]# kldstat
Id Refs Address            Size     Name
 1   36 0xffffffff80100000 e56d68   kernel
 2    3 0xffffffff80f57000 1a3e0    ipfw.ko
 3    1 0xffffffff80f72000 192b0    aacu64.ko
 4    1 0xffffffff80f8c000 c470     if_lagg.ko
 5    1 0xffffffff80f99000 4088     ipfw_nat.ko
 6    2 0xffffffff80f9e000 14320    libalias.ko
 7    1 0xffffffff81012000 1e2c     ng_socket.ko
 8    7 0xffffffff81014000 8d38     netgraph.ko
 9    1 0xffffffff8101d000 186a     ng_mppc.ko
10    1 0xffffffff8101f000 28c      rc4.ko
11    1 0xffffffff81020000 2a08     ng_l2tp.ko
12    1 0xffffffff81023000 2080     ng_ksocket.ko
13    1 0xffffffff81026000 aa8      ng_tee.ko
14    1 0xffffffff81027000 13b0     ng_iface.ko
15    1 0xffffffff81029000 45e8     ng_ppp.ko
16    1 0xffffffff8102e000 1649     ipdivert.ko
[root@server6 ~]# kldunload ipdivert
kldunload: can't unload file: Operation not permitted
[root@server6 ~]# kldstat
Id Refs Address            Size     Name
[hangs]
<CTRL+T>
load: 0.00  cmd: kldstat 15366 [kernel linker] 98.04r 0.00u 0.00s 0% 1052k


Logging into the maschine again again.
[root@server6 ~]# ps ax | grep 1536[6]
15366   0  T+     0:00.00 kldstat
[root@server6 ~]# procstat -k 15366
  PID    TID COMM             TDNAME           KSTACK
[hangs]

Even "procstat"ing the hanging procstat hangs.

>Fix:
Reboot

>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201212061450.qB6Eo5d3046262>