diff options
author | phk <phk@FreeBSD.org> | 2005-08-20 12:13:51 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2005-08-20 12:13:51 +0000 |
commit | df3343c5ae686fc9dda8618a212f08ec591b7e7e (patch) | |
tree | 2b91ecdf44003d6382884736e577d83591ca7ee8 /sys/kern/kern_conf.c | |
parent | a2f0d0b06bec596c2d0e3a49bc0842be23b94d91 (diff) | |
download | FreeBSD-src-df3343c5ae686fc9dda8618a212f08ec591b7e7e.zip FreeBSD-src-df3343c5ae686fc9dda8618a212f08ec591b7e7e.tar.gz |
Properly un-giant-trick the cdevsw in fini_cdevsw()
Tripped over by: Huang wen hui <huang@gddsn.org.cn>
Diffstat (limited to 'sys/kern/kern_conf.c')
-rw-r--r-- | sys/kern/kern_conf.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c index 8762352..cf47c7c 100644 --- a/sys/kern/kern_conf.c +++ b/sys/kern/kern_conf.c @@ -443,10 +443,14 @@ umajor(dev_t dev) static void fini_cdevsw(struct cdevsw *devsw) { + struct cdevsw *gt; - if (devsw->d_gianttrick != NULL) - free(devsw->d_gianttrick, M_DEVT); - devsw->d_gianttrick = NULL; + if (devsw->d_gianttrick != NULL) { + gt = devsw->d_gianttrick; + memcpy(devsw, gt, sizeof *devsw); + free(gt, M_DEVT); + devsw->d_gianttrick = NULL; + } devsw->d_flags &= ~D_INIT; } |