|
发表于 2005-5-31 19:04:00
|
显示全部楼层
Post by qqrilxk
楼上大哥 想问一下 那现在本人在内核中想根椐那些参数指针得到这些参数该怎么做呀 你说的先将数据拷贝到内核这是怎样完成的呀 即然它们在同一个DS中那可不可以就像(*reference)一样直接使用呀 可能不行吧 这又是为什么了
不在同一个ds下,只是ds基址与段界限相同.
Post by qqrilxk
char * getname(const char __user * filename)
{
char *tmp, *result;
result = ERR_PTR(-ENOMEM);
tmp = __getname();
if (tmp) {
int retval = do_getname(filename, tmp);
result = tmp;
if (retval < 0) {
__putname(tmp);
result = ERR_PTR(retval);
}
}
if (unlikely(current->audit_context) && !IS_ERR(result) && result)
audit_getname(result);
return result;
}
看下面这个函数,第125行
114 static inline int do_getname(const char __user *filename, char *page)
115 {
116 int retval;
117 unsigned long len = PATH_MAX;
118
119 if ((unsigned long) filename >= TASK_SIZE) {
120 if (!segment_eq(get_fs(), KERNEL_DS))
121 return -EFAULT;
122 } else if (TASK_SIZE - (unsigned long) filename < PATH_MAX)
123 len = TASK_SIZE - (unsigned long) filename;
124
125 retval = strncpy_from_user((char *)page, filename, len);
126 if (retval > 0) {
127 if (retval < len)
128 return 0;
129 return -ENAMETOOLONG;
130 } else if (!retval)
131 retval = -ENOENT;
132 return retval;
133 } |
|