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
This commit is contained in:
jamie 2015-12-15 17:25:00 +00:00
parent 0851edecae
commit b78d6a91e2

View File

@ -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)");