I am trying to make a linux os with encrypted filesystem for the whole OS (boot,kernel,root,...)
I modified EXT4 filesystem's read and write functions. after running a lot of tests everything read and write work fine.
EDIT:
my change is a simple XOR to file contents.
my tests include reading/writing text files, tar archive creation/deletion, sound and videofile creation/copying/deletion and some stress tests.
this is dmesg says when trying to run a binary:
traps: a.out[2765] trap invalid opcode ip:400e73 sp:7ffc9f3d6f10 error:0 in a.out[400000+b4000]
next step was to boot a simple linux based OS on this encrypted filesystem, I modified GRUB 2 bootloader so it cat boot the kernel from encrypted disk. then I faced this problem:
- grub can load linux kernel and kernel boots, but when it tries to run the init proccess I get kernel panic with the message: "init Not tained".
I can see from previous messages that filesystem is loaded by kernel and it is actually reading init file but refuses to run init.
my question is: is kernel reading init file in any other way than using standard read system call? is there something I am doing wrong here?
Any help would be greatly appreciated
EDIT:
now the question is:
how can I decrypt the data that kernel uses by mapping memory?
The kernel will map the
initbinary to memory (i.e, usingmmap()) to execute it. If you have only testedread(), this is quite possibly where your filesystem is failing.