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);