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