OPENAFS-SA-2016-002 AFSStoreStatus information leak
[openafs.git] / src / afs / VNOPS / afs_vnop_symlink.c
index 0571627..f608b2b 100644 (file)
@@ -47,7 +47,7 @@ afs_DisconCreateSymlink(struct vcache *avc, char *aname,
     tdc = afs_GetDCache(avc, 0, areq, &offset, &len, 0);
     if (!tdc) {
        /* printf("afs_DisconCreateSymlink: can't get new dcache for symlink.\n"); */
-       return ENOENT;
+       return ENETDOWN;
     }
 
     len = strlen(aname);
@@ -94,6 +94,7 @@ afs_symlink(OSI_VC_DECL(adp), char *aname, struct vattr *attrs,
 
     OutFidStatus = osi_AllocSmallSpace(sizeof(struct AFSFetchStatus));
     OutDirStatus = osi_AllocSmallSpace(sizeof(struct AFSFetchStatus));
+    memset(&InStatus, 0, sizeof(InStatus));
 
     if ((code = afs_CreateReq(&treq, acred)))
        goto done2;
@@ -288,7 +289,7 @@ afs_symlink(OSI_VC_DECL(adp), char *aname, struct vattr *attrs,
     ReleaseWriteLock(&tvc->lock);
     ReleaseWriteLock(&afs_xvcache);
     if (tvcp)
-       *tvcp = tvc;
+       *tvcp = tvc;
     else
        afs_PutVCache(tvc);
     code = 0;
@@ -398,7 +399,7 @@ afs_UFSHandleLink(struct vcache *avc, struct vrequest *areq)
            ReleaseReadLock(&tdc->lock);
            afs_PutDCache(tdc);
            osi_FreeLargeSpace(rbuf);
-           return ENOENT;
+           return EIO;
        }
        code = afs_osi_Read(tfile, -1, rbuf, tlen);
        osi_UFSClose(tfile);