From 6ab6058ec424bd6a8bac84807bc53c674eddfb8c Mon Sep 17 00:00:00 2001 From: Jamie Gritton Date: Tue, 15 Dec 2015 17:25:00 +0000 Subject: [PATCH] Fix jail name checking that disallowed anything that starts with '0'. The intention was to just limit leading zeroes on numeric names. That check is now improved to also catch the leading spaces and '+' that strtoul can pass through. PR: 204897 MFC after: 3 days --- sys/kern/kern_jail.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/sys/kern/kern_jail.c b/sys/kern/kern_jail.c index c8b541fe2b08..6189d8ca6623 100644 --- a/sys/kern/kern_jail.c +++ b/sys/kern/kern_jail.c @@ -1580,11 +1580,14 @@ kern_jail_set(struct thread *td, struct uio *optuio, int flags) #endif onamelen = namelen = 0; if (name != NULL) { - /* Give a default name of the jid. */ + /* Give a default name of the jid. Also allow the name to be + * explicitly the jid - but not any other number, and only in + * normal form (no leading zero/etc). + */ if (name[0] == '\0') snprintf(name = numbuf, sizeof(numbuf), "%d", jid); - else if (*namelc == '0' || (strtoul(namelc, &p, 10) != jid && - *p == '\0')) { + else if ((strtoul(namelc, &p, 10) != jid || + namelc[0] < '1' || namelc[0] > '9') && *p == '\0') { error = EINVAL; vfs_opterror(opts, "name cannot be numeric (unless it is the jid)");