gpt4 book ai didi

c - 如何替换最近取消的宏 "access_ok"的第一个参数?

转载 作者:行者123 更新时间:2023-12-04 15:57:45 34 4
gpt4 key购买 nike

尝试将老式驱动程序从内核 2.6 合并到最新的内核 5.8。
并遇到以下错误:

macro "access_ok" passed 3 arguments, but takes just 2
access_ok是在 asm/uaccess.h 中定义的宏
这是代码片段:
#include <asm/uaccess.h>

if (_IOC_DIR(cmd) & _IOC_READ)
err = !access_ok(VERIFY_WRITE, (void __user *)arg, _IOC_SIZE(cmd));
else if (_IOC_DIR(cmd) & _IOC_WRITE)
err = !access_ok(VERIFY_READ, (void __user *)arg, _IOC_SIZE(cmd));
if (err) return -EFAULT;
我做了一些谷歌搜索,但他们都告诉我切换到支持 access_ok 的低版本内核。这需要 3 个参数,显然这并没有解决我的问题。
所以我想知道我可以替换哪个宏 access_ok和?

最佳答案

根据Torvalds' reply , type参数已从 access_ok() 中删除函数(或宏),并且您需要做的唯一一件事就是将提到的代码片段调整到最新的内核(现在是 5.8),就是简单地删除第一个参数(例如 VERIFY_WRITEVERIFY_READ )
这是修改后的片段。

#include <asm/uaccess.h>

if (_IOC_DIR(cmd) & _IOC_READ)
err = !access_ok((void __user *)arg, _IOC_SIZE(cmd));
else if (_IOC_DIR(cmd) & _IOC_WRITE)
err = !access_ok((void __user *)arg, _IOC_SIZE(cmd));
if (err) return -EFAULT;

关于c - 如何替换最近取消的宏 "access_ok"的第一个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65678527/

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