gpt4 book ai didi

c - 在 Linux 内核中锁定 copy_[to/from]_user()

转载 作者:行者123 更新时间:2023-12-04 12:14:32 25 4
gpt4 key购买 nike

如中所述: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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com