- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试为保存整数“timer_interval”(全局变量)的 sysfs 文件创建一个存储函数。
static ssize_t sys_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count)
{
printk(KERN_ALERT "BUF IS %s and count is %d", buf, count);
int ret;
char *pTemp = kmalloc(100, GFP_KERNEL);
if (pTemp == NULL)
{
printk(KERN_ALERT "malloc WRONG");
return -EFAULT;
}
printk(KERN_ALERT "AFTER MALLOC");
if (ret = copy_from_user(pTemp ,buf, count))
{
printk(KERN_ALERT "COPY WRONG %d", ret);
kfree(pTemp);
printk(KERN_ALERT "%d" , pTemp);
return -EFAULT;
}
printk(KERN_ALERT "AFTER COPY");
if (sscanf(pTemp, "%d", &Timer_interval) < count);
{
printk(KERN_ALERT "SCANF WRONG");
kfree(pTemp);
return -EFAULT;
}
printk(KERN_ALERT "AFTER SCANF COUNT = %d", Timer_interval);
kfree(pTemp);
return count;
}
问题出在复制给用户时。 dmesg 显示分配正常,buf 包含正确的数据,但 copy_from_user 返回缓冲区的大小,这意味着没有复制任何内容。
我在这里做错了什么?
最佳答案
很可能 buf
是一个内核空间指针,您不需要使用 copy_from_user
。 copy_from_user 由内核调用。
更新。
buf
是来自用户的直接缓冲区。你应该检查 buf 的数据是否正确。例如,可以使用文本调用函数,而它需要数字。
顺便说一句。在 sscanf 调用之前,您不检查什么 pTemp 数组包含空终止符。如果您复制缓冲区,则需要检查 src 和 dst 缓冲区的大小,以防止内存损坏或段错误。
关于linux - copy_from_user 返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10599144/
我正在尝试使用模块读取/写入内核内存,到目前为止读取部分正在工作。我有一个来自用户空间的程序,它打开我的模块创建的设备,并且可以从 x addr (内核内存地址)读取 n 个字节,并且这可以工作(正在
我在编译我的内核模块时遇到了一个警告,我无法解决这个问题。 首先看一下这个简化的代码: #define READ_CHUNK 100u static int _procfs_write(struct
我正在尝试编写一个 Open RG 内核模块,它在给定的时间间隔内向用户空间发送一条消息。为此,我需要内核在将存储此消息的用户空间中保存一个指向静态缓冲区的指针。我在将指针发送到内核时遇到问题。 用户
涉及的结构如下。 结构节点{ 诠释; 诠释乙; } struct ioctl_node { struct node **ptr; int count; //Stores
我正在阅读“The Linux Kernel Module Programming Guide”中的一段,我对下一段有一些疑问。 The reason for copy_from_user or ge
我正在阅读 LDD3。在 chapter 8 ,我无法理解这一段: An example of a function in the kernel that uses vmalloc is the cr
我有一个指向用户空间模式下的数据缓冲区的指针,现在我想使用“copy_from_user”函数将该数据的值复制到内核模式。 假设我的数据指针是“data.ptr.buffer”,它的大小是“dat
我只是想知道为什么 copy_from_user(to, from, bytes) 做真正的复制?因为它只是想让内核访问用户空间的数据,是否可以不移动数据而直接将物理地址映射到内核的地址空间?谢谢,
我正在尝试为保存整数“timer_interval”(全局变量)的 sysfs 文件创建一个存储函数。 static ssize_t sys_store(struct kobject *kobj, s
copy_from_user() 用于内核模块。所以我的理解是它在内核空间中运行。但是,在阅读此“仅用户上下文。此功能可能会休眠”后,我感到困惑。谁能给我一个解释? 最佳答案 短语“用户上下文”并不是
在 uaccess.h 中声明的 copy_from_user 函数是否修改了 (void __user *)from 指针?该指针在函数声明中未声明为 const,仅声明其指向的内容。 我问的原因是
这里是返回值的说明。 unsigned long copy_from_user (void *to, const void __user *from, unsigned long count)
我正在寻找将 PID 值从用户空间复制到内核空间的方法,这是我的代码快照。 内核模块: #include #include #include #include #include #inclu
这个问题在这里已经有了答案: Why do you have to use copy_to_user()/copy_from_user() to access user space from the
我正在尝试使用此函数将缓冲区从用户复制到内核中的缓冲区。两个缓冲区都已分配。我使用 while 以防第一次尝试时未复制所有字节。但由于某种原因,没有复制任何内容,并且程序卡在 while 循环中。原因
我有以下系统调用: long do_print(int n, char *p){ char tmp[n]; //allocate array of n bytes int ret = copy
我试图在 Linux 中编写一个加密驱动程序,但是当我加密字符串并使用 copy_from_user() 将其复制到缓冲区时,它不起作用并且 k 值是字符串中的字符数 如果我将 copy_from_u
我使用在 Mint Linux 下运行的 Linux 内核 v4.0.5 开发了一个简单的线规程。 tty_ldisc_ops 结构如下所示: static struct tty_ldisc_ops
我正在尝试使用以下函数将值从用户空间复制到内核空间: static ssize_t device_write(struct file *filp, const char *buff, size_t l
我正在编写一个 linux 内核驱动程序,对于将数据发送到用户空间或从用户空间读取数据的每个函数,我正在使用 copy_to_user() 和 copy_from_user()。我的问题是:如果我只是
我是一名优秀的程序员,十分优秀!