Date: Sun, 20 May 2012 04:02:50 +0200 From: Mateusz Guzik <mjguzik@gmail.com> To: freebsd-jail@freebsd.org Subject: [patch] use-after-free in kern_jail_set and lock leak in prison_racct_modify Message-ID: <20120520020250.GB17691@dft-labs.eu>
index | next in thread | raw e-mail
Hello,
I'm using -CURRENT as of r235649.
Bugs I'd like to report:
1. a use-after-free bug in kern_jail_set triggerable by attempts to
clear persist flag from "empty" persistent jail.
[..]
if (!created) {
prison_deref(pr, (flags & JAIL_ATTACH) /* free */
? PD_DEREF
: PD_DEREF | PD_LIST_SLOCKED);
[..]
#ifdef RACCT
if (!created)
prison_racct_modify(pr); /* dereference */
#endif
td->td_retval[0] = pr->pr_id; /* dereference */
[..]
2. function prison_racct_modify leaks allprison and allproc locks when
modifications don't cause rename.
[..]
sx_slock(&allproc_lock);
sx_xlock(&allprison_lock);
if (strcmp(pr->pr_name, pr->pr_prison_racct->prr_name) == 0)
return;
[..]
=============================
How to reproduce:
jail -c persist=1
jail -n 1 -m persist=0
or
jail -c path=/ command=/usr/bin/true
This causes panic:
Fatal trap 12: page fault while in kernel mode
cpuid = 1; apic id = 01
fault virtual address = 0xffffff8000e37010
fault code = supervisor read data, page not present
instruction pointer = 0x20:0xffffffff80562e0b
stack pointer = 0x28:0xffffff807c995830
frame pointer = 0x28:0xffffff807c995ad0
code segment = base 0x0, limit 0xfffff, type 0x1b
= DPL 0, pres 1, long 1, def32 0, gran 1
processor eflags = interrupt enabled, resume, IOPL = 0
current process = 23244 (jail)
[ thread pid 23244 tid 100077 ]
Stopped at kern_jail_set+0x2dfb: movslq 0x10(%r13),%r12
db> bt
Tracing pid 23244 tid 100077 td 0xfffffe0003075490
kern_jail_set() at kern_jail_set+0x2dfb
sys_jail_set() at sys_jail_set+0x62
amd64_syscall() at amd64_syscall+0x29e
Xfast_syscall() at Xfast_syscall+0xf7
--- syscall (507, FreeBSD ELF64, sys_jail_set), rip = 0x800ed9bdc, rsp = 0x7fffffffd718, rbp = 0x7fffff
ffd790 ---
Proposed trivial patch:
http://student.agh.edu.pl/~mjguzik/patches/jail-use-after-free.patch
--
Mateusz Guzik <mjguzik gmail.com>
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120520020250.GB17691>
