[haiku-commits] haiku: hrev45385 - src/add-ons/kernel/file_systems/nfs4

  • From: pdziepak@xxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 19 Mar 2013 03:08:41 +0100 (CET)

hrev45385 adds 8 changesets to branch 'master'
old head: 246c199c405c382ff1260fc30c8ab48b992a2a5c
new head: ca8ad1dc1a9a5798b402e171814c903e019c185e
overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=ca8ad1d+%5E246c199

----------------------------------------------------------------------------

2723b9e: nfs4: Fix CID 991506: memory leak in case of error

4fa87bf: nfs4: check for presence of FATTR4_CHANGE is not required
  
  This fixes CID 991501.

55ca54c: nfs4: Take advantage of strlcpy()

80f9419: nfs4: Fix error handling issues in Inode::Open() and Inode::Create()
  
  This fixes CID 991498.

83b1304: nfs4: Remove RequestBuilder::ReadDir() count argument
  
  The argument is ignored anyway. This fixes CID 991593.

b302859: nfs4: Fix memory leaks in case of errors while reading a directory
  
  This fixes CID 991497.

5bdf33b: nfs4: Remove check for presence of mandatory attributes
  
  This fixes CID 991495.

ca8ad1d: nfs4: Fix CID 991752: remove unnecessary return

                                    [ Pawel Dziepak <pdziepak@xxxxxxxxxxx> ]

----------------------------------------------------------------------------

9 files changed, 34 insertions(+), 22 deletions(-)
src/add-ons/kernel/file_systems/nfs4/Inode.cpp        |  2 +-
src/add-ons/kernel/file_systems/nfs4/InodeRegular.cpp | 15 +++++++++++----
src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp    | 13 ++++++++-----
src/add-ons/kernel/file_systems/nfs4/NFS4Server.cpp   |  1 -
.../kernel/file_systems/nfs4/ReplyInterpreter.cpp     |  7 ++++++-
.../kernel/file_systems/nfs4/RequestBuilder.cpp       |  6 ++----
src/add-ons/kernel/file_systems/nfs4/RequestBuilder.h |  5 ++---
src/add-ons/kernel/file_systems/nfs4/RootInode.cpp    |  3 +--
.../kernel/file_systems/nfs4/kernel_interface.cpp     |  4 +++-

############################################################################

Commit:      2723b9eba4016848365fb45f5d2121ecb2d96078
URL:         http://cgit.haiku-os.org/haiku/commit/?id=2723b9e
Author:      Pawel Dziepak <pdziepak@xxxxxxxxxxx>
Date:        Tue Mar 19 01:22:14 2013 UTC

nfs4: Fix CID 991506: memory leak in case of error

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp 
b/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp
index bb80315..5c4c832 100644
--- a/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp
+++ b/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp
@@ -233,8 +233,10 @@ nfs4_get_vnode(fs_volume* volume, ino_t id, fs_vnode* 
vnode, int* _type,
 
        Inode* inode;   
        status_t result = fs->GetInode(id, &inode);
-       if (result != B_OK)
+       if (result != B_OK) {
+               delete vnodeToInode;
                return result;
+       }
 
        vnodeToInode->Replace(inode);
        vnode->ops = &gNFSv4VnodeOps;

############################################################################

Commit:      4fa87bf1529b857a28528fef8e62100a3bcb2f42
URL:         http://cgit.haiku-os.org/haiku/commit/?id=4fa87bf
Author:      Pawel Dziepak <pdziepak@xxxxxxxxxxx>
Date:        Tue Mar 19 01:30:17 2013 UTC

nfs4: check for presence of FATTR4_CHANGE is not required

This fixes CID 991501.

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp 
b/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp
index 56c226b..97f9a10 100644
--- a/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp
+++ b/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp
@@ -45,7 +45,7 @@ NFS4Inode::GetChangeInfo(uint64* change, bool attrDir)
                AttrValue* values;
                uint32 count;
                result = reply.GetAttr(&values, &count);
-               if (result != B_OK || count < 1)
+               if (result != B_OK)
                        return result;
 
                // FATTR4_CHANGE is mandatory

############################################################################

Commit:      55ca54ccf590ee28d39fedcb2f78bb76eb2bd835
URL:         http://cgit.haiku-os.org/haiku/commit/?id=55ca54c
Author:      Pawel Dziepak <pdziepak@xxxxxxxxxxx>
Date:        Tue Mar 19 01:32:05 2013 UTC

nfs4: Take advantage of strlcpy()

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/file_systems/nfs4/RootInode.cpp 
b/src/add-ons/kernel/file_systems/nfs4/RootInode.cpp
index 5278cf8..e79f832 100644
--- a/src/add-ons/kernel/file_systems/nfs4/RootInode.cpp
+++ b/src/add-ons/kernel/file_systems/nfs4/RootInode.cpp
@@ -135,8 +135,7 @@ RootInode::_UpdateInfo(bool force)
                || fFileSystem->GetConfiguration().fEmulateNamedAttrs)
                fInfoCache.flags |= B_FS_HAS_MIME | B_FS_HAS_ATTR;
 
-       strncpy(fInfoCache.volume_name, fName, sizeof(fInfoCache.volume_name));
-       fInfoCache.volume_name[sizeof(fInfoCache.volume_name) - 1] = '\0';
+       strlcpy(fInfoCache.volume_name, fName, sizeof(fInfoCache.volume_name));
 
        fInfoCacheExpire = time(NULL) + MetadataCache::kExpirationTime;
 

############################################################################

Commit:      80f94193c43c146ed235405c3bb8ae20082c76f4
URL:         http://cgit.haiku-os.org/haiku/commit/?id=80f9419
Author:      Pawel Dziepak <pdziepak@xxxxxxxxxxx>
Date:        Tue Mar 19 01:37:44 2013 UTC

nfs4: Fix error handling issues in Inode::Open() and Inode::Create()

This fixes CID 991498.

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/file_systems/nfs4/InodeRegular.cpp 
b/src/add-ons/kernel/file_systems/nfs4/InodeRegular.cpp
index 9748274..4eb1d49 100644
--- a/src/add-ons/kernel/file_systems/nfs4/InodeRegular.cpp
+++ b/src/add-ons/kernel/file_systems/nfs4/InodeRegular.cpp
@@ -74,10 +74,15 @@ Inode::Create(const char* name, int mode, int perms, 
OpenFileCookie* cookie,
        cookie->fMode = mode;
        cookie->fLocks = NULL;
 
-       OpenState* state = new OpenState;
+       OpenState* state = new(std::nothrow) OpenState;
+       if (state == NULL)
+               return B_NO_MEMORY;
+
        status_t result = CreateState(name, mode, perms, state, data);
-       if (result != B_OK)
+       if (result != B_OK) {
+               delete state;
                return result;
+       }
 
        cookie->fOpenState = state;
        cookie->fFileSystem = fFileSystem;
@@ -105,7 +110,7 @@ Inode::Open(int mode, OpenFileCookie* cookie)
        if (fOpenState == NULL) {
                RevalidateFileCache();
 
-               OpenState* state = new OpenState;
+               OpenState* state = new(std::nothrow) OpenState;
                if (state == NULL)
                        return B_NO_MEMORY;
 
@@ -113,8 +118,10 @@ Inode::Open(int mode, OpenFileCookie* cookie)
                state->fFileSystem = fFileSystem;
                state->fMode = mode & O_RWMASK;
                status_t result = OpenFile(state, mode, &data);
-               if (result != B_OK)
+               if (result != B_OK) {
+                       delete state;
                        return result;
+               }
 
                fFileSystem->AddOpenFile(state);
                fOpenState = state;

############################################################################

Commit:      83b13040c8004685d4d1128bd83baa5f4ac012ff
URL:         http://cgit.haiku-os.org/haiku/commit/?id=83b1304
Author:      Pawel Dziepak <pdziepak@xxxxxxxxxxx>
Date:        Tue Mar 19 01:43:22 2013 UTC

nfs4: Remove RequestBuilder::ReadDir() count argument

The argument is ignored anyway. This fixes CID 991593.

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp 
b/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp
index 97f9a10..2e0aee4 100644
--- a/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp
+++ b/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp
@@ -966,7 +966,7 @@ NFS4Inode::ReadDirOnce(DirEntry** dirents, uint32* count, 
OpenDirCookie* cookie,
                        req.GetAttr(dirAttr, sizeof(dirAttr) / 
sizeof(Attribute));
 
                Attribute attr[] = { FATTR4_FSID, FATTR4_FILEID };
-               req.ReadDir(*count, *dirCookie, *dirCookieVerf, attr,
+               req.ReadDir(*dirCookie, *dirCookieVerf, attr,
                        sizeof(attr) / sizeof(Attribute));
 
                req.GetAttr(dirAttr, sizeof(dirAttr) / sizeof(Attribute));
diff --git a/src/add-ons/kernel/file_systems/nfs4/RequestBuilder.cpp 
b/src/add-ons/kernel/file_systems/nfs4/RequestBuilder.cpp
index 83ff3b4..f900b84 100644
--- a/src/add-ons/kernel/file_systems/nfs4/RequestBuilder.cpp
+++ b/src/add-ons/kernel/file_systems/nfs4/RequestBuilder.cpp
@@ -516,11 +516,9 @@ RequestBuilder::Read(const uint32* id, uint32 stateSeq, 
uint64 pos, uint32 len)
 
 
 status_t
-RequestBuilder::ReadDir(uint32 count, uint64 cookie, uint64 cookieVerf,
-       Attribute* attrs, uint32 attrCount)
+RequestBuilder::ReadDir(uint64 cookie, uint64 cookieVerf, Attribute* attrs,
+       uint32 attrCount)
 {
-       (void)count;
-
        if (fProcedure != ProcCompound)
                return B_BAD_VALUE;
        if (fRequest == NULL)
diff --git a/src/add-ons/kernel/file_systems/nfs4/RequestBuilder.h 
b/src/add-ons/kernel/file_systems/nfs4/RequestBuilder.h
index 6bf7524..00b0d07 100644
--- a/src/add-ons/kernel/file_systems/nfs4/RequestBuilder.h
+++ b/src/add-ons/kernel/file_systems/nfs4/RequestBuilder.h
@@ -63,9 +63,8 @@ public:
                        status_t                                PutRootFH();
                        status_t                                Read(const 
uint32* id, uint32 stateSeq,
                                                                                
uint64 pos, uint32 len);
-                       status_t                                ReadDir(uint32 
count, uint64 cookie,
-                                                                               
uint64 cookieVerf, Attribute* attrs,
-                                                                               
uint32 attrCount);
+                       status_t                                ReadDir(uint64 
cookie, uint64 cookieVerf,
+                                                                               
Attribute* attrs, uint32 attrCount);
                        status_t                                ReadLink();
                        status_t                                Remove(const 
char* file);
                        status_t                                Rename(const 
char* from, const char* to);

############################################################################

Commit:      b302859608dd492877a0c5b492cf7d81953f0c8b
URL:         http://cgit.haiku-os.org/haiku/commit/?id=b302859
Author:      Pawel Dziepak <pdziepak@xxxxxxxxxxx>
Date:        Tue Mar 19 01:52:39 2013 UTC

nfs4: Fix memory leaks in case of errors while reading a directory

This fixes CID 991497.

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp 
b/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp
index 2e0aee4..3dfdd61 100644
--- a/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp
+++ b/src/add-ons/kernel/file_systems/nfs4/NFS4Inode.cpp
@@ -7,6 +7,8 @@
  */
 
 
+#include <AutoDeleter.h>
+
 #include "IdMap.h"
 #include "Inode.h"
 #include "NFS4Inode.h"
@@ -989,12 +991,14 @@ NFS4Inode::ReadDirOnce(DirEntry** dirents, uint32* count, 
OpenDirCookie* cookie,
                        if (result != B_OK)
                                return result;
                }
+               ArrayDeleter<AttrValue> beforeDeleter(before);
 
                result = reply.ReadDir(dirCookie, dirCookieVerf, dirents, 
count, eof);
                if (result != B_OK) {
                        delete[] before;
                        return result;
                }
+               ArrayDeleter<DirEntry> entriesDeleter(*dirents);
 
                AttrValue* after;
                result = reply.GetAttr(&after, &attrCount);
@@ -1002,6 +1006,7 @@ NFS4Inode::ReadDirOnce(DirEntry** dirents, uint32* count, 
OpenDirCookie* cookie,
                        delete[] before;
                        return result;
                }
+               ArrayDeleter<AttrValue> afterDeleter(after);
 
                if ((*change == 0
                                && before[0].fData.fValue64 == 
after[0].fData.fValue64)
@@ -1010,9 +1015,7 @@ NFS4Inode::ReadDirOnce(DirEntry** dirents, uint32* count, 
OpenDirCookie* cookie,
                else
                        return B_ERROR;
 
-               delete[] before;
-               delete[] after;
-
+               entriesDeleter.Detach();
                return B_OK;
        } while (true);
 }
diff --git a/src/add-ons/kernel/file_systems/nfs4/ReplyInterpreter.cpp 
b/src/add-ons/kernel/file_systems/nfs4/ReplyInterpreter.cpp
index e13808c..d078e4b 100644
--- a/src/add-ons/kernel/file_systems/nfs4/ReplyInterpreter.cpp
+++ b/src/add-ons/kernel/file_systems/nfs4/ReplyInterpreter.cpp
@@ -427,7 +427,12 @@ ReplyInterpreter::ReadDir(uint64* cookie, uint64* 
cookieVerf,
        *_count = count;
        *dirents = entries;
 
-       return fReply->Stream().IsEOF() ? B_BAD_VALUE : B_OK;
+       if (fReply->Stream().IsEOF()) {
+               delete[] entries;
+               return B_BAD_VALUE;
+       }
+
+       return B_OK;
 }
 
 

############################################################################

Commit:      5bdf33bc7a55acae20d715fb7527b676ca77fd49
URL:         http://cgit.haiku-os.org/haiku/commit/?id=5bdf33b
Author:      Pawel Dziepak <pdziepak@xxxxxxxxxxx>
Date:        Tue Mar 19 01:55:31 2013 UTC

nfs4: Remove check for presence of mandatory attributes

This fixes CID 991495.

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/file_systems/nfs4/Inode.cpp 
b/src/add-ons/kernel/file_systems/nfs4/Inode.cpp
index abebe6f..48ad7f0 100644
--- a/src/add-ons/kernel/file_systems/nfs4/Inode.cpp
+++ b/src/add-ons/kernel/file_systems/nfs4/Inode.cpp
@@ -86,7 +86,7 @@ Inode::CreateInode(FileSystem* fs, const FileInfo& fi, 
Inode** _inode)
                AttrValue* values;
                uint32 count;
                result = reply.GetAttr(&values, &count);
-               if (result != B_OK || count < 4)
+               if (result != B_OK)
                        return result;
 
                if (fi.fFileId == 0) {

############################################################################

Revision:    hrev45385
Commit:      ca8ad1dc1a9a5798b402e171814c903e019c185e
URL:         http://cgit.haiku-os.org/haiku/commit/?id=ca8ad1d
Author:      Pawel Dziepak <pdziepak@xxxxxxxxxxx>
Date:        Tue Mar 19 01:57:18 2013 UTC

nfs4: Fix CID 991752: remove unnecessary return

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/file_systems/nfs4/NFS4Server.cpp 
b/src/add-ons/kernel/file_systems/nfs4/NFS4Server.cpp
index 830935f..21411cc 100644
--- a/src/add-ons/kernel/file_systems/nfs4/NFS4Server.cpp
+++ b/src/add-ons/kernel/file_systems/nfs4/NFS4Server.cpp
@@ -366,7 +366,6 @@ NFS4Server::CallbackGetAttr(RequestInterpreter* request, 
ReplyBuilder* reply)
        status_t result = request->GetAttr(&handle, &mask);
        if (result != B_OK)
                return result;
-       return B_OK;
 
        MutexLocker locker(fFSLock);
 


Other related posts:

  • » [haiku-commits] haiku: hrev45385 - src/add-ons/kernel/file_systems/nfs4 - pdziepak