diff options
| author | Amlal EL Mahrouss <amlalelmahrouss@icloud.com> | 2024-06-29 13:15:29 +0200 |
|---|---|---|
| committer | Amlal EL Mahrouss <amlalelmahrouss@icloud.com> | 2024-06-29 13:15:29 +0200 |
| commit | d9d42bcfeb444652ae198a6bd3481ce316549e55 (patch) | |
| tree | 238e88d868855c4ab6e1c6671bfc18a9930048fe /Kernel/Sources/Network | |
| parent | f562fbf39333925689d6fb704af15efe5f99ed28 (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.cxx | 36 |
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; +} |
