[英]Pointers given from user space to kernel space are null
對不起,如果之前已經問過這個問題,因為它看起來很基本,但我在這個網站的任何地方都找不到它。 我正在用linux(debian)進行OS編程,我正試圖從我的用戶空間給我的內核空間函數指針。
即我在用戶空間
...
long res;
int x = -1;
int *p1 = &x; // also tried doing a malloc, didn't change anything
res = kernel_function(p1);
...
在內核空間文件kernel_function.c中我做了
asmlinkage long kernel_function( int __user *p){
printk("%p \n", (void*) p);
return 0;
}
我也做了通常的其他步驟,比如將函數的原型添加到syscalls.h,將文件名添加到syscall_32.tbl等。 但是當我運行我的用戶空間函數時,唯一被打印到內核日志的是(NULL)。 所以該函數被調用,但指針丟失,任何想法為什么會發生這種情況?
您沒有查看任何其他Linux內核函數?
你不能只傳遞一個指針。 那將是非常不安全的。
您需要使用copy_from_user將數據導入內核空間。
似乎已經有一些答案就像這樣: 使用copy_from_user的正確方法是什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.