From 604d40fce6b7e69e9494de7381071315536335db Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Mon, 4 Nov 2024 01:38:46 -0500 Subject: kernel: descrip: Only use copyinstr() in SYS_open Signed-off-by: Ian Moffett --- sys/kern/kern_descrip.c | 7 +------ sys/kern/vfs_syscalls.c | 14 +++++++++++++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c index adc5027..c3d9b5c 100644 --- a/sys/kern/kern_descrip.c +++ b/sys/kern/kern_descrip.c @@ -208,17 +208,12 @@ int fd_open(const char *pathname, int flags) { int error; - char pathbuf[PATH_MAX]; struct filedesc *filedes; struct nameidata nd; - nd.path = pathbuf; + nd.path = pathname; nd.flags = 0; - if (copyinstr(pathname, pathbuf, PATH_MAX) < 0) { - return -EFAULT; - } - if ((error = namei(&nd)) < 0) { return error; } diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c index 0ef3d42..fc85759 100644 --- a/sys/kern/vfs_syscalls.c +++ b/sys/kern/vfs_syscalls.c @@ -83,6 +83,18 @@ vfs_dostat(const char *path, struct stat *sbuf) return 0; } +static int +vfs_doopen(const char *pathname, int flags) +{ + char pathbuf[PATH_MAX]; + + if (copyinstr(pathname, pathbuf, PATH_MAX) < 0) { + return -EFAULT; + } + + return fd_open(pathbuf, flags); +} + /* * arg0: pathname * arg1: oflags @@ -92,7 +104,7 @@ vfs_dostat(const char *path, struct stat *sbuf) scret_t sys_open(struct syscall_args *scargs) { - return fd_open((char *)scargs->arg0, scargs->arg1); + return vfs_doopen((char *)scargs->arg0, scargs->arg1); } /* -- cgit v1.2.3