summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal <amlal.elmahrouss@icloud.com>2024-11-02 07:46:45 +0100
committerAmlal <amlal.elmahrouss@icloud.com>2024-11-02 07:49:04 +0100
commitf5e656424dc41ff93c67bcc8139a76d40f525efc (patch)
treef701847fb8d2bec8a31c1f24f86afc5f2f338e64
parent358379efc79bdda8b5742b82b95c45063184d76f (diff)
IMP: minOSKrnl commit 1039.
- KernelKit: New allocation limit in Heap.cc - KernelKit: Add Matches method for password validation. - KernelKit: Scheduler and Thread have been improved with new validations on frame. - META: Ran format command. - NewKit: Add new Ptr8 type for UInt8* types. - MBCI: Fix codestyle. Signed-off-by: Amlal <amlal.elmahrouss@icloud.com>
-rw-r--r--dev/Modules/MBCI/MBCI.h45
-rw-r--r--dev/SCIKit/src/Makefile4
-rw-r--r--dev/ZKAKit/CFKit/GUIDWizard.h2
-rw-r--r--dev/ZKAKit/CFKit/Property.h4
-rw-r--r--dev/ZKAKit/FSKit/Defines.h2
-rw-r--r--dev/ZKAKit/FSKit/HPFS.h3
-rw-r--r--dev/ZKAKit/FSKit/NeFS.h2
-rw-r--r--dev/ZKAKit/HALKit/AMD64/HalPagingMgrAMD64.cc7
-rw-r--r--dev/ZKAKit/HALKit/AMD64/HalSchedulerCoreAMD64.cc4
-rw-r--r--dev/ZKAKit/HALKit/ARM64/HalKernelMain.cc3
-rw-r--r--dev/ZKAKit/KernelKit/DriveMgr.h12
-rw-r--r--dev/ZKAKit/KernelKit/HardwareThreadScheduler.h2
-rw-r--r--dev/ZKAKit/KernelKit/PEFCodeMgr.h6
-rw-r--r--dev/ZKAKit/KernelKit/User.h11
-rw-r--r--dev/ZKAKit/KernelKit/UserProcessScheduler.h6
-rw-r--r--dev/ZKAKit/NetworkKit/IP.h2
-rw-r--r--dev/ZKAKit/NewKit/Array.h2
-rw-r--r--dev/ZKAKit/NewKit/Defines.h1
-rw-r--r--dev/ZKAKit/NewKit/Json.h4
-rw-r--r--dev/ZKAKit/NewKit/KString.h8
-rw-r--r--dev/ZKAKit/src/DriveMgr.cc10
-rw-r--r--dev/ZKAKit/src/HardwareThreadScheduler.cc9
-rw-r--r--dev/ZKAKit/src/Heap.cc17
-rw-r--r--dev/ZKAKit/src/User.cc32
-rw-r--r--dev/ZKAKit/src/UserProcessScheduler.cc23
25 files changed, 136 insertions, 85 deletions
diff --git a/dev/Modules/MBCI/MBCI.h b/dev/Modules/MBCI/MBCI.h
index 620e7ec1..00910125 100644
--- a/dev/Modules/MBCI/MBCI.h
+++ b/dev/Modules/MBCI/MBCI.h
@@ -21,8 +21,7 @@
- GND (IN) (OUT for MCU)
*/
-#define cMBCIZeroSz (8)
-#define cMBCIMagic "MBCI "
+#define kMBCIZeroSz (8)
namespace Kernel
{
@@ -39,15 +38,15 @@ namespace Kernel
UInt32 DeviceId;
UInt32 DeviceSpeed;
Bool Acknowledge;
- Char Zero[cMBCIZeroSz];
+ Char Zero[kMBCIZeroSz];
};
enum
{
- eMBCISpeedDeviceInvalid,
- eMBCILowSpeedDevice,
- eMBCIHighSpeedDevice,
- eMBCISpeedDeviceCount,
+ kMBCISpeedDeviceInvalid,
+ kMBCILowSpeedDevice,
+ kMBCIHighSpeedDevice,
+ kMBCISpeedDeviceCount,
};
/// @brief MBCI Host Interface header.
@@ -65,31 +64,31 @@ namespace Kernel
UInt8 InterruptEnable;
UInt64 BaseAddressRegister;
UInt64 BaseAddressRegisterSize;
- Char Zero[cMBCIZeroSz];
+ Char Zero[kMBCIZeroSz];
};
/// @brief MBCI host flags.
enum MBCIHostFlags
{
- eMBCIHostFlagsSupportsNothing, // Invalid MBCI device.
- eMBCIHostFlagsSupportsAPM, // Advanced Power Management.
- eMBCIHostFlagsSupportsDaisyChain, // Is daisy chained.
- eMBCIHostFlagsSupportsHWInterrupts, // Has HW interrupts.
- eMBCIHostFlagsSupportsDMA, // Has DMA.
- eMBCIHostFlagsExtended = __UINT16_MAX__, // Extended flags table.
+ kMBCIHostFlagsSupportsNothing, // Invalid MBCI device.
+ kMBCIHostFlagsSupportsAPM, // Advanced Power Management.
+ kMBCIHostFlagsSupportsDaisyChain, // Is daisy chained.
+ kMBCIHostFlagsSupportsHWInterrupts, // Has HW interrupts.
+ kMBCIHostFlagsSupportsDMA, // Has DMA.
+ kMBCIHostFlagsExtended = __UINT16_MAX__, // Extended flags table.
};
enum MBCIHostKind
{
- eMBCIHostKindHardDisk,
- eMBCIHostKindOpticalDisk,
- eMBCIHostKindKeyboardLow,
- eMBCIHostKindMouseLow,
- eMBCIHostKindMouseHigh,
- eMBCIHostKindKeyboardHigh,
- eMBCIHostKindNetworkInterface,
- eMBCIHostKindDaisyChain,
- eMBCIHostKindStartExtended = __UINT16_MAX__, // Extended vendor table.
+ kMBCIHostKindHardDisk,
+ kMBCIHostKindOpticalDisk,
+ kMBCIHostKindKeyboardLow,
+ kMBCIHostKindMouseLow,
+ kMBCIHostKindMouseHigh,
+ kMBCIHostKindKeyboardHigh,
+ kMBCIHostKindNetworkInterface,
+ kMBCIHostKindDaisyChain,
+ kMBCIHostKindStartExtended = __UINT16_MAX__, // Extended vendor table limit.
};
/// @brief An AuthKey is a context used to decrpy data from an MBCI packet.
diff --git a/dev/SCIKit/src/Makefile b/dev/SCIKit/src/Makefile
new file mode 100644
index 00000000..e518909a
--- /dev/null
+++ b/dev/SCIKit/src/Makefile
@@ -0,0 +1,4 @@
+.PHONY: syscall_unit
+syscall_unit:
+ nasm -f win64 Syscall.asm
+
diff --git a/dev/ZKAKit/CFKit/GUIDWizard.h b/dev/ZKAKit/CFKit/GUIDWizard.h
index b8a85a04..4c5c0c1d 100644
--- a/dev/ZKAKit/CFKit/GUIDWizard.h
+++ b/dev/ZKAKit/CFKit/GUIDWizard.h
@@ -19,6 +19,6 @@ namespace CFKit::XRN::Version1
{
using namespace Kernel;
- Ref<GUIDSequence*> cf_make_sequence(const ArrayList<UInt32>& seq);
+ Ref<GUIDSequence*> cf_make_sequence(const ArrayList<UInt32>& seq);
ErrorOr<Ref<Kernel::KString>> cf_try_guid_to_string(Ref<GUIDSequence*>& guid);
} // namespace CFKit::XRN::Version1
diff --git a/dev/ZKAKit/CFKit/Property.h b/dev/ZKAKit/CFKit/Property.h
index fc9855ed..a88a02f5 100644
--- a/dev/ZKAKit/CFKit/Property.h
+++ b/dev/ZKAKit/CFKit/Property.h
@@ -35,10 +35,10 @@ namespace CFKit
bool StringEquals(KString& name);
PropertyId& GetValue();
- KString& GetKey();
+ KString& GetKey();
private:
- KString fName{kMaxPropLen};
+ KString fName{kMaxPropLen};
PropertyId fAction{No};
};
diff --git a/dev/ZKAKit/FSKit/Defines.h b/dev/ZKAKit/FSKit/Defines.h
index 9967dc1a..53b02459 100644
--- a/dev/ZKAKit/FSKit/Defines.h
+++ b/dev/ZKAKit/FSKit/Defines.h
@@ -8,5 +8,5 @@
#include <NewKit/Defines.h>
-#define FSKIT_VERSION "1.0.0"
+#define FSKIT_VERSION "1.0.0"
#define FSKIT_VERSION_BCD 0x0100
diff --git a/dev/ZKAKit/FSKit/HPFS.h b/dev/ZKAKit/FSKit/HPFS.h
index a019437b..b7b015b0 100644
--- a/dev/ZKAKit/FSKit/HPFS.h
+++ b/dev/ZKAKit/FSKit/HPFS.h
@@ -12,7 +12,7 @@
/// @brief HPFS filesystem support.
#define kHPFSVersion 0x0100
-#define kHPFSMagic " HPFS"
+#define kHPFSMagic " HPFS"
#define kHPFSMagicLen 8
#define kHPFSMinimumDiskSize (gib_cast(64))
@@ -28,4 +28,3 @@ enum
};
struct HPFS_EXPLICIT_BOOT_SECTOR;
-
diff --git a/dev/ZKAKit/FSKit/NeFS.h b/dev/ZKAKit/FSKit/NeFS.h
index b8d28444..dbe892e3 100644
--- a/dev/ZKAKit/FSKit/NeFS.h
+++ b/dev/ZKAKit/FSKit/NeFS.h
@@ -4,7 +4,7 @@
FILE: NeFS.h
PURPOSE: NeFS (New FileSystem) support.
-
+
Revision History:
?/?/?: Added file (amlel)
diff --git a/dev/ZKAKit/HALKit/AMD64/HalPagingMgrAMD64.cc b/dev/ZKAKit/HALKit/AMD64/HalPagingMgrAMD64.cc
index 3c7ea836..49968658 100644
--- a/dev/ZKAKit/HALKit/AMD64/HalPagingMgrAMD64.cc
+++ b/dev/ZKAKit/HALKit/AMD64/HalPagingMgrAMD64.cc
@@ -62,7 +62,7 @@ namespace Kernel::HAL
kcout << (pte->User ? "User" : "Not User") << endl;
}
- STATIC Int32 mmi_map_page_table_entry(VoidPtr virtual_address, UInt32 flags, ZKA_PTE* pt_entry, ZKA_PDE* pd_entry);
+ STATIC Int32 mmi_map_page_table_entry(VoidPtr virtual_address, UInt32 flags, ZKA_PTE* pt_entry, ZKA_PDE* pd_entry);
/***********************************************************************************/
/// @brief Maps or allocates a page from virtual_address.
@@ -127,9 +127,10 @@ namespace Kernel::HAL
/// @brief Maps flags for a specific pte.
/// @internal Internal function.
/***********************************************************************************/
- STATIC Int32 mmi_map_page_table_entry(VoidPtr virtual_address, UInt32 flags, ZKA_PTE* pt_entry, ZKA_PDE* pd_entry)
+ STATIC Int32 mmi_map_page_table_entry(VoidPtr virtual_address, UInt32 flags, ZKA_PTE* pt_entry, ZKA_PDE* pd_entry)
{
- if (!pt_entry) return 1;
+ if (!pt_entry)
+ return 1;
pt_entry->Present = true;
diff --git a/dev/ZKAKit/HALKit/AMD64/HalSchedulerCoreAMD64.cc b/dev/ZKAKit/HALKit/AMD64/HalSchedulerCoreAMD64.cc
index 3f768dff..df2cb902 100644
--- a/dev/ZKAKit/HALKit/AMD64/HalSchedulerCoreAMD64.cc
+++ b/dev/ZKAKit/HALKit/AMD64/HalSchedulerCoreAMD64.cc
@@ -22,9 +22,9 @@ namespace Kernel
Bool hal_check_stack(HAL::StackFramePtr stack_ptr)
{
if (!stack_ptr)
- return false;
+ return No;
- return true;
+ return Yes;
}
/// @brief Wakes up thread.
diff --git a/dev/ZKAKit/HALKit/ARM64/HalKernelMain.cc b/dev/ZKAKit/HALKit/ARM64/HalKernelMain.cc
index 81e14bf6..8098c48a 100644
--- a/dev/ZKAKit/HALKit/ARM64/HalKernelMain.cc
+++ b/dev/ZKAKit/HALKit/ARM64/HalKernelMain.cc
@@ -46,5 +46,6 @@ EXTERN_C void hal_init_platform(
Kernel::NeFileSystemMgr::Mount(new Kernel::NeFileSystemMgr());
- while (Yes);
+ while (Yes)
+ ;
}
diff --git a/dev/ZKAKit/KernelKit/DriveMgr.h b/dev/ZKAKit/KernelKit/DriveMgr.h
index 6f17e03b..38b9624a 100644
--- a/dev/ZKAKit/KernelKit/DriveMgr.h
+++ b/dev/ZKAKit/KernelKit/DriveMgr.h
@@ -34,13 +34,13 @@ namespace Kernel
kFloppyDisc = 0xCD,
kOpticalDisc = 0xDC, // CD-ROM/DVD-ROM/Blu-Ray
/// Storage flags, combine with below.
- kReadOnly = 0x10, // Read only drive
- kEPMDrive = 0x11, // Explicit Partition Map.
- kEPTDrive = 0x12, // ESP w/ EPM partition.
- kMBRDrive = 0x13, // PC classic partition scheme
- kGPTDrive = 0x14, // PC new partition scheme
+ kReadOnly = 0x10, // Read only drive
+ kEPMDrive = 0x11, // Explicit Partition Map.
+ kEPTDrive = 0x12, // ESP w/ EPM partition.
+ kMBRDrive = 0x13, // PC classic partition scheme
+ kGPTDrive = 0x14, // PC new partition scheme
kUnformattedDrive = 0x15,
- kStorageCount = 9,
+ kStorageCount = 9,
};
typedef Int64 rt_drive_id_type;
diff --git a/dev/ZKAKit/KernelKit/HardwareThreadScheduler.h b/dev/ZKAKit/KernelKit/HardwareThreadScheduler.h
index 3e94af75..bd669018 100644
--- a/dev/ZKAKit/KernelKit/HardwareThreadScheduler.h
+++ b/dev/ZKAKit/KernelKit/HardwareThreadScheduler.h
@@ -61,7 +61,7 @@ namespace Kernel
void Busy(const bool busy = false) noexcept;
public:
- bool Switch(VoidPtr image, UInt8* stack_ptr, HAL::StackFramePtr frame);
+ bool Switch(VoidPtr image, Ptr8 stack_ptr, HAL::StackFramePtr frame);
bool IsWakeup() noexcept;
public:
diff --git a/dev/ZKAKit/KernelKit/PEFCodeMgr.h b/dev/ZKAKit/KernelKit/PEFCodeMgr.h
index 32e3c838..568b77da 100644
--- a/dev/ZKAKit/KernelKit/PEFCodeMgr.h
+++ b/dev/ZKAKit/KernelKit/PEFCodeMgr.h
@@ -53,9 +53,9 @@ namespace Kernel
#endif // __FSKIT_INCLUDES_NEFS__
Ref<KString> fPath;
- VoidPtr fCachedBlob;
- bool fFatBinary;
- bool fBad;
+ VoidPtr fCachedBlob;
+ bool fFatBinary;
+ bool fBad;
};
namespace Utils
diff --git a/dev/ZKAKit/KernelKit/User.h b/dev/ZKAKit/KernelKit/User.h
index 3e48f1bd..ebb8cee2 100644
--- a/dev/ZKAKit/KernelKit/User.h
+++ b/dev/ZKAKit/KernelKit/User.h
@@ -65,12 +65,17 @@ namespace Kernel
/// @brief Is she a super user?
Bool IsSuperUser() noexcept;
- Bool TrySave(const UserPublicKey password) noexcept;
+ /// @brief Saves a password from the public key.
+ Bool Save(const UserPublicKey password) noexcept;
+
+ /// @brief Checks if a password matches the **password**.
+ /// @param password the password to check.
+ Bool Matches(const UserPublicKey password) noexcept;
private:
UserRingKind fRing{UserRingKind::kRingStdUser};
- Char fUserName[kMaxUserNameLen] = {0};
- Char fUserToken[kMaxUserTokenLen] = {0};
+ Char fUserName[kMaxUserNameLen] = {0};
+ Char fUserToken[kMaxUserTokenLen] = {0};
};
} // namespace Kernel
diff --git a/dev/ZKAKit/KernelKit/UserProcessScheduler.h b/dev/ZKAKit/KernelKit/UserProcessScheduler.h
index 798519ac..3ec92e8c 100644
--- a/dev/ZKAKit/KernelKit/UserProcessScheduler.h
+++ b/dev/ZKAKit/KernelKit/UserProcessScheduler.h
@@ -154,8 +154,8 @@ namespace Kernel
struct USER_PROCESS_HEAP final
{
VoidPtr MemoryEntry{nullptr};
- SizeT MemoryEntrySize{0UL};
- SizeT MemoryEntryPad{0UL};
+ SizeT MemoryEntrySize{0UL};
+ SizeT MemoryEntryPad{0UL};
struct USER_PROCESS_HEAP* MemoryPrev{nullptr};
struct USER_PROCESS_HEAP* MemoryNext{nullptr};
@@ -275,7 +275,7 @@ namespace Kernel
public:
Ref<UserProcess>& GetCurrentProcess();
- const SizeT Run() noexcept;
+ const SizeT Run() noexcept;
public:
STATIC UserProcessScheduler& The();
diff --git a/dev/ZKAKit/NetworkKit/IP.h b/dev/ZKAKit/NetworkKit/IP.h
index cc50495b..17e6be06 100644
--- a/dev/ZKAKit/NetworkKit/IP.h
+++ b/dev/ZKAKit/NetworkKit/IP.h
@@ -78,6 +78,6 @@ namespace Kernel
public:
static ErrorOr<KString> ToKString(Ref<RawIPAddress6>& ipv6);
static ErrorOr<KString> ToKString(Ref<RawIPAddress>& ipv4);
- static bool IpCheckVersion4(const Char* ip);
+ static bool IpCheckVersion4(const Char* ip);
};
} // namespace Kernel
diff --git a/dev/ZKAKit/NewKit/Array.h b/dev/ZKAKit/NewKit/Array.h
index 6caa5b2d..28060857 100644
--- a/dev/ZKAKit/NewKit/Array.h
+++ b/dev/ZKAKit/NewKit/Array.h
@@ -17,7 +17,7 @@ namespace Kernel
{
public:
explicit Array() = default;
- ~Array() = default;
+ ~Array() = default;
Array& operator=(const Array&) = default;
Array(const Array&) = default;
diff --git a/dev/ZKAKit/NewKit/Defines.h b/dev/ZKAKit/NewKit/Defines.h
index dd9439b6..f43472af 100644
--- a/dev/ZKAKit/NewKit/Defines.h
+++ b/dev/ZKAKit/NewKit/Defines.h
@@ -61,6 +61,7 @@ namespace Kernel
typedef UIntPtr* Ptr64;
typedef UInt32* Ptr32;
+ typedef UInt8* Ptr8;
using Utf8Char = char8_t;
using Utf16Char = char16_t;
diff --git a/dev/ZKAKit/NewKit/Json.h b/dev/ZKAKit/NewKit/Json.h
index 1ca5fae1..05b24808 100644
--- a/dev/ZKAKit/NewKit/Json.h
+++ b/dev/ZKAKit/NewKit/Json.h
@@ -27,7 +27,7 @@ namespace Kernel
public:
explicit JSON()
{
- auto len = cJSONLen;
+ auto len = cJSONLen;
KString key = KString(len);
key += cJSONNull;
@@ -50,7 +50,7 @@ namespace Kernel
}
private:
- Bool fUndefined; // is this instance undefined?
+ Bool fUndefined; // is this instance undefined?
KString fKey;
KString fValue;
diff --git a/dev/ZKAKit/NewKit/KString.h b/dev/ZKAKit/NewKit/KString.h
index 5082f5fa..38cfe330 100644
--- a/dev/ZKAKit/NewKit/KString.h
+++ b/dev/ZKAKit/NewKit/KString.h
@@ -86,9 +86,9 @@ namespace Kernel
struct StringBuilder final
{
static ErrorOr<KString> Construct(const Char* data);
- static const Char* FromBool(const Char* fmt, bool n);
- static const Char* Format(const Char* fmt, const Char* from);
- static bool Equals(const Char* lhs, const Char* rhs);
- static bool Equals(const WideChar* lhs, const WideChar* rhs);
+ static const Char* FromBool(const Char* fmt, bool n);
+ static const Char* Format(const Char* fmt, const Char* from);
+ static bool Equals(const Char* lhs, const Char* rhs);
+ static bool Equals(const WideChar* lhs, const WideChar* rhs);
};
} // namespace Kernel
diff --git a/dev/ZKAKit/src/DriveMgr.cc b/dev/ZKAKit/src/DriveMgr.cc
index c8ab9b6c..3d11600b 100644
--- a/dev/ZKAKit/src/DriveMgr.cc
+++ b/dev/ZKAKit/src/DriveMgr.cc
@@ -147,8 +147,8 @@ namespace Kernel
{
_BOOT_BLOCK_STRUCT block_struct;
- trait.fPacket.fLba = kEPMBaseLba;
- trait.fPacket.fPacketSize = sizeof(_BOOT_BLOCK_STRUCT);
+ trait.fPacket.fLba = kEPMBaseLba;
+ trait.fPacket.fPacketSize = sizeof(_BOOT_BLOCK_STRUCT);
trait.fPacket.fPacketContent = &block_struct;
io_drv_input(&trait.fPacket);
@@ -164,11 +164,11 @@ namespace Kernel
trait.fKind |= kUnformattedDrive;
}
- trait.fPacket.fLba = 0;
- trait.fPacket.fPacketSize = 0UL;
+ trait.fPacket.fLba = 0;
+ trait.fPacket.fPacketSize = 0UL;
trait.fPacket.fPacketContent = nullptr;
}
- }
+ } // namespace Detail
/// @brief Fetches the main drive.
/// @return the new drive. (returns kEPMDrive if EPM formatted)
diff --git a/dev/ZKAKit/src/HardwareThreadScheduler.cc b/dev/ZKAKit/src/HardwareThreadScheduler.cc
index 5c75853c..5c5b8f15 100644
--- a/dev/ZKAKit/src/HardwareThreadScheduler.cc
+++ b/dev/ZKAKit/src/HardwareThreadScheduler.cc
@@ -89,14 +89,14 @@ namespace Kernel
/// @note Those symbols are needed in order to switch and validate the stack.
- EXTERN Bool hal_check_stack(HAL::StackFramePtr stackPtr);
- EXTERN_C Bool mp_register_process(VoidPtr image, UInt8* stack_ptr, HAL::StackFramePtr frame_ptr);
+ EXTERN Bool hal_check_stack(HAL::StackFramePtr frame_ptr);
+ EXTERN_C Bool mp_register_process(VoidPtr image, Ptr8 stack_ptr, HAL::StackFramePtr frame_ptr);
/// @brief Switch to hardware thread.
/// @param stack the new hardware thread.
/// @retval true stack was changed, code is running.
/// @retval false stack is invalid, previous code is running.
- Bool HardwareThread::Switch(VoidPtr image, UInt8* stack_ptr, HAL::StackFramePtr frame)
+ Bool HardwareThread::Switch(VoidPtr image, Ptr8 stack_ptr, HAL::StackFramePtr frame)
{
if (!frame ||
!image ||
@@ -109,6 +109,9 @@ namespace Kernel
if (this->IsBusy())
return No;
+ if (!hal_check_stack(frame))
+ return No;
+
fStack = frame;
Bool ret = mp_register_process(image, stack_ptr, fStack);
diff --git a/dev/ZKAKit/src/Heap.cc b/dev/ZKAKit/src/Heap.cc
index 65781f0e..fc3f7051 100644
--- a/dev/ZKAKit/src/Heap.cc
+++ b/dev/ZKAKit/src/Heap.cc
@@ -102,7 +102,7 @@ namespace Kernel
if (!ptr_heap || new_sz < 1)
return nullptr;
- kcout << "This function is not implemented by the MicroKernel, please use the BSD layer realloc instead.\r";
+ kcout << "This function is not implemented by minOSKrnl, please use the BSD's realloc instead.\r";
ke_stop(RUNTIME_CHECK_PROCESS);
return nullptr;
@@ -120,6 +120,9 @@ namespace Kernel
if (sz_fix == 0)
return nullptr;
+ // We can't allocate that big now.
+ MUST_PASS(sz <= gib_cast(2));
+
sz_fix += sizeof(Detail::HEAP_INFORMATION_BLOCK);
PageMgr heap_mgr;
@@ -236,12 +239,12 @@ namespace Kernel
}
heap_info_ptr->fHeapSize = 0UL;
- heap_info_ptr->fPresent = No;
- heap_info_ptr->fHeapPtr = 0;
- heap_info_ptr->fCRC32 = 0;
- heap_info_ptr->fWr = No;
- heap_info_ptr->fUser = No;
- heap_info_ptr->fMagic = 0;
+ heap_info_ptr->fPresent = No;
+ heap_info_ptr->fHeapPtr = 0;
+ heap_info_ptr->fCRC32 = 0;
+ heap_info_ptr->fWr = No;
+ heap_info_ptr->fUser = No;
+ heap_info_ptr->fMagic = 0;
PTEWrapper pageWrapper(No, No, No, reinterpret_cast<UIntPtr>(heap_info_ptr) - sizeof(Detail::HEAP_INFORMATION_BLOCK));
Ref<PTEWrapper> pteAddress{pageWrapper};
diff --git a/dev/ZKAKit/src/User.cc b/dev/ZKAKit/src/User.cc
index 189d80cf..9ac154f1 100644
--- a/dev/ZKAKit/src/User.cc
+++ b/dev/ZKAKit/src/User.cc
@@ -17,8 +17,8 @@
#include <KernelKit/UserProcessScheduler.h>
#include <KernelKit/Heap.h>
-#define kStdUserType (0xCEEF)
-#define kSuperUserType (0xECCF)
+#define kStdUserType (0xCE)
+#define kSuperUserType (0xEC)
/// BUGS: 0
@@ -43,7 +43,7 @@ namespace Kernel
if (cur_chr == 0)
break;
- password[i_pass] = cur_chr + (user->IsStdUser() ? kStdUserType : kSuperUserType);
+ password[i_pass] = cur_chr | (user->IsStdUser() ? kStdUserType : kSuperUserType);
}
kcout << "Done hashing password!\r";
@@ -67,7 +67,7 @@ namespace Kernel
User::~User() = default;
- Bool User::TrySave(const UserPublicKey password_to_fill) noexcept
+ Bool User::Save(const UserPublicKey password_to_fill) noexcept
{
if (!password_to_fill ||
*password_to_fill == 0)
@@ -103,6 +103,30 @@ namespace Kernel
return Yes;
}
+ Bool User::Matches(const UserPublicKey password_to_fill) noexcept
+ {
+ Char* password = new Char[len];
+ MUST_PASS(password);
+
+ // fill data first, generate hash.
+ // return false on error.
+
+ rt_copy_memory((VoidPtr)password_to_fill, password, len);
+
+ if (!Detail::cred_construct_token(password, password_to_fill, this, len))
+ {
+ delete[] password;
+ password = nullptr;
+
+ return No;
+ }
+
+ kcout << "Validating hashed passwords...\r";
+
+ // now check if the password matches.
+ return rt_string_cmp(password, this->fUserToken, rt_string_len(this->fUserToken)) == 0;
+ }
+
Bool User::operator==(const User& lhs)
{
return lhs.fRing == this->fRing;
diff --git a/dev/ZKAKit/src/UserProcessScheduler.cc b/dev/ZKAKit/src/UserProcessScheduler.cc
index c3e85716..b2fed635 100644
--- a/dev/ZKAKit/src/UserProcessScheduler.cc
+++ b/dev/ZKAKit/src/UserProcessScheduler.cc
@@ -38,9 +38,12 @@ namespace Kernel
/// @brief User Process scheduler global and external reference of thread scheduler.
/***********************************************************************************/
- UserProcessScheduler kProcessScheduler;
+ UserProcessScheduler kProcessScheduler;
- UserProcess::UserProcess(VoidPtr start_image) : Image(start_image) {}
+ UserProcess::UserProcess(VoidPtr start_image)
+ : Image(start_image)
+ {
+ }
UserProcess::~UserProcess() = default;
@@ -127,9 +130,9 @@ namespace Kernel
if (!this->MemoryHeap)
{
- this->MemoryHeap = new UserProcess::USER_PROCESS_HEAP();
+ this->MemoryHeap = new UserProcess::USER_PROCESS_HEAP();
- this->MemoryHeap->MemoryEntryPad = pad_amount;
+ this->MemoryHeap->MemoryEntryPad = pad_amount;
this->MemoryHeap->MemoryEntrySize = sz;
this->MemoryHeap->MemoryEntry = ptr;
@@ -141,7 +144,7 @@ namespace Kernel
}
else
{
- USER_PROCESS_HEAP* entry = this->MemoryHeap;
+ USER_PROCESS_HEAP* entry = this->MemoryHeap;
USER_PROCESS_HEAP* prev_entry = nullptr;
while (!entry)
@@ -439,7 +442,7 @@ namespace Kernel
process.PTime = static_cast<Int32>(process.Affinity);
UserProcessScheduler::The().GetCurrentProcess().Leak().Status = ProcessStatusKind::kFrozen;
- UserProcessScheduler::The().GetCurrentProcess() = process;
+ UserProcessScheduler::The().GetCurrentProcess() = process;
kcout << "Switch to '" << process.Name << "'.\r";
@@ -541,10 +544,18 @@ namespace Kernel
PID prev_pid = UserProcessHelper::TheCurrentPID();
UserProcessHelper::TheCurrentPID() = new_pid;
+ ////////////////////////////////////////////////////////////
+ /// Prepare task switch. ///
+ ////////////////////////////////////////////////////////////
+
auto prev_ptime = HardwareThreadScheduler::The()[index].Leak()->fPTime;
HardwareThreadScheduler::The()[index].Leak()->fPTime = UserProcessScheduler::The().CurrentTeam().AsArray()[new_pid].ProcessId;
Bool ret = HardwareThreadScheduler::The()[index].Leak()->Switch(image_ptr, stack, frame_ptr);
+ ////////////////////////////////////////////////////////////
+ /// Rollback on fail. ///
+ ////////////////////////////////////////////////////////////
+ ///
if (!ret)
{
HardwareThreadScheduler::The()[index].Leak()->fPTime = prev_ptime;