added 3 changesets to branch 'refs/remotes/pdziepak-github/nfs4' old head: 87d2aacd8b5fc30e4cabf8eb886eb8305f9e8a87 new head: 17c2a4858524df47bb37136ec3f1320bafe11430 ---------------------------------------------------------------------------- 62167cc: nfs4: vfs makes sure that l_start + l_len <= OFF_MAX 0f4dcd8: nfs4: OpenConfirm used wrong filehandle 17c2a48: nfs4: Do not get_vnode() if Inode::Create() failed [ Pawel Dziepak <pdziepak@xxxxxxxxxxx> ] ---------------------------------------------------------------------------- 4 files changed, 10 insertions(+), 7 deletions(-) src/add-ons/kernel/file_systems/nfs4/Inode.cpp | 2 +- src/add-ons/kernel/file_systems/nfs4/Inode.h | 3 ++- .../kernel/file_systems/nfs4/InodeRegular.cpp | 8 ++++---- .../kernel/file_systems/nfs4/kernel_interface.cpp | 4 +++- ############################################################################ Commit: 62167cc0dafd86a0bdbf888d010140f6d1cf2370 Author: Pawel Dziepak <pdziepak@xxxxxxxxxxx> Date: Mon Jul 2 18:01:42 2012 UTC nfs4: vfs makes sure that l_start + l_len <= OFF_MAX ---------------------------------------------------------------------------- diff --git a/src/add-ons/kernel/file_systems/nfs4/Inode.cpp b/src/add-ons/kernel/file_systems/nfs4/Inode.cpp index 7014a84..53a76a4 100644 --- a/src/add-ons/kernel/file_systems/nfs4/Inode.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/Inode.cpp @@ -739,7 +739,7 @@ Inode::AcquireLock(OpenFileCookie* cookie, const struct flock* lock, linfo->fSequence = 0; linfo->fStart = lock->l_start; - if (lock->l_len == OFF_MAX) + if (lock->l_len + lock->l_start == OFF_MAX) linfo->fLength = UINT64_MAX; else linfo->fLength = lock->l_len; ############################################################################ Commit: 0f4dcd8bb3017dc29db8bf6de88ebe65c3167ed7 Author: Pawel Dziepak <pdziepak@xxxxxxxxxxx> Date: Mon Jul 2 18:09:57 2012 UTC nfs4: OpenConfirm used wrong filehandle ---------------------------------------------------------------------------- diff --git a/src/add-ons/kernel/file_systems/nfs4/Inode.h b/src/add-ons/kernel/file_systems/nfs4/Inode.h index f7f6646..22a6f02 100644 --- a/src/add-ons/kernel/file_systems/nfs4/Inode.h +++ b/src/add-ons/kernel/file_systems/nfs4/Inode.h @@ -76,7 +76,8 @@ protected: OpenFileCookie* cookie = NULL); status_t _LookUpFilehandle(); - status_t _ConfirmOpen(OpenFileCookie* cookie); + status_t _ConfirmOpen(const Filehandle& fh, + OpenFileCookie* cookie); status_t _ReadDirOnce(DirEntry** dirents, uint32* count, OpenDirCookie* cookie, bool* eof); diff --git a/src/add-ons/kernel/file_systems/nfs4/InodeRegular.cpp b/src/add-ons/kernel/file_systems/nfs4/InodeRegular.cpp index 3e95ec1..362db47 100644 --- a/src/add-ons/kernel/file_systems/nfs4/InodeRegular.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/InodeRegular.cpp @@ -17,7 +17,7 @@ status_t -Inode::_ConfirmOpen(OpenFileCookie* cookie) +Inode::_ConfirmOpen(const Filehandle& fh, OpenFileCookie* cookie) { do { RPC::Server* serv = fFilesystem->Server(); @@ -25,7 +25,7 @@ Inode::_ConfirmOpen(OpenFileCookie* cookie) RequestBuilder& req = request.Builder(); - req.PutFH(fHandle); + req.PutFH(fh); req.OpenConfirm(cookie->fSequence++, cookie->fStateId, cookie->fStateSeq); @@ -152,7 +152,7 @@ Inode::Create(const char* name, int mode, int perms, OpenFileCookie* cookie, fFilesystem->AddOpenFile(cookie); if (confirm) - return _ConfirmOpen(cookie); + return _ConfirmOpen(fh, cookie); else return B_OK; } @@ -248,7 +248,7 @@ Inode::Open(int mode, OpenFileCookie* cookie) fFilesystem->AddOpenFile(cookie); if (confirm) - return _ConfirmOpen(cookie); + return _ConfirmOpen(fHandle, cookie); else return B_OK; } ############################################################################ Commit: 17c2a4858524df47bb37136ec3f1320bafe11430 Author: Pawel Dziepak <pdziepak@xxxxxxxxxxx> Date: Mon Jul 2 18:22:41 2012 UTC nfs4: Do not get_vnode() if Inode::Create() failed ---------------------------------------------------------------------------- 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 b8519ff..e2b40f9 100644 --- a/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/kernel_interface.cpp @@ -327,8 +327,10 @@ nfs4_create(fs_volume* volume, fs_vnode* dir, const char* name, int openMode, Inode* inode = reinterpret_cast<Inode*>(dir->private_node); status_t result = inode->Create(name, openMode, perms, cookie, _newVnodeID); - if (result != B_OK) + if (result != B_OK) { delete cookie; + return result; + } void* ptr; result = get_vnode(volume, *_newVnodeID, &ptr);