diff options
author | lstewart <lstewart@FreeBSD.org> | 2014-09-16 21:26:24 +0000 |
---|---|---|
committer | lstewart <lstewart@FreeBSD.org> | 2014-09-16 21:26:24 +0000 |
commit | 25b8a28db6410dc876d42bc809a1b599c2618f1d (patch) | |
tree | ff2c8cbe35ddfba44d1ce4382bc7bad3da74013d /sys/netinet | |
parent | ed5abc5007cf104267c1e277ce650081e8a42e09 (diff) | |
download | FreeBSD-src-25b8a28db6410dc876d42bc809a1b599c2618f1d.zip FreeBSD-src-25b8a28db6410dc876d42bc809a1b599c2618f1d.tar.gz |
MFC r270160:
Destroy the "qdiffsample_zone" UMA zone on unload to avoid a use-after-unload
panic easily triggered by running "sysctl -a" after unload.
Reported and tested by: Grenville Armitage <garmitage@swin.edu.au>
Approved by: re(gjb)
Diffstat (limited to 'sys/netinet')
-rw-r--r-- | sys/netinet/cc/cc_cdg.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/sys/netinet/cc/cc_cdg.c b/sys/netinet/cc/cc_cdg.c index 3ebaacf..f2c4eea 100644 --- a/sys/netinet/cc/cc_cdg.c +++ b/sys/netinet/cc/cc_cdg.c @@ -221,6 +221,7 @@ static VNET_DEFINE(uint32_t, cdg_hold_backoff); /* Function prototypes. */ static int cdg_mod_init(void); +static int cdg_mod_destroy(void); static void cdg_conn_init(struct cc_var *ccv); static int cdg_cb_init(struct cc_var *ccv); static void cdg_cb_destroy(struct cc_var *ccv); @@ -234,7 +235,8 @@ struct cc_algo cdg_cc_algo = { .cb_destroy = cdg_cb_destroy, .cb_init = cdg_cb_init, .conn_init = cdg_conn_init, - .cong_signal = cdg_cong_signal + .cong_signal = cdg_cong_signal, + .mod_destroy = cdg_mod_destroy }; /* Vnet created and being initialised. */ @@ -278,6 +280,14 @@ cdg_mod_init(void) } static int +cdg_mod_destroy(void) +{ + + uma_zdestroy(qdiffsample_zone); + return (0); +} + +static int cdg_cb_init(struct cc_var *ccv) { struct cdg *cdg_data; |