]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Only initialize some mutexes for the default VNET.
authorrodrigc <rodrigc@FreeBSD.org>
Mon, 25 Nov 2013 18:49:37 +0000 (18:49 +0000)
committerrodrigc <rodrigc@FreeBSD.org>
Mon, 25 Nov 2013 18:49:37 +0000 (18:49 +0000)
commit919a38db633a7eec6c5533f47ebeecc35bcac5ba
tree59a065f38fee65c49ef20d2271b0e3f65ee10a5f
parent80415152a8912ab195f433916f4ecb7cf03f834e
Only initialize some mutexes for the default VNET.

In r208160, sctp_it_ctl was made a global variable, across all VNETs.
However, sctp_init() is called for every VNET that is created.  This results
in the same global mutexes which are part of sctp_it_ctl being initialized.  This can result
in crashes if many jails are created.

To reproduce the problem:
  (1)  Take a GENERIC kernel config, and add options for: VIMAGE, WITNESS,
       INVARIANTS.
  (2)  Run this command in a loop:
       jail -l -u root -c path=/ name=foo persist vnet && jexec foo ifconfig lo0 127.0.0.1/8 && jail -r foo

       (see http://lists.freebsd.org/pipermail/freebsd-current/2010-November/021280.html )

Witness will warn about the same mutex being initialized.

Fix the problem by only initializing these mutexes in the default VNET.
sys/netinet/sctp_pcb.c