From 25d67aaa9e14152fc589fbc78ba5f421ec232914 Mon Sep 17 00:00:00 2001 From: notsomeidiot123 Date: Mon, 22 Sep 2025 02:57:34 -0400 Subject: [PATCH] Some level of security... i hope --- src/kernel/arch_i386/interrupts.c | 2 -- src/kernel/system/modules.c | 13 ++++++++----- src/kernel/system/modules.h | 2 ++ src/kmodules/disk_driver.c | 20 +++++++++++++------- src/kmodules/disk_driver.h | 4 ++++ src/kmodules/modlib.h | 3 +++ 6 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/kernel/arch_i386/interrupts.c b/src/kernel/arch_i386/interrupts.c index a485056..bce9fa6 100644 --- a/src/kernel/arch_i386/interrupts.c +++ b/src/kernel/arch_i386/interrupts.c @@ -144,7 +144,6 @@ uint32_t pit_init(uint32_t freq){ reload_value = ((3579545)/(freq)); reload_value /= 3; pit_reload(0b100, reload_value); - printf("%d\n", reload_value); uint32_t ms = (reload_value * 3000)/3579545; return ms; } @@ -200,7 +199,6 @@ void idt_load(){ } uint32_t hz_ms = pit_init(50000); - printf("%d\n", hz_ms); // asm volatile("lidt (%0)" : : "m"(&idt_desc)); // outb(0x20, 0x11 ); // outb(0xa0, 0x11); diff --git a/src/kernel/system/modules.c b/src/kernel/system/modules.c index a504566..abe1ab7 100644 --- a/src/kernel/system/modules.c +++ b/src/kernel/system/modules.c @@ -17,11 +17,14 @@ uint32_t module_api(uint32_t func, ...){ switch(func){ case MODULE_API_REGISTER: //do something - void *structure = va_arg(vars, void *); + module_t *structure = va_arg(vars, void *); if(structure == 0){ return -1; } vector_push(modules, structure); + uint32_t tmp = pm_alloc(); + (structure->key) = (modules->size ^ 190507) + tmp << 12 ^ 4405648937 ^ 8592807313 >> 5; + pm_free(tmp); return 0; break; case MODULE_API_ADDFUNC: @@ -33,12 +36,11 @@ uint32_t module_api(uint32_t func, ...){ return_value = -1; break; case MODULE_API_ADDINT: - return_value = -1; + uint32_t int_index = va_arg(vars, uint32_t); //do something break; case MODULE_API_DELINT: - //do something - return_value = -1; + int_index = va_arg(vars, uint32_t); break; case MODULE_API_PRINT: // vmlog(MODULE_NAME, "Testing modules calling kernel functions\n", MLOG_PRINT, vars); @@ -81,7 +83,8 @@ uint32_t module_api(uint32_t func, ...){ map(vaddr, paddr, flags); break; case MODULE_API_UNMAP: - return_value = -1; + vaddr = va_arg(vars, void *); + unmap(vaddr); break; case MODULE_API_PADDR: void *addr = va_arg(vars, void *); diff --git a/src/kernel/system/modules.h b/src/kernel/system/modules.h index d26bbfa..f07e494 100644 --- a/src/kernel/system/modules.h +++ b/src/kernel/system/modules.h @@ -33,6 +33,8 @@ typedef struct module{ uint32_t id; char name[16]; uint8_t flags; + uint16_t interrupts; + uint32_t key; void (*fini)(void); }module_t; diff --git a/src/kmodules/disk_driver.c b/src/kmodules/disk_driver.c index 0bf7fd4..ba7ff85 100644 --- a/src/kmodules/disk_driver.c +++ b/src/kmodules/disk_driver.c @@ -2,6 +2,7 @@ #include "modlib.h" #include "../kernel/drivers/cpuio.h" #include "../kernel/shared/string.h" +#include "disk_driver.h" #define MODULE_NAME "KIDM" @@ -110,6 +111,16 @@ typedef struct PRD{ uint16_t reserved;//set msb when last; }__attribute__((packed)) PRD_T; +module_t module_data = { + init, + 0xfae00000, + MODULE_NAME, + 0, + 0, + 0, + fini +}; + uint8_t native_ide_present = 0; void fini(); @@ -274,18 +285,13 @@ void ide_init(uint32_t BARS[5]){ void init(KOS_MAPI_FP module_api, uint32_t api_version){ api = module_api; api(MODULE_API_PRINT, MODULE_NAME, "KIDM Storage Driver Module v0.1.0\nSupported interfaces: \n"); - module_t module_data = { - init, - 0xfae00000, - "KIDM OFFICIAL 01", - 0 - }; + int status = api(MODULE_API_REGISTER, &module_data); if(status){ api(MODULE_API_PRINT, MODULE_NAME, "Failed to register module, exiting\n"); return; } - + api(MODULE_API_PRINT, MODULE_NAME, "Key Test: %x", module_data.key); vfile_t *pci_drive_dir = fopen(api, "/dev/pci/disk/"); vfile_t **dir_data = (pci_drive_dir->access.data.ptr); for(uint32_t i = 0; dir_data[i]; i++){ diff --git a/src/kmodules/disk_driver.h b/src/kmodules/disk_driver.h index e69de29..2cc22b1 100644 --- a/src/kmodules/disk_driver.h +++ b/src/kmodules/disk_driver.h @@ -0,0 +1,4 @@ +#pragma once +#include "modlib.h" +void init(KOS_MAPI_FP api, uint32_t api_version); +void fini(); \ No newline at end of file diff --git a/src/kmodules/modlib.h b/src/kmodules/modlib.h index aa55e81..fd340b3 100644 --- a/src/kmodules/modlib.h +++ b/src/kmodules/modlib.h @@ -26,6 +26,9 @@ typedef struct module{ uint32_t id; char name[16]; uint8_t flags; + uint16_t interrupts; + uint32_t key; + void (*fini)(void); }module_t; typedef enum vfile_type{