From abb18010b26b23f8c6813997d1080e35e7733529 Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Mon, 6 Apr 2009 23:50:44 +0000 Subject: [PATCH] STABLE14-linux-avoid-returning-invalid-pointers-on-error-20090402 LICENSE IPL10 FIXES 124580 avoid returning a positive error as it will look like a pointer. --- src/afs/LINUX/osi_vnodeops.c | 9 +++++++-- src/afs/VNOPS/afs_vnop_lookup.c | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index e4732feb65..8bdc92334e 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -1087,8 +1087,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; @@ -1429,7 +1431,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); diff --git a/src/afs/VNOPS/afs_vnop_lookup.c b/src/afs/VNOPS/afs_vnop_lookup.c index 4bf72b5ffd..0d2d8dc71c 100644 --- a/src/afs/VNOPS/afs_vnop_lookup.c +++ b/src/afs/VNOPS/afs_vnop_lookup.c @@ -1081,7 +1081,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);