From 1a5b3a1c3fde85e7b07928d58d075a4bf91e4783 Mon Sep 17 00:00:00 2001 From: brapru Date: Mon, 12 Jul 2021 20:48:31 -0400 Subject: [PATCH] Kernel/ProcFS: Expose TCP/UDP Socket pids This allows for commands like netstat to reference /proc/net and identify a connection's owning process. Process information is limited to superusers and user owned processes. --- Kernel/GlobalProcessExposed.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Kernel/GlobalProcessExposed.cpp b/Kernel/GlobalProcessExposed.cpp index 8ce519b424..0b79420e17 100644 --- a/Kernel/GlobalProcessExposed.cpp +++ b/Kernel/GlobalProcessExposed.cpp @@ -109,6 +109,11 @@ private: obj.add("bytes_in", socket.bytes_in()); obj.add("packets_out", socket.packets_out()); obj.add("bytes_out", socket.bytes_out()); + if (Process::current()->is_superuser() || Process::current()->uid() == socket.origin_uid()) { + obj.add("origin_pid", socket.origin_pid()); + obj.add("origin_uid", socket.origin_uid()); + obj.add("origin_gid", socket.origin_gid()); + } }); array.finish(); return true; @@ -154,6 +159,11 @@ private: obj.add("local_port", socket.local_port()); obj.add("peer_address", socket.peer_address().to_string()); obj.add("peer_port", socket.peer_port()); + if (Process::current()->is_superuser() || Process::current()->uid() == socket.origin_uid()) { + obj.add("origin_pid", socket.origin_pid()); + obj.add("origin_uid", socket.origin_uid()); + obj.add("origin_gid", socket.origin_gid()); + } }); array.finish(); return true;