[libvirt] [PATCH] Fix crash in nwfilter driver check

The nwfilterDriverActive() could de-reference a NULL pointer if it hadn't be started at the point it was called. It was also not thread safe, since it lacked locking around data accesses. * src/nwfilter/nwfilter_driver.c: Fix locking & NULL checks in nwfilterDriverActive() --- src/nwfilter/nwfilter_driver.c | 11 +++++++++-- 1 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 58df4e1..412c5b8 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -153,9 +153,16 @@ nwfilterDriverReload(void) { */ static int nwfilterDriverActive(void) { - if (!driverState->pools.count) + int ret; + + if (!driverState) return 0; - return 1; + + nwfilterDriverLock(driverState); + ret = driverState->pools.count ? 1 : 0; + nwfilterDriverUnlock(driverState); + + return ret; } /** -- 1.6.6.1

libvir-list-bounces@redhat.com wrote on 04/19/2010 09:18:15 AM:
* src/nwfilter/nwfilter_driver.c: Fix locking & NULL checks in nwfilterDriverActive() --- src/nwfilter/nwfilter_driver.c | 11 +++++++++-- 1 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/src/nwfilter/nwfilter_driver.c
b/src/nwfilter/nwfilter_driver.c
index 58df4e1..412c5b8 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -153,9 +153,16 @@ nwfilterDriverReload(void) { */ static int nwfilterDriverActive(void) { - if (!driverState->pools.count) + int ret; + + if (!driverState) return 0; - return 1; + + nwfilterDriverLock(driverState); + ret = driverState->pools.count ? 1 : 0; + nwfilterDriverUnlock(driverState); + + return ret; }
ACK. Stefan
participants (2)
-
Daniel P. Berrange
-
Stefan Berger