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))