viced: fix missing host lock in h_Enumerate
authorMichael Meffie <mmeffie@sinenomine.net>
Thu, 11 Nov 2010 17:17:05 +0000 (12:17 -0500)
committerDerrick Brashear <shadow@dementia.org>
Thu, 11 Nov 2010 20:32:02 +0000 (12:32 -0800)
The global host lock must be held over h_Release_r. Fix the
the case in h_Enumerate where h_Release_r is called without
the global host lock held.

Change-Id: I010338edf0a515f543e3468afff907e97eb07163
Reviewed-on: http://gerrit.openafs.org/3294
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>

src/viced/host.c

index 63502a1..0d62f84 100644 (file)
@@ -1014,7 +1014,9 @@ h_Enumerate(int (*proc) (struct host*, int, void *), void *param)
     H_UNLOCK;
     for (i = 0; i < count; i++) {
        flags[i] = (*proc) (list[i], flags[i], param);
+       H_LOCK;
        h_Release_r(list[i]);
+       H_UNLOCK;
        /* bail out of the enumeration early */
        if (H_ENUMERATE_ISSET_BAIL(flags[i]))
            break;