[已解决]copy_from_user怎么复制字符串?

内核编译和嵌入式产品的设计与开发
回复
头像
wxf
帖子: 50
注册时间: 2008-05-28 8:50

[已解决]copy_from_user怎么复制字符串?

#1

帖子 wxf » 2024-01-10 17:48

代码: 全选

int dss_openat(struct pt_regs* regs)
{
    //int dfd = regs->di;
    char __user* user_filename = regs->si;
    int flags = regs->dx;

    char filename[256] = { 0 };
    copy_from_user(filename, user_filename, sizeof(filename));

     ......
}
我hook了一个系统调用,想获取打开的文件名。这样做对吗?我不确定。
按道理,最后一个参数是要复制的字节数,可是没法知道传进来的字符串的长度啊
上次由 wxf 在 2024-01-20 21:20,总共编辑 1 次。
头像
astolia
论坛版主
帖子: 6454
注册时间: 2008-09-18 13:11

Re: [求助]copy_from_user怎么复制字符串?

#2

帖子 astolia » 2024-01-10 22:05

复制字符串一般用strncpy_from_user。对路径而言256的缓冲区太小了,linux/limits.h里定义的PATH_MAX都已经是4096了,像ntfs这种支持的路径长度还更长

要通用点可以用strlen_user/strnlen_user来获取字符串长度后再动态分配缓冲区大小
头像
wxf
帖子: 50
注册时间: 2008-05-28 8:50

Re: [求助]copy_from_user怎么复制字符串?

#3

帖子 wxf » 2024-01-11 9:22

astolia 写了: 2024-01-10 22:05 复制字符串一般用strncpy_from_user。对路径而言256的缓冲区太小了,linux/limits.h里定义的PATH_MAX都已经是4096了,像ntfs这种支持的路径长度还更长

要通用点可以用strlen_user/strnlen_user来获取字符串长度后再动态分配缓冲区大小
多谢了。
回复