From 2201ddd6d0cb5a1f8ca290027fda896f81e3a24b Mon Sep 17 00:00:00 2001 From: Timothy Gu Date: Tue, 6 Jan 2015 16:11:58 -0800 Subject: [PATCH] NetFSServer: Forward errors and fix use-after-free. At least right now, the constructor of ServerInfoSender can only fail because of OOM. Signed-off-by: Augustin Cavalier Fixes #11716. One minor tweak by me from the original patch (change "!sender" to "sender == NULL"). --- .../kernel/file_systems/netfs/server/NetFSServer.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/add-ons/kernel/file_systems/netfs/server/NetFSServer.cpp b/src/add-ons/kernel/file_systems/netfs/server/NetFSServer.cpp index 49041d1cd5..4bcf77dc39 100644 --- a/src/add-ons/kernel/file_systems/netfs/server/NetFSServer.cpp +++ b/src/add-ons/kernel/file_systems/netfs/server/NetFSServer.cpp @@ -800,7 +800,7 @@ NetFSServer::_LoadSecurityContext(SecurityContext** _securityContext) // load the fallback settings, if present BPath path; DriverSettings settings; - + if (_GetSettingsDirPath(&path, false) == B_OK && path.Append(kFallbackSettingsFileName) == B_OK && settings.Load(path.Path()) == B_OK) { @@ -1283,9 +1283,15 @@ NetFSServer::_ServerInfoConnectionListener() // create a server info sender thread ServerInfoSender* sender = new(std::nothrow) ServerInfoSender(fd, info); - if (!sender || sender->Init() != B_OK) { + if (sender == NULL) { closesocket(fd); delete sender; + return B_NO_MEMORY; + } + if ((error = sender->Init()) != B_OK) { + closesocket(fd); + delete sender; + return error; } taskManager.RunTask(sender); }