From dd377685f2810780a397577c63e8236e9bd95e8c Mon Sep 17 00:00:00 2001 From: Gordon Tetlow Date: Thu, 19 Mar 2020 16:51:33 +0000 Subject: [PATCH] Fix kernel memory disclosure with nested jails. Approved by: so Security: FreeBSD-SA-20:08.jail Security: CVE-2020-7453 --- sys/kern/kern_jail.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/sys/kern/kern_jail.c b/sys/kern/kern_jail.c index 35564477f00..2cc4f54e6fa 100644 --- a/sys/kern/kern_jail.c +++ b/sys/kern/kern_jail.c @@ -862,8 +862,12 @@ kern_jail_set(struct thread *td, struct uio *optuio, int flags) "osrelease cannot be changed after creation"); goto done_errmsg; } - if (len == 0 || len >= OSRELEASELEN) { + if (len == 0 || osrelstr[len - 1] != '\0') { error = EINVAL; + goto done_free; + } + if (len >= OSRELEASELEN) { + error = ENAMETOOLONG; vfs_opterror(opts, "osrelease string must be 1-%d bytes long", OSRELEASELEN - 1); @@ -1253,9 +1257,11 @@ kern_jail_set(struct thread *td, struct uio *optuio, int flags) pr->pr_osreldate = osreldt ? osreldt : ppr->pr_osreldate; if (osrelstr == NULL) - strcpy(pr->pr_osrelease, ppr->pr_osrelease); + strlcpy(pr->pr_osrelease, ppr->pr_osrelease, + sizeof(pr->pr_osrelease)); else - strcpy(pr->pr_osrelease, osrelstr); + strlcpy(pr->pr_osrelease, osrelstr, + sizeof(pr->pr_osrelease)); LIST_INIT(&pr->pr_children); mtx_init(&pr->pr_mtx, "jail mutex", NULL, MTX_DEF | MTX_DUPOK); -- 2.45.0