Re: net: heap out-of-bounds in fib6_clean_node/rt6_fill_node/fib6_age/fib6_prune_clone

From: Dmitry Vyukov
Date: Wed Mar 08 2017 - 07:21:54 EST


On Tue, Mar 7, 2017 at 9:00 PM, Dmitry Vyukov <dvyukov@xxxxxxxxxx> wrote:
> On Tue, Mar 7, 2017 at 8:30 PM, Dmitry Vyukov <dvyukov@xxxxxxxxxx> wrote:
>>>> On 3/7/17 11:13 AM, Dmitry Vyukov wrote:
>>>>>> on this warning:
>>>>>>
>>>>>> /* dst.next really should not be set at this point */
>>>>>> if (rt->dst.next && rt->dst.next->ops->family != AF_INET6) {
>>>>>> pr_warn("fib6_add: adding rt with bad next -- family %d dst
>>>>>> flags %x\n",
>>>>>> rt->dst.next->ops->family, rt->dst.next->flags);
>>>>>>
>>>>>> WARN_ON(1);
>>>>>> }
>>>>>>
>>>>>> You should have seen the pr_warn in the log preceding the WARN_ON dump.
>>>>>
>>>>> Right. They all have the same "IPv6: fib6_add: adding rt with bad next
>>>>> -- family 2 dst flags 6"
>>>>
>>>> remove the previous changes and try the attached.
>>>
>>>
>>> Doing this now.
>>> FWIW I've also applied your last patch with missing "iter->dst.flags
>>> &= ~DST_IN_FIB;" and restored the warning in rt6_rcu_free and it did
>>> not fire (in a limited run). I only saw the "WARNING in fib6_add" that
>>> I already reported.
>>
>>
>> So far I've hit only:
>> [ 1103.840031] BUG: KASAN: slab-out-of-bounds in fib6_age+0x3fd/0x480
>> at addr ffff8800799d2254
>> without any preceeding warnings.
>> But note that since the kernel is heavily stressed I can reliably get
>> any pr_err output if it happens right before BUG/WARNING. Anything
>> that happens minutes before will be lots because there are tons of
>> output.
>
>
>
> So far 6 "KASAN: slab-out-of-bounds Read in fib6_age" but no other warnings.


I've got a bunch of the crashes that I was getting previously, but no
new warnings.