From 33ba5e743c9c993a0f6b02d2a85aa9796240f7e1 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Tue, 17 Jun 2025 23:51:39 +0200 Subject: kernel: fix: Fix duplicates on `IPAddr.cc` and `AsciiUtils.cc`. fix: Fix dead code in `Bool USER_PROCESS::SpawnDylib()` Signed-off-by: Amlal El Mahrouss --- dev/kernel/src/Network/IPAddr.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'dev/kernel/src/Network') diff --git a/dev/kernel/src/Network/IPAddr.cc b/dev/kernel/src/Network/IPAddr.cc index b341af8f..0a030dc8 100644 --- a/dev/kernel/src/Network/IPAddr.cc +++ b/dev/kernel/src/Network/IPAddr.cc @@ -89,18 +89,22 @@ bool IPFactory::IpCheckVersion4(const Char* ip) { if (!ip) return NO; Int32 cnter = 0; + Int32 dot_cnter = 0; for (SizeT base = 0; base < rt_string_len(ip); ++base) { if (ip[base] == '.') { cnter = 0; + ++dot_cnter; } else { - if (!rt_is_alnum(ip[base])) return false; - if (cnter == 3) return false; + if (!rt_is_alnum(ip[base])) return NO; + if (cnter == 3) return NO; ++cnter; } } - return true; + if (dot_cnter != 3) return NO; + + return YES; } } // namespace Kernel -- cgit v1.2.3 From 6c817b699af42ff454b601e592ff1d3e4894d2e5 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Wed, 18 Jun 2025 10:19:56 +0200 Subject: meta: Ran `format.sh` Signed-off-by: Amlal El Mahrouss --- dev/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc | 6 +++--- dev/kernel/src/Network/IPAddr.cc | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'dev/kernel/src/Network') diff --git a/dev/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc b/dev/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc index 61a82314..e6f70f0e 100644 --- a/dev/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc +++ b/dev/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc @@ -11,16 +11,16 @@ #include EXTERN_C Kernel::Void int_handle_breakpoint(Kernel::UIntPtr rip); - EXTERN_C BOOL mp_handle_gic_interrupt_el0(Void); +EXTERN_C BOOL mp_handle_gic_interrupt_el0(Void); -EXTERN_C BOOL kEndOfInterrupt; +EXTERN_C BOOL kEndOfInterrupt; EXTERN_C UInt8 kEndOfInterruptVector; STATIC BOOL kIsRunning = NO; /// @note This is managed by the system software. STATIC void hal_int_send_eoi(UInt8 vector) { - kEndOfInterrupt = YES; + kEndOfInterrupt = YES; kEndOfInterruptVector = vector; } diff --git a/dev/kernel/src/Network/IPAddr.cc b/dev/kernel/src/Network/IPAddr.cc index 0a030dc8..ec7d8a35 100644 --- a/dev/kernel/src/Network/IPAddr.cc +++ b/dev/kernel/src/Network/IPAddr.cc @@ -88,7 +88,7 @@ ErrorOr IPFactory::ToKString(Ref& ipv4) { bool IPFactory::IpCheckVersion4(const Char* ip) { if (!ip) return NO; - Int32 cnter = 0; + Int32 cnter = 0; Int32 dot_cnter = 0; for (SizeT base = 0; base < rt_string_len(ip); ++base) { -- cgit v1.2.3 From 521adeb2466c64ab0d31b97b74cc349a4fcbfb9d Mon Sep 17 00:00:00 2001 From: 0xf00sec <159052166+0xf00sec@users.noreply.github.com> Date: Sun, 22 Jun 2025 16:04:59 +0300 Subject: IPCMsg.cc rt_copy_memory_safe --- dev/kernel/src/Network/IPCMsg.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'dev/kernel/src/Network') diff --git a/dev/kernel/src/Network/IPCMsg.cc b/dev/kernel/src/Network/IPCMsg.cc index cff19cfa..6f54e449 100644 --- a/dev/kernel/src/Network/IPCMsg.cc +++ b/dev/kernel/src/Network/IPCMsg.cc @@ -103,7 +103,7 @@ Bool IPC_MSG::Pass(IPC_MSG* src, IPC_MSG* target) noexcept { if (src->IpcMsgSz > target->IpcMsgSz) return No; if (target->IpcMsgSz > src->IpcMsgSz) return No; - rt_copy_memory(src->IpcData, target->IpcData, src->IpcMsgSz); + rt_copy_memory_safe(src->IpcData, target->IpcData, src->IpcMsgSz, kIPCMsgSize); return Yes; } -- cgit v1.2.3 From bd4466fbe026ac25f84d88d0306b9745b9bbbe8b Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Thu, 31 Jul 2025 00:55:34 +0100 Subject: feat: IPC: use C-lock pattern to retain IPC transfers. Signed-off-by: Amlal El Mahrouss --- dev/kernel/NetworkKit/IPC.h | 8 +++++++- dev/kernel/src/Network/IPCMsg.cc | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) (limited to 'dev/kernel/src/Network') diff --git a/dev/kernel/NetworkKit/IPC.h b/dev/kernel/NetworkKit/IPC.h index 0dd8a1f1..d14356c0 100644 --- a/dev/kernel/NetworkKit/IPC.h +++ b/dev/kernel/NetworkKit/IPC.h @@ -57,6 +57,12 @@ enum { constexpr inline auto kIPCMsgSize = 6094U; +enum { + kIPCLockInvalid, + kIPCLockFree = 1, + kIPCLockUsed = 2, +}; + /// @brief IPC connection header, message cannot be greater than 6K. typedef struct IPC_MSG final { UInt32 IpcHeaderMagic; // cRemoteHeaderMagic @@ -68,7 +74,7 @@ typedef struct IPC_MSG final { UInt32 IpcMsg; UInt32 IpcMsgSz; UInt8 IpcData[kIPCMsgSize]; - + UInt32 IpcLock; /// @brief Passes the message to target, could be anything, HTTP packet, JSON or whatever. static Bool Pass(IPC_MSG* self, IPC_MSG* target) noexcept; } PACKED IPC_MSG; diff --git a/dev/kernel/src/Network/IPCMsg.cc b/dev/kernel/src/Network/IPCMsg.cc index 6f54e449..9abefcef 100644 --- a/dev/kernel/src/Network/IPCMsg.cc +++ b/dev/kernel/src/Network/IPCMsg.cc @@ -87,6 +87,8 @@ Bool ipc_construct_packet(_Output IPC_MSG** pckt_in) { (*pckt_in)->IpcFrom.UserProcessID = 0; (*pckt_in)->IpcFrom.UserProcessTeam = 0; + (*pckt_in)->IpcLock = kIPCLockFree; + return Yes; } @@ -103,8 +105,20 @@ Bool IPC_MSG::Pass(IPC_MSG* src, IPC_MSG* target) noexcept { if (src->IpcMsgSz > target->IpcMsgSz) return No; if (target->IpcMsgSz > src->IpcMsgSz) return No; + UInt32 timeout = 0U; + + while ((target->IpcLock % kIPCLockUsed) != 0) { + if (timeout > 100000U) { + return No; + } + } + + ++target->IpcLock; + rt_copy_memory_safe(src->IpcData, target->IpcData, src->IpcMsgSz, kIPCMsgSize); + --target->IpcLock; + return Yes; } -- cgit v1.2.3