例如「;从“用户”处复制“用户”;在Linux内核中(仅复制指向int的指针)

例如「;从“用户”处复制“用户”;在Linux内核中(仅复制指向int的指针),linux,kernel,system-calls,Linux,Kernel,System Calls,我知道有很多关于这个的帖子,但是大多数都很复杂,我希望有人能帮我举个简单的例子 我正在编写一个系统调用,我正在编写的函数具有以下形式: SYS_CALLDEFINE4(calc, int, param1, int, param2, char, operation, int*, result) { //Do system call stuff here } 我知道指向int的指针将是一个问题,因为userspace应用程序可能已经传递了一个指向重要系统空间的指针(我们不想弄乱它)。因此,我需

我知道有很多关于这个的帖子,但是大多数都很复杂,我希望有人能帮我举个简单的例子

我正在编写一个系统调用,我正在编写的函数具有以下形式:

SYS_CALLDEFINE4(calc, int, param1, int, param2, char, operation, int*, result) 
{
//Do system call stuff here
} 
我知道指向int的指针将是一个问题,因为userspace应用程序可能已经传递了一个指向重要系统空间的指针(我们不想弄乱它)。因此,我需要使用
copy\u from\u user
功能

有人能举一个例子,说明如何在确保能够正确访问该指针的上下文中正确使用这两个函数吗

更换

*result = <value>;

假设我更新了指针“result”指向的值。在这种情况下,我是否需要一个
copy\u to\u user
呼叫?我的直觉是否定的,因为我没有给用户返回我在内核空间声明的指针。我的理解是,
copy\u to\u user
仅在该场景中使用。
int local_value = <value>;
if (copy_to_user(&local_value, result, sizeof(*result)))
{
    // 'result' points to inaccessible memory.
}
// assigning 'result' has been successful.
if (put_user(<value>, result) < 0)
{
    // 'result' points to inaccessible memory.
}
// assigning 'result' has been successful.