From 3b8bd6f0dadae3941f32fd2fea73bc75b9008b8f Mon Sep 17 00:00:00 2001 From: SpookyDervish Date: Wed, 28 Jan 2026 18:31:58 +1100 Subject: [PATCH] lock kernel pages --- OVMFbin/OVMF_VARS-pure-efi.fd | Bin 131072 -> 131072 bytes kernel/bin/CustomOS.img | Bin 48000000 -> 48000000 bytes kernel/bin/kernel.elf | Bin 17104 -> 17136 bytes kernel/kernel.ld | 2 ++ kernel/lib/kernel.o | Bin 3384 -> 3304 bytes kernel/src/kernel.cpp | 31 +++++++++++-------------------- 6 files changed, 13 insertions(+), 20 deletions(-) diff --git a/OVMFbin/OVMF_VARS-pure-efi.fd b/OVMFbin/OVMF_VARS-pure-efi.fd index bd3a30a1ce46208170a0386185bef53a3ddef4e2..21c2b9929d900cdbe616c1e68df2f38793996979 100644 GIT binary patch delta 82 zcmZo@;Am*z*ifOx*fRN`mGlxX-PayKn+Ah_Fxz*kwiC+5|DKZ*h&>oc^=Adrur0e-U}~0!{_a3p zzuke^#mhM}X8W0PAdtE%yC@rEUCr`N@Spx9hvwufUC*1gD?6z$gWIx;I{BCXaK=A% z=UO>coa8ULHOpNp_iqs^x5!ZwtYVi>+I>48D!%sLJ?zT9Rp@r{h6Rc{wWow?2XEI1 z)gF~wd(w#8`B3eIe6?5PtG(ShP`-^jwabTUm%UvhRQsQ6IXP+mb5pZQ@A98^o=B?y zTsrsj#;`zLyC!$qO7Uf9|DBVw#{{d|WlNNe;SAHWQo;jiz9KPZMO8b#`WLmxdAQBK z9lVwDzAK{{i#XnLn%A)l05na9UQ$>4Q9$wbQrM)Tw5#_Z-bUQO&OB z@m{%V)7@DgJ0b6y zTg{(Q_H@tFCKzqkh+TgSun; z$tmOI(RU~jq27+g3x$>N7AsuDs!ZyZ$FjaMsm|=CCc_C!%pNBkH0PZVXTqBkhMHI> zd}a~}-s>05sOH@7B$Mi7XPOKrd*PDV>trjN^G-I!gvS#eHnC0^U=ri)pEzZs7Ix=J zi%N58TB%U5P7x!lLe}yoZo&;0h@~x$)!yx2bYoF=?c^_qg%aPp`ATm7Akk^}g@P4J zzZCU@p)V_Qs)Ze1v0ZM`Yh}5c8Rt$;GM<)pg-OHQS_}9jI_*p-SSjQqxOTxd*`0sO zJ=6qu!YVhf1&3yTi|sckb290+*lR&QB?Djx}yR!QEEwJB?cJ zxpfv5sIxVcH#1tx3$zun=t-J|3kF~$sOWB(D}W%&59!$QTj!H)K1nB)YzVX?eVOIDO+ne>xkWldIs9p~v`t}q&Y`@ewLj{Hjz ztRC8N(2VS8clInd8_3!Nnz1x;Us&0No$T60C(v_RgwHhYWH%3=*(%g;Ymz(J@tz%- z8BS2KReUOiR0^vUQ3+Qms&a=)F_q#fB~(hPM5vTfDXmgQrL0OhmGUYTRPI!%s8UJg zE|tnERaB~~R8xsmsjd>G60K50rKUm}gK&7EdoJu2=#wtxz znyNHYX|58l(n6)BN-LGtDs5ESsJgM@O$^@0CRi06KR^>UB z=T#=EOi~G|OjenqGF4@o%5)V~nV~XMB~@jXN}9?GDzjDQsLWMKSDB~sqRM=g1u8G8 zEL1Tni&Pe?EKzw`;O9 zwJPgW)~jq#c~@nl%6lsBt87xqRN1WZfyx$@4^=)=`B>!>m8~jSD%(^(RoSlcnaU28 zohrLjcB|}B*{iZoWxvYjDhE`)P&ue_Nae7~mnuh8zEU}=^0mq_mE$VksGLwasq(GL zcPgh;POE&caz^E>$~l!ERDM+XNhMq5yvhZYiz=5?epdNKneY!+)%lx@~6sQDz{YrR{2LIXO?*8hzDMT!G;foP#8rJj-t2&#ZVk2P!bU+h0-X4 zvM7i0sDL|B5tVQkDx(Ujq8cJm9Z`rz4b(&}#Gp1}Q3rKV5B1Ri4H1V%XpAOkie_kz zc(g!Ev_fmNL0h!L-Dr;vNI*w)f*;O(>5KppaSytnE4raOdY~tIp*Q-VFZv+~{V@Rd zVj%9rAPmO+cmNM#2!`Sz48w3dj1hPQBQXk(Vl>8JEFQx+Bx5`tM+%<6lXwaf@HC#m zvv>~AV3OshEc8P|Uzgq+%A*@B(II4(1{q^Y9|(V*y^mLKrN;2;j+FuueQe1)U<8pm)P-{1sJ;#+)&Q#g(9 zaRz5`4nN>W{Df?r#|2!(CH#zE@GCCk3a;WeT*L3Ujz4e%H}NO_!Y%xbe~{yuC0;)M z@FEO0d?R^WBKfj99MR$>)0@HSTC9jw7x ztiyV2z`NLp_wYV8ArqVN0k+^ne1wnj3AQ2&+wdv2<1_5QPVB;N?7?2_!+v~@1NZ_5 caR`U;C63@L9L3i-hU54KC%kLrq_@_80D{aHUH||9 delta 5218 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 delta 2146 zcmZuydrX^E6u-Anuw*<60|rCd!W^$Hz!-GGbZzwuC1!@;m@vVhVJ!0x-2)dgWwZhf z(9A%N2}2VD|LBa5jp1WN9CU87CCg+nGiJf0oy=h-5rl0Rr}fGRKr03l8JLmk) zx%YnkzS(v@(ayUwc}!21Syvv%R4MP-pR23WN~f-8z??N4A{`bZZ73S?tIC&tm5D5H zo}ph2H4IhpCzJRX^d=i$R5Xm)kH^<12%~t<`BChhmMN#M%>%LC*9yK?9G=6D5$^8+Gu1{$B zAP7rp=Q8TZWz?Egs4FG)b3qPC{RHA}WvX>7c3km_!|YV1#+4DVx>FN4leJ+u(7sOP z5*}V&kU>uIU;(WgV|ZYnKh#;qCo#UVL#r~vTboDXj=kTFrHl3UoY2QIv1OxndIZW- z)ybsyBUEMwf8hS`a3{R`3Bwu9@I~R5A`MBTMRrDOsJc| zin;?{LR|(<)H)bIeFZ$I-v%G*8Q=v5J_jb$^I$D7m~Q;)_wUeP2WwP}OY>A@SV*yE zP52`$1)&FcJAZ)_bFnk(bKpU}06x^afNwQ$7no2_gLSLHl>EEj@4%`hCe0gyNHSrE zqu|8cPhbFZqh|d6iidJ{F6GwX+r$Ds%sm0T(7?OEg!)ae7T!iAtEiM;fP+PGN-X2d zA~;a)NW=VS1wM-$LVVJ&XxxdwC(sIcK^m3{zM{mW0z~yp!@RK)K0wiDKyOZLsixX@ z@b4w$rZj9n;h9t=FN(2l!p{({r~EI~E@8}3Ac3`ndnkXCxCN9xY1j`ke-ArJ1$dUK z+@yk%2|olE7}lbAWG4Y$>B?O|*p7Yr*Afi0fGx>tE6R zDCPIB*j_*3HkwL(sF3GF;yJy7=ZwUmcbmTDBGpdPgbq0h`;BVPQY~&!mAjPBBBk%5 zKrvps*y&sJA#%ttt0$aXW}yX0d=JymB?UG=N(H+JcT&M^!kud*aE$Oc{M?Dg0kP1+ z2F}M5lgcTYM`H!L9DzZMwqaBpG^4MjgKGQ0htW@|_8M9tUR5*p4d{y#lde$oGrGLM zobQ4aqq7wKamDVE;b8H7I9$>NFYibIp>^(G8xqV$I9IzPqb?C9= z>b!K#Ubt*23YDU8;B3S;PGfazzF1@@aPUb z;nB+rQRoU(a&F@eAI8b~OyZL}m^5V=+?}1R6g1rZLNyf(P4$fQ3>AzFjLZxS4U8Ek zpJyr+7G?r!b>tIhV{+zYW9DPxVdt29kW+GU0dtC|5CbCvJIG`p0ILJiDw7#m#2JIZ ziYaRZot4NQIklTwo>0@Z1NNx#VlSxhFe)`)qh7UiYpxaOrW#6y_DC5c5P zlh3e9@LKxhCuavFrl%IW29!;%WL=_a1Gblefdxpj0r8*z5Kx08&OW)8O+1$aNwy0r z3-T5xlK2`N;=7^ZAX~VQ)E`1p&x|B~dGbXzal`viS&%LsB-z(U;-ENzx%odx7bDx` zKn`(6@yUuD;*xrd5Tzh@g3RZJa2f1DvW(u78-Z%Vp=v<3Ae)vAR#OBvtr=|EEHu-^ zpr)+`$r^4)GKU{119R13BynW(uY=9M2R8pbm@TsTCx<*Eqts+cE^|%=P;3Cfg2|Cw z=8RF3Cvw??N%hG;xFk5EKt2Kj&B=+(!jpBlRT!Hm2Xfmp&YwIHNG_Osk=uUq1a6MW p57VFrfD zQB0b01{Dkp?#|9u3L5Typ_&SYrg}zth6+XoMrHGb=kTpUKj125hK3G4Htv~r9vp8cMh@8YC!FUkN zeGVqSf=TJgi7eubu3$1}@M_6hn*Rw91{Ebz@z%VGauoNg2 zkeHt8TE-9`WoS^6AD>ZNQk0pOo(s0t25LFTdF+#Q*~ED{fUG~j-~oZ=$s5_k4W}Tf z;Y5;MfF#a^B)(>{AiH?|0VG*uUB{u~pwMClVwm@D;86b_O+7c14-7dl0J$95d>)9n z5IDqnfRZrJNKAHQ7njt*q0M;mMWCz;4%z6*j2z;UIXGl1CNE?cXKVqRKLdxF`5^NX zH{g)HiX_g5ECppbI zBiJB{c1-5vGG}a??8s#=+5y!FOQK*Ez%(a3c?FjQCrnmnvLR694wnk!mdT9V_LC2A zb4>Q&wgA%|+!jm>%##ms+c61nPG;hframebuffer, bootInfo->psf1_Font); @@ -31,6 +34,13 @@ extern "C" void _start(BootInfo* bootInfo) { PageFrameAllocator newAllocator; newAllocator.ReadEFIMemoryMap(bootInfo->mMap, bootInfo->mMapSize, bootInfo->mMapDescriptorSize); + // ensure we don't absolutely fuck shit up + uint64_t kernelSize = (uint64_t)&_KernelEnd - (uint64_t)&_KernelStart; + uint64_t kernelPages = (uint64_t)kernelSize / 4096 + 1; + + newAllocator.LockPages(&_KernelStart, kernelPages); + + // print out ram info newRenderer.Print(0xFFFFFFFF, "Free RAM: "); newRenderer.Print(0xFF00FFFF, to_string(newAllocator.GetFreeRAM() / 1024)); newRenderer.Print(0xFF00FFFF, " KB"); @@ -44,24 +54,5 @@ extern "C" void _start(BootInfo* bootInfo) { newRenderer.Print(0xFF00FFFF, " KB"); newRenderer.cursorPosition = {0, newRenderer.cursorPosition.y + 18}; - for (int t = 0; t < 20; t++) { - void* address = newAllocator.RequestPage(); - newRenderer.Print(0xFFFFFFFF, "0x"); - newRenderer.Print(0xFFFFFFFF, to_hstring((uint64_t)address)); - newRenderer.cursorPosition = {0, newRenderer.cursorPosition.y + 18}; - } - - //newRenderer.Print(0xFFFFFFFF, to_string(GetMemorySize(bootInfo->mMap, mMapEntries, bootInfo ->mMapDescriptorSize))); - - - // for (int i = 0; i < mMapEntries; i++) { - // EFI_MEMORY_DESCRIPTOR* desc = (EFI_MEMORY_DESCRIPTOR*)((uint64_t)bootInfo ->mMap (i * bootinfo->mMapDescriptorSize)); - // newRenderer.Print(0xFFFFFFFF, EFI_MEMORY_TYPE_STRINGS[desc->type]); - // newRenderer.Print(0xFFFFFFFF, " "); - // newRenderer.Print(0xFFFF00FF, to_string(desc->numPages * 4096 / 1024)); - // newRenderer.Print(0xFFFF00FF, " KB"); - // newRenderer.cursorPosition = {0, newRenderer.cursorPosition.y + 18}; - // } - return; } \ No newline at end of file