Hi
I think it should just return whatever copyinstr does and not go
swapping around error numbers, we don't do that anywhere else.
On Mon, Oct 05, 2015 at 11:15:33PM +0200, Benny Lofgren wrote:
> Hi guys,
>
> I was playing around with tame() today, and have a couple of minor
> suggestions:
>
>
> - Return EINVAL instead of ENAMETOOLONG if the request argument string
> is too long. ENAMETOOLONG translates to "File name too long", which I
> think is misleading. Maybe E2BIG would be an alternative, but EINVAL
> feels better to me since it is clearly an invalid argument being passed.
> ENAMETOOLONG is still appropriate for the paths argument of course.
>
> - Add same [EINVAL] condition to the ERRORS section in tame.2.
>
> - While there, elaborate a bit on [EFAULT] since there are more error
> conditions that can generate that.
>
>
> Regards,
>
> /Benny
>
>
>
> Index: lib/libc/sys/tame.2
> ===================================================================
> RCS file: /cvs/src/lib/libc/sys/tame.2,v
> retrieving revision 1.31
> diff -u -p -r1.31 tame.2
> --- lib/libc/sys/tame.2 4 Oct 2015 20:47:16 -0000 1.31
> +++ lib/libc/sys/tame.2 5 Oct 2015 21:06:06 -0000
> @@ -424,6 +424,8 @@ 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
> @@ -435,6 +437,9 @@ to it would exceed
> bytes.
> .It Bq Er EPERM
> This process is attempting to increase permissions.
> +.It Bq Er EINVAL
> +.Ar request
> +is malformed or too long.
> .It Bq Er E2BIG
> The
> .Ar paths
> Index: sys/kern/kern_tame.c
> ===================================================================
> RCS file: /cvs/src/sys/kern/kern_tame.c,v
> retrieving revision 1.57
> diff -u -p -r1.57 kern_tame.c
> --- sys/kern/kern_tame.c 4 Oct 2015 17:55:21 -0000 1.57
> +++ sys/kern/kern_tame.c 5 Oct 2015 21:06:13 -0000
> @@ -255,7 +255,7 @@ sys_tame(struct proc *p, void *v, regist
> &rbuflen);
> if (error) {
> free(rbuf, M_TEMP, MAXPATHLEN);
> - return (error);
> + return ((error == ENAMETOOLONG) ? EINVAL : error);
> }
> #ifdef KTRACE
> if (KTRPOINT(p, KTR_STRUCT))
>