Hi,

Janne Johansson wrote on Sat, Sep 16, 2023 at 11:49:10AM +0200:

> In case someone wants the change in a diff format, those 5 seconds
> of work are available here:
> http://c66.it.su.se:8080/obsd/unveil.2.diff

How come jj@ forgot we want diffs inline?  <scratching my head>

> +.It Bq Er ENOTDIR
> +.Fa path
> +points to a file that is not a directory.

That diff is certainly not OK.
It is misleading because a "path" argument pointing to a file
that is not a directory is actually valid.

The problem only occurs when you add a trailing slash to the name
of a file that is not a directory, like this:

   $ touch tmp.txt
   $ ls -l tmp.txt  
  -rw-r--r--  1 schwarze  schwarze  0 Sep 16 18:00 tmp.txt
   $ ls -l tmp.txt/
  ls: tmp.txt/: Not a directory
   $ ls -l tmp.txt/foobar
  ls: tmp.txt/foobar: Not a directory

Looking at sys_unveil in /sys/kern/vfs_syscalls.c, i suspect that
errno actually comes from a lower layer, likely namei(9), rather than
from unveil(2) itself.

In library manual pages, we occasionally have sentences like this:

     execv() may fail and set errno for any of the errors specified
     for the library function execve(2).

     The fgetln() function may also fail and set errno for any of the
     errors specified for the routines fflush(3), malloc(3), read(2),
     stat(2), or realloc(3).

But it doesn't look like we do that in system call manuals, and
besides, namei(9) appears to lack the RETURN VALUES section.

So, what is our policy with syscall ERRORS sections?
For standardized syscalls, POSIX probably needs to be taken
into account in addition to our implementation.
But for our very own syscalls?  Hm...

access(2), acct(2), chdir(2), chflags(2), chmod(2), chown(2), chroot(2),
execve(2), getfh(2), ktrace(2), link(2), mkdir(2), mkfifo(2), mknod(2),
mount(2), open(2), pathconf(2), quotactl(2), readlink(2), rename(2),
revoke(2), rmdir(2), stat(2), statfs(2), swapctl(2), symlink(2),
truncate(2), unlink(2), utimes(2) all list ENOTDIR, and i don't see
any right now taking a path argument that don't.

Do we want the following diff?

> I did not sort the existing return values in alphabetical order,
> there were two out of order in there, but that is a separate
> commit I guess.

NetBSD has a policy of sorting ERRORS entries alphabetically, we don't.

Yours,
  Ingo


Index: unveil.2
===================================================================
RCS file: /cvs/src/lib/libc/sys/unveil.2,v
retrieving revision 1.22
diff -u -r1.22 unveil.2
--- unveil.2    6 Sep 2021 08:03:08 -0000       1.22
+++ unveil.2    16 Sep 2023 16:38:24 -0000
@@ -158,6 +158,10 @@
 A directory in
 .Fa path
 did not exist.
+.It Bq Er ENOTDIR
+A component of the
+.Fa path
+prefix is not a directory.
 .It Bq Er EINVAL
 An invalid value of
 .Fa permissions

Reply via email to