freebsd-dev/sys
Ariff Abdullah 4582b3a100 Fix severe out-of-bound mtx "type" pointer, causing WITNESS refcount
confusions and panic provided that the following conditions are met:

  1) WITNESS is enabled (watch/trace).
  2) Using modules, instead of statically linked (Not a strict
     requirement, but easier to reproduce this way).
  3) 2 or more modules share the same mtx type ("sound softc").
     - They might share the same name (strcmp() == 0), but it always
       point to different address.
  4) Repetitive kldunload/load on any module that shares the same mtx
     type (Not a strict requirement, but easier to reproduce this way).

     Consider module A and module B:
     - From enroll() - subr_witness.c:
       * Load module A. Everything seems fine right now.
         wA-w_refcount == 1 ; wA-w_name = "sound softc"
       * Load module B.
       * w->w_name == description will always fail.
         ("sound softc" from A and B point to different address).
       * wA->w_refcount > 0 && strcmp(description, wA->w_name) == 0
       * enroll() will return wA instead of returning (possibly unique)
         wB.
         wA->w_refcount++ , == 2.
       * Unload module A, mtx_destroy(), wA->w_name become invalid,
         but wA->w_refcount-- become 1 instead of 0. wA will not be
         removed from witness list.
       * Some other places call mtx_init(), iterating witness list,
         found wA, failed on wA->w_name == description
       * wA->w_refcount > 0 && strcmp(description, wA->w_name)
       * Panic on strcmp() since wA->w_name no longer point to valid
         address.

Note that this could happened in other places as well, not just sound
(eg. consider lots of drivers that share simmilar MTX_NETWORK_LOCK).

Solutions (for sound case):
  1) Provide unique mtx type string for each mutex creation (chosen)
  or
  2) Put "sound softc" global variable somewhere and use it.
2007-03-15 16:41:27 +00:00
..
amd64 Add another CPUID for AMD CPUs and fix style(9) while I am here. 2007-03-12 20:27:21 +00:00
arm Map the second CS of the compact flash too. This allow us access to 2007-03-14 19:03:07 +00:00
boot Remove vestiges of very specific fpga support for my company's board. 2007-03-15 03:31:49 +00:00
bsm Merge OpenBSM 1.0 alpha 12 import changes into src/sys/bsm. New events 2006-09-25 12:22:07 +00:00
cam A silly buglet found by Coverity- check the return value from 2007-03-15 06:42:54 +00:00
coda Make insmntque() externally visibile and allow it to fail (e.g. during 2007-03-13 01:50:27 +00:00
compat Add a pn_destroy field to pfs_node. This field points to a destructor 2007-03-12 12:16:52 +00:00
conf - Sysctl's move to seperate file 2007-03-15 11:27:14 +00:00
contrib - Add Intel firmwares for Intel PRO/Wireless LAN 2100/2200/2915 cards in a 2007-03-02 11:42:56 +00:00
crypto Initialize T1 to silent gcc warning. 2006-10-22 02:19:33 +00:00
ddb Use FOREACH_PROC_IN_SYSTEM instead of using its unrolled form. 2007-01-17 15:05:52 +00:00
dev Fix severe out-of-bound mtx "type" pointer, causing WITNESS refcount 2007-03-15 16:41:27 +00:00
fs Make insmntque() externally visibile and allow it to fail (e.g. during 2007-03-13 01:50:27 +00:00
gdb
geom Warn when user use sectorsize bigger than the page size, which will lead 2007-03-05 12:41:44 +00:00
gnu Add "force" to ext2_ops, to match what was in the old mount_ext2fs binary. 2007-03-15 00:09:50 +00:00
i4b o break newbus api: add a new argument of type driver_filter_t to 2007-02-24 02:28:07 +00:00
i386 Create an identity mapping (V=P) super page for the low memory region on 2007-03-14 22:30:02 +00:00
ia64 Push down the implementation of PCPU_LAZY_INC() into the machine-dependent 2007-03-11 05:54:29 +00:00
isa Partial fix for a bug in rev.1.231. If suspend/resume clobbers the 2007-03-05 09:10:17 +00:00
kern Don't deny mounting for jailed processes immediately, allow 2007-03-14 13:09:59 +00:00
libkern Add strstr() function to the libkern. 2006-08-12 15:28:39 +00:00
modules Disable linking in of firmware on ia64 to avoid build failures from a 2007-03-14 18:20:36 +00:00
net Remove a spurious blank line at the start of vlan_growhash(). 2007-03-15 14:10:51 +00:00
net80211 change ic_modecaps to a bit vector and use setbit, et. al. 2007-03-11 22:37:32 +00:00
netatalk Use privilege PRIV_NET_ADDIFADDR rather than suser() to authorize 2007-02-19 22:40:02 +00:00
netatm Sweep kernel replacing suser(9) calls with priv(9) calls, assigning 2006-11-06 13:42:10 +00:00
netgraph oops committed the wrong patch. 2007-03-10 01:02:40 +00:00
netinet Consolidate insertion of TCP options into a segment from within tcp_output() 2007-03-15 15:59:28 +00:00
netinet6 - Sysctl's move to seperate file 2007-03-15 11:27:14 +00:00
netipsec s,#if INET6,#ifdef INET6, 2006-12-14 17:33:46 +00:00
netipx Build ipx_ip.c only if options IPXIP is defined. No functional change. 2007-02-26 11:55:34 +00:00
netkey With exception of the if_name() macro, all definitions in net_osdep.h 2006-08-04 21:27:40 +00:00
netnatm Factor out my copyrights + licenses from Charles D. Cranor and 2007-01-08 22:30:39 +00:00
netncp Use pause() rather than tsleep() on stack variables and function pointers. 2007-02-27 17:23:29 +00:00
netsmb Backing out the wrong fix which could possibly trash the memory if devfs 2007-02-09 17:22:10 +00:00
nfs NFSv4 client: 2006-11-28 19:33:28 +00:00
nfs4client Rename some functions and variables from nfs_* to nfs4_* to avoid 2007-01-25 14:33:13 +00:00
nfsclient Make insmntque() externally visibile and allow it to fail (e.g. during 2007-03-13 01:50:27 +00:00
nfsserver Change these descriptions of memory types used in malloc(9), as their 2007-03-05 00:21:40 +00:00
opencrypto
pc98 - Use mtx_{lock,unlock}_spin rather than {disable,enable}_intr. 2007-03-04 11:36:16 +00:00
pccard
pci Add new ST201 PCI id. 2007-03-10 03:10:34 +00:00
powerpc Push down the implementation of PCPU_LAZY_INC() into the machine-dependent 2007-03-11 05:54:29 +00:00
rpc
security Remove 'MPSAFE' annotations from the comments above most system calls: all 2007-03-04 22:36:48 +00:00
sparc64 Push down the implementation of PCPU_LAZY_INC() into the machine-dependent 2007-03-11 05:54:29 +00:00
sun4v Push down the implementation of PCPU_LAZY_INC() into the machine-dependent 2007-03-11 05:54:29 +00:00
sys Update a comment: Rather than suggesting suser(), suggest priv(9) for 2007-03-14 19:52:19 +00:00
tools - Add Intel firmwares for Intel PRO/Wireless LAN 2100/2200/2915 cards in a 2007-03-02 11:42:56 +00:00
ufs Implement fine-grained locking for UFS quotas. 2007-03-14 08:54:08 +00:00
vm Use PCPU_LAZY_INC() to update page fault statistics. 2007-03-05 18:55:14 +00:00
Makefile o Add cam to a list of cscope dirs. 2006-11-26 18:27:16 +00:00