Index | Thread | Search

From:
Claudio Jeker <cjeker@diehard.n-r-g.com>
Subject:
Re: Don't unlock vnode(9) in fifo_read() and fifo_write()
To:
Vitaliy Makkoveev <mvs@openbsd.org>, tech@openbsd.org
Date:
Thu, 18 Apr 2024 11:52:51 +0200

Download raw body.

Thread
On Thu, Apr 18, 2024 at 11:42:09AM +0200, Martin Pieuchot wrote:
> On 17/04/24(Wed) 18:33, Vitaliy Makkoveev wrote:
> > On Tue, Apr 16, 2024 at 04:30:08PM +0200, Claudio Jeker wrote:
> > > On Tue, Apr 16, 2024 at 04:15:05PM +0300, Vitaliy Makkoveev wrote:
> > > > I suspect syzkaller reported panics [1] and [2] happened because sockets
> > > > were closed due vnode(9) lock release.
> 
> How did you come to this conclusion?
> 
> The bug is a NULL dereference:
> 
> uvm_fault(0xfffffd806d2c9780, 0x8, 0, 1) -> e
> kernel: page fault trap, code=0
> Stopped at      fifo_write+0x4e:        movq    0x8(%rax),%r12
> 
> I don't have the same assembly here, but the offset 0x8 seems to correspond
> the `a_uio' field.   So the argument passed to fifo_write() is NULL.
> 
> How can it be NULL?

As I mentioned I think the problem is that the vnode got recycled and UFS is
using a now bad vnode for a totally different operation. This is why nothing
makes sense.

-- 
:wq Claudio