- 论坛徽章:
- 0
|
举例
asmlinkage long sys_mount(char __user *dev_name, char __user *dir_name,
char __user *type, unsigned long flags,
void __user *data);
init/do_mounts.c 中就多次调用。
static int __init do_mount_root(char *name, char *fs, int flags, void *data)
{
int err = sys_mount(name, "/root", fs, flags, data);
if (err)
return err;
sys_chdir((const char __user __force *)"/root");
ROOT_DEV = current->fs->pwd.mnt->mnt_sb->s_dev;
printk("VFS: Mounted root (%s filesystem)%s on device %u:%u.\n",
current->fs->pwd.mnt->mnt_sb->s_type->name,
current->fs->pwd.mnt->mnt_sb->s_flags & MS_RDONLY ?
" readonly" : "", MAJOR(ROOT_DEV), MINOR(ROOT_DEV));
return 0;
}
内核中直接调用时,给的确是内核空间的地址,个人猜测
static inline unsigned long __must_check copy_from_user(void *to,
const void __user *from,
unsigned long n)
对地址是否为用户空间,内核空间进行了判断, 并作不同的处理,从而规避了可能的问题出现。 这部分没有细看过,
还请高手解释一下! |
|