How exactly is user memory and kernels memory differentiated inside the Linux kernel(in terms of giving security to kernel space)?
What are the different ways I can write in kernel address space from user space?
One way I know is through a system call. There are multiple system calls we can use, but at the end they are all system calls. Even in system calls, we send a data to kernel space, where it(driver or respective module) calls functions like copy_from_user() to copy data from user space to kernel space. Here we exactly are not writing into address space. we are just passing a user pointer which contains the data that needs to be copied into the kernel buffers.
My question is there any way we can access a physical address that is present in the kernel space and perform operations on it?
Second, Apart from system calls are there any other ways I can write into kernel space from an user application?
I referred to this link from stackoverflow. But I think my question is not answered there and is from different perspective. Hence I thought of asking a different question.
Please share your knowledge... Thanks.