作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如中所述:http://www.kernel.org/doc/htmldocs/kernel-hacking.html#routines-copy这个功能“可以” sleep 。
那么,在使用此函数时我是否总是必须进行锁定(例如使用互斥锁),还是有异常(exception)?
我目前正在开发一个模块,在我的系统中看到了一些内核错误,但无法重现它们。我有一种感觉,他们被解雇了,因为我目前没有锁定 copy_[to/from]_user()。也许我错了,但闻起来好像与此有关。
我有这样的东西:
static unsigned char user_buffer[BUFFER_SIZE];
static ssize_t mcom_write (struct file *file, const char *buf, size_t length, loff_t *offset) {
ssize_t retval;
size_t writeCount = (length < BUFFER_SIZE) ? length : BUFFER_SIZE;
memset((void*)&user_buffer, 0x00, sizeof user_buffer);
if (copy_from_user((void*)&user_buffer, buf, writeCount)) {
retval = -EFAULT;
return retval;
}
*offset += writeCount;
retval = writeCount;
cleanupNewline(user_buffer);
dispatch(user_buffer);
return retval;
}
在 copy_from_user 运行时,这样做是为了保存还是我需要锁定它以防止其他访问?
我读写的是一个字符设备,如果收到网络中的特殊数据包,可以并发访问这个缓冲区。
最佳答案
如果您复制到或从中复制的内核端数据结构可能会消失,则您需要进行锁定 - 但您应该锁定该数据结构。
关于c - 在 Linux 内核中锁定 copy_[to/from]_user(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7781482/
如中所述:http://www.kernel.org/doc/htmldocs/kernel-hacking.html#routines-copy这个功能“可以” sleep 。 那么,在使用此函数时
我是一名优秀的程序员,十分优秀!