From dd86fd8f4c72d0247d65b7916d13e95a63e53429 Mon Sep 17 00:00:00 2001 From: Pawel Dziepak Date: Wed, 4 Jul 2012 16:52:26 +0200 Subject: [PATCH] nfs4: Add few lacking error checks after strdup() or malloc() --- .../kernel/file_systems/nfs4/Filesystem.cpp | 18 +++++++++++++++++- src/add-ons/kernel/file_systems/nfs4/Inode.cpp | 5 +++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/add-ons/kernel/file_systems/nfs4/Filesystem.cpp b/src/add-ons/kernel/file_systems/nfs4/Filesystem.cpp index d9a69eb080..61b3ce705e 100644 --- a/src/add-ons/kernel/file_systems/nfs4/Filesystem.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/Filesystem.cpp @@ -176,6 +176,11 @@ Filesystem::Mount(Filesystem** pfs, RPC::Server* serv, const char* fsPath, delete[] values; + if (fi.fName == NULL || fi.fPath == NULL) { + delete fs; + return B_NO_MEMORY; + } + Inode* inode; result = Inode::CreateInode(fs, fi, &inode); if (result != B_OK) { @@ -257,6 +262,15 @@ Filesystem::Migrate(const RPC::Server* serv) free(const_cast(fPath)); fPath = strdup(locs->fLocations[j].fRootPath); + + if (fPath == NULL) { + gRPCServerManager->Release(fServer); + fServer = server; + put_module(DNS_RESOLVER_MODULE_NAME); + delete[] values; + return B_NO_MEMORY; + } + break; } } @@ -265,8 +279,10 @@ Filesystem::Migrate(const RPC::Server* serv) put_module(DNS_RESOLVER_MODULE_NAME); delete[] values; - if (server == fServer) + if (server == fServer) { + gRPCServerManager->Release(server); return B_ERROR; + } NFS4Server* old = reinterpret_cast(server->PrivateData()); old->RemoveFilesystem(this); diff --git a/src/add-ons/kernel/file_systems/nfs4/Inode.cpp b/src/add-ons/kernel/file_systems/nfs4/Inode.cpp index a57253651b..8831e81b44 100644 --- a/src/add-ons/kernel/file_systems/nfs4/Inode.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/Inode.cpp @@ -175,9 +175,14 @@ Inode::LookUp(const char* name, ino_t* id) fi.fHandle = fh; fi.fParent = fInfo.fHandle; fi.fName = strdup(name); + if (fi.fName == NULL) + return B_NO_MEMORY; char* path = reinterpret_cast(malloc(strlen(name) + 2 + strlen(fInfo.fPath))); + if (path == NULL) + return B_NO_MEMORY; + strcpy(path, fInfo.fPath); strcat(path, "/"); strcat(path, name);