https://github.com/yuvald-sweet-security updated https://github.com/llvm/llvm-project/pull/131609
>From 6f2d070facaced221295a5b0c48ccb3a41a5048d Mon Sep 17 00:00:00 2001 From: Yuval Deutscher <yuvald@sweet.security> Date: Mon, 17 Mar 2025 14:37:26 +0200 Subject: [PATCH 1/2] [lldb] Use correct path for debugserver --- lldb/tools/lldb-server/SystemInitializerLLGS.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lldb/tools/lldb-server/SystemInitializerLLGS.h b/lldb/tools/lldb-server/SystemInitializerLLGS.h index 4469a8ba5f60a..c6020b0dd37da 100644 --- a/lldb/tools/lldb-server/SystemInitializerLLGS.h +++ b/lldb/tools/lldb-server/SystemInitializerLLGS.h @@ -11,10 +11,17 @@ #include "lldb/Initialization/SystemInitializer.h" #include "lldb/Initialization/SystemInitializerCommon.h" +#include "lldb/Utility/FileSpec.h" class SystemInitializerLLGS : public lldb_private::SystemInitializerCommon { public: - SystemInitializerLLGS() : SystemInitializerCommon(nullptr) {} + SystemInitializerLLGS() + : SystemInitializerCommon( + // Finding the shared libraries directory on lldb-server is broken + // since lldb-server isn't dynamically linked with liblldb.so. + // Clearing the filespec here causes GetShlibDir to fail and + // GetSupportExeDir to fall-back to using the binary path instead. + [](lldb_private::FileSpec &file) { file.Clear(); }) {} llvm::Error Initialize() override; void Terminate() override; >From c2fb1da3e4be760177d03f346613285e75937359 Mon Sep 17 00:00:00 2001 From: Yuval Deutscher <yuvald@sweet.security> Date: Thu, 3 Apr 2025 14:52:43 +0300 Subject: [PATCH 2/2] [lldb] Test running lldb-server through symlink --- .../TestPlatformLaunchGDBServer.py | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/lldb/test/API/commands/platform/launchgdbserver/TestPlatformLaunchGDBServer.py b/lldb/test/API/commands/platform/launchgdbserver/TestPlatformLaunchGDBServer.py index c365bc993e338..00c9732500be8 100644 --- a/lldb/test/API/commands/platform/launchgdbserver/TestPlatformLaunchGDBServer.py +++ b/lldb/test/API/commands/platform/launchgdbserver/TestPlatformLaunchGDBServer.py @@ -58,3 +58,45 @@ def test_platform_process_launch_gdb_server(self): self.runCmd("target create {}".format(self.getBuildArtifact("a.out"))) self.expect("run", substrs=["unable to launch a GDB server on"], error=True) + + @skipIfRemote + @skipUnlessPlatform(["linux"]) + @add_test_categories(["lldb-server"]) + def test_lldb_server_weird_symlinks(self): + self.build() + + hostname = socket.getaddrinfo("localhost", 0, proto=socket.IPPROTO_TCP)[0][4][0] + listen_url = "[%s]:0" % hostname + + port_file = self.getBuildArtifact("port") + commandline_args = [ + "platform", + "--listen", + listen_url, + "--socket-file", + port_file, + "--", + self.getBuildArtifact("a.out"), + "foo", + ] + + # Run lldb-server from a symlink without any binary called "lldb-server" in the directory. + llgs_hiding_directory = self.getBuildArtifact("hiding-directory") + new_lldb_server_link = self.getBuildArtifact( + "lldb-server-with-an-unconventional-name" + ) + new_lldb_server = os.path.join(llgs_hiding_directory, "lldb-server") + os.makedirs(llgs_hiding_directory) + shutil.copy(lldbgdbserverutils.get_lldb_server_exe(), new_lldb_server) + os.symlink(new_lldb_server, new_lldb_server_link) + + self.spawnSubprocess(new_lldb_server_link, commandline_args) + socket_id = lldbutil.wait_for_file_on_target(self, port_file) + + new_platform = lldb.SBPlatform("remote-" + self.getPlatform()) + self.dbg.SetSelectedPlatform(new_platform) + + connect_url = "connect://[%s]:%s" % (hostname, socket_id) + self.runCmd("platform connect %s" % connect_url) + self.runCmd("target create {}".format(self.getBuildArtifact("a.out"))) + self.expect("run", error=False) _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits