From 0bad52e1d842e4a8c51d3e2b02a73a573cfd7fd9 Mon Sep 17 00:00:00 2001 From: Hans Petter Selasky Date: Sat, 11 Dec 2010 08:44:10 +0000 Subject: [PATCH] Fix race in devfs by using LIST_FIRST() instead of LIST_FOREACH_SAFE() when freeing the devfs private data entries. Reviewed by: kib MFC after: 3 days Approved by: thompsa (mentor) --- sys/kern/kern_conf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c index 897a4c068f5..721c01edbaa 100644 --- a/sys/kern/kern_conf.c +++ b/sys/kern/kern_conf.c @@ -926,7 +926,7 @@ static void destroy_devl(struct cdev *dev) { struct cdevsw *csw; - struct cdev_privdata *p, *p1; + struct cdev_privdata *p; mtx_assert(&devmtx, MA_OWNED); KASSERT(dev->si_flags & SI_NAMED, @@ -974,7 +974,7 @@ destroy_devl(struct cdev *dev) dev_unlock(); notify_destroy(dev); mtx_lock(&cdevpriv_mtx); - LIST_FOREACH_SAFE(p, &cdev2priv(dev)->cdp_fdpriv, cdpd_list, p1) { + while ((p = LIST_FIRST(&cdev2priv(dev)->cdp_fdpriv)) != NULL) { devfs_destroy_cdevpriv(p); mtx_lock(&cdevpriv_mtx); }