Chinaunix

标题: 在open系统调用中,修改filename路径名,导致文件不能成功打开 [打印本页]

作者: zishang-hhg    时间: 2010-12-02 10:36
标题: 在open系统调用中,修改filename路径名,导致文件不能成功打开
本帖最后由 zishang-hhg 于 2010-12-02 11:19 编辑

在open系统调用中,修改filename路径名,导致文件不能成功打开.如filename=/mnt/tt.txt,通过strcpy,将filename改为/usr/tt.txt是可以成功写入的。而改为/home/tt.txt,或是将filename重新拼接为(strcat为/home/tt.txt)另一个路径,则不能成功。
作者: Godbach    时间: 2010-12-02 12:25
没太明白你的意思,为什么要修改路径名,修改后的路径中是否存在你要打开的文件
作者: zishang-hhg    时间: 2010-12-02 15:06
回复 2# Godbach


    目的是对写操作做重定向,现在想到的是将open系统调用重新封装,在封装函数中,对满足条件的写操作进行重新定向(修改路径名)。
作者: Godbach    时间: 2010-12-02 15:08
show 点代码出来看一下吧
作者: zishang-hhg    时间: 2010-12-02 15:48
回复 4# Godbach



    asmlinkage long new_open(char *filename, int flags, int mode)
{
    dbgprint("hello\n");

        if(strstr(filename,"/mnt") != NULL)
        {
                char * rix = strrchr(filename,'/');
                printk("rix = %s\n",rix);
                sprintf(filename,"%s%s","/home/hhg",rix);
        }

         return old_open (filename, flags, mode);
}
作者: anhongkui    时间: 2010-12-02 16:01
filename的存储够用吗?会不会越界?
作者: zishang-hhg    时间: 2010-12-02 16:05
回复 6# anhongkui


    现在的filename不是用户态空间的吗?
就算是重新定义一个数组char new_file[50];
sprintf(new_file,"%s%s","/home/hhg",rix);

再return old_open(new_file,flags,mode);
也有问题
作者: anhongkui    时间: 2010-12-02 16:13
/home目录,会不会涉及到权限问题? 是root用户创建文件吗?
作者: zishang-hhg    时间: 2010-12-02 16:21
回复 8# anhongkui


    是的
作者: anhongkui    时间: 2010-12-02 16:43
old_open的返回值是啥? 或者用户空间的errno
作者: zishang-hhg    时间: 2010-12-02 16:44
回复 10# anhongkui


    old_open就是原有的open系统调用,返回值是文件描述符吧




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2