From 8ac3fb86f7c432c92a475e1d1dbf4be2f98884ef Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 1 Jun 2015 11:46:06 +0100 Subject: [PATCH] syscall: correct various error returns to follow the spec --- Kernel/filesys.c | 5 +++-- Kernel/syscall_fs2.c | 7 +++++-- Kernel/syscall_other.c | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Kernel/filesys.c b/Kernel/filesys.c index 09879f5c..af474e78 100644 --- a/Kernel/filesys.c +++ b/Kernel/filesys.c @@ -18,6 +18,7 @@ inoptr n_open(char *uname, inoptr *parent) tb = (char*)tmpbuf(); /* temporary memory to hold kernel's copy of the filename */ if (ugets(uname, tb, 512) == -1) { + udata.u_error = EFAULT; *parent = NULLINODE; return NULLINODE; } @@ -81,7 +82,7 @@ inoptr kn_open(char *namep, inoptr *parent) goto nodir; } if(!(getperm(wd) & OTH_EX)){ - udata.u_error = EPERM; + udata.u_error = EACCES; goto nodir; } @@ -274,7 +275,7 @@ bool ch_link(inoptr wd, char *oldname, char *newname, inoptr nindex) } if(!(getperm(wd) & OTH_WR)) { - udata.u_error = EPERM; + udata.u_error = EACCES; return false; } /* Inserting a new blank entry ? */ diff --git a/Kernel/syscall_fs2.c b/Kernel/syscall_fs2.c index 71bd7c04..7cda01fe 100644 --- a/Kernel/syscall_fs2.c +++ b/Kernel/syscall_fs2.c @@ -165,7 +165,7 @@ arg_t _access(void) retval = 0; if (~getperm(ino) & (mode & 07)) { - udata.u_error = EPERM; + udata.u_error = EACCES; retval = -1; } @@ -464,6 +464,9 @@ arg_t _open(void) goto idrop; } } else { + /* The n_open failed */ + if (udata.u_error == EFAULT) + goto cantopen; /* New file */ if (!(flag & O_CREAT)) { udata.u_error = ENOENT; @@ -487,7 +490,7 @@ arg_t _open(void) perm = getperm(ino); if ((r && !(perm & OTH_RD)) || (w && !(perm & OTH_WR))) { - udata.u_error = EPERM; + udata.u_error = EACCES; goto cantopen; } if (w) { diff --git a/Kernel/syscall_other.c b/Kernel/syscall_other.c index 9304de23..0e3f88ad 100644 --- a/Kernel/syscall_other.c +++ b/Kernel/syscall_other.c @@ -61,7 +61,7 @@ arg_t _rename(void) /* Check we can write the src dir, we don't want to fail on ch_link */ if (!(getperm(srcp) & OTH_WR) && esuper()) { - udata.u_error = EPERM; + udata.u_error = EACCES; goto nogood; } /* Destination exists ? If so we must remove it if possible */ -- 2.34.1