簡體   English   中英

從用戶空間到內核空間的指針為空

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM