summaryrefslogtreecommitdiffhomepage
path: root/Kernel/Sources/Network
diff options
context:
space:
mode:
authorAmlal EL Mahrouss <amlalelmahrouss@icloud.com>2024-06-29 13:15:29 +0200
committerAmlal EL Mahrouss <amlalelmahrouss@icloud.com>2024-06-29 13:15:29 +0200
commitd9d42bcfeb444652ae198a6bd3481ce316549e55 (patch)
tree238e88d868855c4ab6e1c6671bfc18a9930048fe /Kernel/Sources/Network
parentf562fbf39333925689d6fb704af15efe5f99ed28 (diff)
kernel: Use local error codes for kernel calls. So that we know which
process caused the error, and it's not global as well. Signed-off-by: Amlal EL Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Kernel/Sources/Network')
-rw-r--r--Kernel/Sources/Network/IPCEP.cxx36
1 files changed, 36 insertions, 0 deletions
diff --git a/Kernel/Sources/Network/IPCEP.cxx b/Kernel/Sources/Network/IPCEP.cxx
index e3a40fb9..0cd9d778 100644
--- a/Kernel/Sources/Network/IPCEP.cxx
+++ b/Kernel/Sources/Network/IPCEP.cxx
@@ -5,3 +5,39 @@
------------------------------------------- */
#include <NetworkKit/IPCEP.hxx>
+
+using namespace NewOS;
+
+Bool ipc_sanitize_packet(IPCEPMessageHeader* pckt)
+{
+ if (!pckt) return false;
+
+ auto endian = DEDUCE_ENDIAN(pckt, ((char*)pckt)[0]);
+
+ switch (endian)
+ {
+ case Endian::kEndianBig:
+ {
+ if (pckt->IpcEndianess == eIPCEPLittleEndian)
+ return false;
+
+ break;
+ }
+ case Endian::kEndianLittle:
+ {
+ if (pckt->IpcEndianess == eIPCEPBigEndian)
+ return false;
+
+ break;
+ }
+ case Endian::kEndianMixed:
+ break;
+ default:
+ return false;
+ }
+
+ if (pckt->IpcFrom == pckt->IpcTo) return false;
+ if (pckt->IpcPacketSize > cIPCEPMsgSize) return false;
+
+ return pckt->IpcPacketSize > 1 && pckt->IpcHeaderMagic == cRemoteHeaderMagic;
+}