From 72dcb4b1e15da9d415ad5cb0aa3d146fd32486fd Mon Sep 17 00:00:00 2001 From: Garry Zacheiss Date: Wed, 30 May 2001 20:31:21 +0000 Subject: [PATCH] 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." --- src/auth/cellconfig.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) 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