STABLE149-linux-avoid-returning-invalid-pointers-on-error-20090402

LICENSE IPL10
FIXES 124580

avoid returning a positive error as it will look like a pointer.


(cherry picked from commit 160619505d)
This commit is contained in:
Simon Wilkinson 2009-04-07 13:26:41 +00:00 committed by Derrick Brashear
parent 370a05ddf9
commit 217a0f41d1
2 changed files with 12 additions and 3 deletions

View File

@ -45,6 +45,10 @@ RCSID
#define pageoff(pp) pp->offset
#endif
#ifndef MAX_ERRNO
#define MAX_ERRNO 1000L
#endif
#if defined(AFS_LINUX26_ENV)
#define UnlockPage(pp) unlock_page(pp)
#endif
@ -1086,8 +1090,10 @@ afs_linux_lookup(struct inode *dip, struct dentry *dp)
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,10)
if (code == ENOENT)
return ERR_PTR(0);
else
else if ((code >= 0) && (code <= MAX_ERRNO))
return ERR_PTR(-code);
else
return ERR_PTR(-EIO);
#else
if (code == ENOENT)
code = 0;
@ -1428,7 +1434,10 @@ afs_linux_follow_link(struct dentry *dp, struct dentry *basep,
if (code < 0) {
dput(basep);
res = ERR_PTR(code);
if (code < -MAX_ERRNO)
res = ERR_PTR(-EIO);
else
res = ERR_PTR(code);
} else {
name[code] = '\0';
res = lookup_dentry(name, basep, follow);

View File

@ -1077,7 +1077,7 @@ afs_DoBulkStat(struct vcache *adp, long dirCookie, struct vrequest *areqp)
afs_PutVolume(volp, READ_LOCK);
/* If we did the InlineBulk RPC pull out the return code */
if (inlinebulk) {
if (inlinebulk && code == 0) {
if ((&statsp[0])->errorCode) {
afs_Analyze(tcp, (&statsp[0])->errorCode, &adp->fid, areqp,
AFS_STATS_FS_RPCIDX_BULKSTATUS, SHARED_LOCK, NULL);