From: Garry Zacheiss Date: Wed, 30 May 2001 20:31:21 +0000 (+0000) Subject: catch-bad-afsconf-cehck-result-to-fix-fileserver-segv-20010530 X-Git-Tag: openafs-stable-1_1_0~149 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=72dcb4b1e15da9d415ad5cb0aa3d146fd32486fd;p=packages%2Fo%2Fopenafs.git catch-bad-afsconf-cehck-result-to-fix-fileserver-segv-20010530 "afsconf_GetKey() in auth/cellconfig.c doesn't check the return value of afsconf_Check(), which can lead to the fileserver SEGV'ing if afsconf_Check() returns an error." --- diff --git a/src/auth/cellconfig.c b/src/auth/cellconfig.c index 53e0cddda..418a19fd4 100644 --- a/src/auth/cellconfig.c +++ b/src/auth/cellconfig.c @@ -845,8 +845,12 @@ afsconf_GetKeys(adir, astr) struct afsconf_dir *adir; struct afsconf_keys *astr; { + register afs_int32 code; + LOCK_GLOBAL_MUTEX - afsconf_Check(adir); + code = afsconf_Check(adir); + if (code) + return AFSCONF_FAILURE; bcopy(adir->keystr, astr, sizeof(struct afsconf_keys)); UNLOCK_GLOBAL_MUTEX return 0; @@ -863,9 +867,12 @@ afs_int32 afsconf_GetLatestKey(adir, avno, akey) register struct afsconf_key *tk; register afs_int32 best; struct afsconf_key *bestk; + register afs_int32 code; LOCK_GLOBAL_MUTEX - afsconf_Check(adir); + code = afsconf_Check(adir); + if (code) + return AFSCONF_FAILURE; maxa = adir->keystr->nkeys; best = -1; /* highest kvno we've seen yet */ @@ -895,9 +902,12 @@ char *akey; { register int i, maxa; register struct afsconf_key *tk; + register afs_int32 code; LOCK_GLOBAL_MUTEX - afsconf_Check(adir); + code = afsconf_Check(adir); + if (code) + return AFSCONF_FAILURE; maxa = adir->keystr->nkeys; for(tk = adir->keystr->key,i=0;i