Hi Nicholas, On 2015-10-06 09:56, Nicholas Marriott wrote: > I am not convinced, changing errno like this is gratuitous. We actually > do do it elsewhere, but IMO that is unnecessary too.
That's fair enough. One can argue whether a certain error code is better suited than another until the cows come home, but it isn't that big of a deal. I only feel strongly about it because it always helps developers to be as consistent and clear as possible in both the API itself and its documentation. But I realize that this is an edge case anyway, one that you're not likely to encounter unless you've done something seriously wrong, so the ambiguity the current behaviour introduces is hardly a problem in practice. For the record I did a quick grep through the source for instances of copyinstr() and there were 28 in the kernel, of which all but five where path-related. Of the other five, one is in kern_tame.c, one in kern_ktrace.c, two in if.c and one in kern_prot.c (that one does the same error code transformation I suggested). In any case, I hope you at least agree with me that the documentation should reflect actual behaviour? :-) I've updated my diff to tame.2 to describe the error returns more accurately, minus the errno change. (And I hope I got it right, I suck at mdoc...) Regards, /Benny PS. Thanks to Nayden Markatchev and Matthew Martin who both off-list pointed me to Teds blog post where he reasons about the argument being a string. Index: tame.2 =================================================================== RCS file: /cvs/src/lib/libc/sys/tame.2,v retrieving revision 1.31 diff -u -p -r1.31 tame.2 --- tame.2 4 Oct 2015 20:47:16 -0000 1.31 +++ tame.2 6 Oct 2015 10:13:13 -0000 @@ -424,17 +424,24 @@ will fail if: .Bl -tag -width Er .It Bq Er EFAULT .Fa paths +or one of its elements, or +.Fa request points outside the process's allocated address space. .It Bq Er ENAMETOOLONG An element of .Fa paths -is too large, or prepending +is too large, prepending .Fa cwd to it would exceed .Dv PATH_MAX -bytes. +bytes, or +.Fa request +is too long. .It Bq Er EPERM -This process is attempting to increase permissions. +This process is attempting to increase its permissions. +.It Bq Er EINVAL +.Ar request +is malformed or contains invalid keywords. .It Bq Er E2BIG The .Ar paths
