On Mon, Nov 6, 2017 at 6:26 PM, Eric Biggers <ebigge...@gmail.com> wrote:
> On Mon, Nov 06, 2017 at 01:33:09PM +0100, Greg KH wrote:
>> >
>> > I just saw the same crash running syzkaller.  It was preceded by a fault
>> > injection in tty_ldisc_get() here:
>> >
>> >         ld = kmalloc(sizeof(struct tty_ldisc), GFP_KERNEL);
>> >         if (ld == NULL) {
>> >                 put_ldops(ldops);
>> >                 return ERR_PTR(-ENOMEM);
>> >         }
>> >
>> > So then it panics at:
>> >
>> >         if (IS_ERR(ld))
>> >                 panic("n_tty: init_tty");
>> >
>> > It seems that syzkaller needs to do a better job reproducing and reporting 
>> > bugs
>> > that are only reproducible with fault injection.  But either way, this is 
>> > a bug;
>> > panic() is not an acceptable way of handling kmalloc failure.
>>
>> That's a well-known issue, it's pretty much impossible to unwind safely
>> from here.  If you don't have enough memory at boot to get a tty_ldisc,
>> you have bigger problems.
>>
>> thanks,
>>
>> greg k-h
>
> It's not just running at boot though.  It's also being hit by the fuzzer at
> runtime, via ptmx_open().


Correct. An untrusted user can do this at any time. And provoke the
kmalloc failure with a memory-restricted container. I bet one can cook
a program in few hours that instantly kills any linux in existence.

Is it really pretty much impossible to unwind safely from here? I
thought that it's just a problem with the current implementation,
design of which makes it hard to handle this correctly. Because kernel
handles hundreds of resources (incl hardware) in, I think, very
similar situations.

Reply via email to