From 338782cb4ca4db79f48163194d69fa53af867568 Mon Sep 17 00:00:00 2001 From: Thefrank <1910378+Thefrank@users.noreply.github.com> Date: Sat, 25 Feb 2023 21:22:03 -0700 Subject: [PATCH 1/3] FreeBSD build and test fixes --- src/libpsl-native/CMakeLists.txt | 2 ++ src/libpsl-native/src/getcurrentthreadid.cpp | 7 ++++++ src/libpsl-native/src/getppid.cpp | 14 +++++++---- src/libpsl-native/src/getuserfrompid.cpp | 1 + .../test/test-getcommonlstat.cpp | 22 ++++++++--------- src/libpsl-native/test/test-getcommonstat.cpp | 24 +++++++++---------- 6 files changed, 42 insertions(+), 28 deletions(-) diff --git a/src/libpsl-native/CMakeLists.txt b/src/libpsl-native/CMakeLists.txt index ce0e198..224f51c 100644 --- a/src/libpsl-native/CMakeLists.txt +++ b/src/libpsl-native/CMakeLists.txt @@ -9,6 +9,8 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,relro,-z,now") elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl") +elseif (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl") endif() set(LIBRARY_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/../powershell-unix") diff --git a/src/libpsl-native/src/getcurrentthreadid.cpp b/src/libpsl-native/src/getcurrentthreadid.cpp index 499589e..ec563be 100644 --- a/src/libpsl-native/src/getcurrentthreadid.cpp +++ b/src/libpsl-native/src/getcurrentthreadid.cpp @@ -8,6 +8,10 @@ #include #include +#if __FreeBSD__ +#include +#endif + pid_t GetCurrentThreadId() { pid_t tid = 0; @@ -17,6 +21,9 @@ pid_t GetCurrentThreadId() uint64_t tid64; pthread_threadid_np(NULL, &tid64); tid = (pid_t)tid64; +#elif defined(__FreeBSD__) + tid = pthread_getthreadid_np(); + return (int)tid; #endif return tid; } diff --git a/src/libpsl-native/src/getppid.cpp b/src/libpsl-native/src/getppid.cpp index a20bc90..b3b225f 100644 --- a/src/libpsl-native/src/getppid.cpp +++ b/src/libpsl-native/src/getppid.cpp @@ -13,6 +13,11 @@ #include #endif +#if __FreeBSD__ +#include +#include +#endif + //! @brief GetPPid returns the parent process id for a process //! //! GetPPid @@ -27,19 +32,18 @@ pid_t GetPPid(pid_t pid) { -#if defined(__APPLE__) && defined(__MACH__) - const pid_t PIDUnknown = UINT_MAX; struct kinfo_proc info; size_t length = sizeof(struct kinfo_proc); - int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, pid}; + int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, pid }; if (sysctl(mib, 4, &info, &length, NULL, 0) < 0) return PIDUnknown; if (length == 0) return PIDUnknown; - +#if defined (__APPLE__) && defined(__MACH__) return info.kp_eproc.e_ppid; - +#elif defined(__FreeBSD__) + return info.ki_ppid; #else return UINT_MAX; diff --git a/src/libpsl-native/src/getuserfrompid.cpp b/src/libpsl-native/src/getuserfrompid.cpp index 63478a2..15d79a6 100644 --- a/src/libpsl-native/src/getuserfrompid.cpp +++ b/src/libpsl-native/src/getuserfrompid.cpp @@ -21,6 +21,7 @@ #if __FreeBSD__ #include +#include #endif char* GetUserFromPid(pid_t pid) diff --git a/src/libpsl-native/test/test-getcommonlstat.cpp b/src/libpsl-native/test/test-getcommonlstat.cpp index ad73e9a..d7206c1 100644 --- a/src/libpsl-native/test/test-getcommonlstat.cpp +++ b/src/libpsl-native/test/test-getcommonlstat.cpp @@ -39,7 +39,7 @@ TEST(GetCommonLStat, GetOwnerIdOfRoot) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %u /", "r"); #else p = popen("/usr/bin/stat -c %u /", "r"); @@ -56,7 +56,7 @@ TEST(GetCommonLStat, GetGroupId) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %g /", "r"); #else p = popen("/usr/bin/stat -c %g /", "r"); @@ -73,7 +73,7 @@ TEST(GetCommonLStat, GetInodeNumber) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %i /", "r"); #else p = popen("/usr/bin/stat -c %i /", "r"); @@ -90,7 +90,7 @@ TEST(GetCommonLStat, GetSize) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %z /", "r"); #else p = popen("/usr/bin/stat -c %s /", "r"); @@ -107,7 +107,7 @@ TEST(GetCommonLStat, GetBlockSize) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %k /", "r"); #else p = popen("/usr/bin/stat -c %o /", "r"); @@ -124,7 +124,7 @@ TEST(GetCommonLStat, GetBlockCount) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %b /", "r"); #else p = popen("/usr/bin/stat -c %b /", "r"); @@ -141,7 +141,7 @@ TEST(GetCommonLStat, GetLinkCount) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %l /", "r"); #else p = popen("/usr/bin/stat -c %h /", "r"); @@ -158,7 +158,7 @@ TEST(GetCommonLStat, GetDeviceId) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %d /", "r"); #else p = popen("/usr/bin/stat -c %d /", "r"); @@ -175,7 +175,7 @@ TEST(GetCommonLStat, GetATime) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %a /", "r"); #else p = popen("/usr/bin/stat -c %X /", "r"); @@ -192,7 +192,7 @@ TEST(GetCommonLStat, GetMTime) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %m /", "r"); #else p = popen("/usr/bin/stat -c %Y /", "r"); @@ -209,7 +209,7 @@ TEST(GetCommonLStat, GetCTime) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %c /", "r"); #else p = popen("/usr/bin/stat -c %Z /", "r"); diff --git a/src/libpsl-native/test/test-getcommonstat.cpp b/src/libpsl-native/test/test-getcommonstat.cpp index 7407fc3..70279c9 100644 --- a/src/libpsl-native/test/test-getcommonstat.cpp +++ b/src/libpsl-native/test/test-getcommonstat.cpp @@ -41,7 +41,7 @@ TEST(GetCommonStat, GetOwnerIdOfRoot) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %u /", "r"); #else p = popen("/usr/bin/stat -c %u /", "r"); @@ -58,7 +58,7 @@ TEST(GetCommonStat, GetGroupId) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %g /", "r"); #else p = popen("/usr/bin/stat -c %g /", "r"); @@ -75,7 +75,7 @@ TEST(GetCommonStat, GetInodeNumber) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %i /", "r"); #else p = popen("/usr/bin/stat -c %i /", "r"); @@ -93,7 +93,7 @@ TEST(GetCommonStat, GetMode) FILE *p; CommonStat cs; unsigned int mode = -1; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %p /", "r"); int result = fscanf(p, "%o", &mode); #else @@ -110,7 +110,7 @@ TEST(GetCommonStat, GetSize) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %z /", "r"); #else p = popen("/usr/bin/stat -c %s /", "r"); @@ -127,7 +127,7 @@ TEST(GetCommonStat, GetBlockSize) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %k /", "r"); #else p = popen("/usr/bin/stat -c %o /", "r"); @@ -144,7 +144,7 @@ TEST(GetCommonStat, GetBlockCount) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %b /", "r"); #else p = popen("/usr/bin/stat -c %b /", "r"); @@ -161,7 +161,7 @@ TEST(GetCommonStat, GetLinkCount) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %l /", "r"); #else p = popen("/usr/bin/stat -c %h /", "r"); @@ -178,7 +178,7 @@ TEST(GetCommonStat, GetDeviceId) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %d /", "r"); #else p = popen("/usr/bin/stat -c %d /", "r"); @@ -195,7 +195,7 @@ TEST(GetCommonStat, GetATime) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %a /", "r"); #else p = popen("/usr/bin/stat -c %X /", "r"); @@ -212,7 +212,7 @@ TEST(GetCommonStat, GetMTime) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %m /", "r"); #else p = popen("/usr/bin/stat -c %Y /", "r"); @@ -229,7 +229,7 @@ TEST(GetCommonStat, GetCTime) { FILE *p; CommonStat cs; -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) p = popen("/usr/bin/stat -f %c /", "r"); #else p = popen("/usr/bin/stat -c %Z /", "r"); From ee1b1943ad98ee221f4b79fc763ff30d3cf00afb Mon Sep 17 00:00:00 2001 From: Thefrank <1910378+Thefrank@users.noreply.github.com> Date: Thu, 2 Mar 2023 16:44:10 -0700 Subject: [PATCH 2/3] Dont break Linux --- src/libpsl-native/src/getppid.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libpsl-native/src/getppid.cpp b/src/libpsl-native/src/getppid.cpp index b3b225f..d67e2df 100644 --- a/src/libpsl-native/src/getppid.cpp +++ b/src/libpsl-native/src/getppid.cpp @@ -31,7 +31,7 @@ //! pid_t GetPPid(pid_t pid) { - +#if defined (__APPLE__) && defined(__MACH__) || defined(__FreeBSD__) const pid_t PIDUnknown = UINT_MAX; struct kinfo_proc info; size_t length = sizeof(struct kinfo_proc); @@ -44,6 +44,7 @@ pid_t GetPPid(pid_t pid) return info.kp_eproc.e_ppid; #elif defined(__FreeBSD__) return info.ki_ppid; +#endif #else return UINT_MAX; From 96d7c69f7d14a468658d363883306e66d10b0554 Mon Sep 17 00:00:00 2001 From: Thefrank <1910378+Thefrank@users.noreply.github.com> Date: Mon, 29 Jan 2024 18:04:41 -0700 Subject: [PATCH 3/3] Changes from review --- src/libpsl-native/CMakeLists.txt | 4 +--- src/libpsl-native/src/getcurrentthreadid.cpp | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/libpsl-native/CMakeLists.txt b/src/libpsl-native/CMakeLists.txt index 224f51c..b6f999d 100644 --- a/src/libpsl-native/CMakeLists.txt +++ b/src/libpsl-native/CMakeLists.txt @@ -5,12 +5,10 @@ project(PSL-NATIVE) set(CMAKE_BUILD_TYPE "Release") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Werror -fstack-protector-strong -fpie -D_FORTIFY_SOURCE=2") -if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") +if (${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR "FreeBSD") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,relro,-z,now") elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl") -elseif (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl") endif() set(LIBRARY_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/../powershell-unix") diff --git a/src/libpsl-native/src/getcurrentthreadid.cpp b/src/libpsl-native/src/getcurrentthreadid.cpp index ec563be..453635b 100644 --- a/src/libpsl-native/src/getcurrentthreadid.cpp +++ b/src/libpsl-native/src/getcurrentthreadid.cpp @@ -23,7 +23,6 @@ pid_t GetCurrentThreadId() tid = (pid_t)tid64; #elif defined(__FreeBSD__) tid = pthread_getthreadid_np(); - return (int)tid; #endif return tid; }