Re: [syzbot] WARNING in ex_handler_fprestore

From: Andy Lutomirski
Date: Wed May 26 2021 - 18:37:13 EST


On 5/26/21 2:21 PM, Yu, Yu-cheng wrote:
> On 5/26/2021 12:00 AM, Dmitry Vyukov wrote:
>> On Wed, May 26, 2021 at 2:33 AM Andy Lutomirski <luto@xxxxxxxxxx> wrote:
>>>
>>> On 5/24/21 1:51 AM, syzbot wrote:
>>>> Hello,
>>>>
>>>> syzbot found the following issue on:
>>>>
>>>> HEAD commit:    45af60e7 Merge tag 'for-5.13-rc2-tag' of
>>>> git://git.kernel...
>>>> git tree:       upstream
>>>> console output:
>>>> https://syzkaller.appspot.com/x/log.txt?x=1591e9f7d00000
>>>> kernel config: 
>>>> https://syzkaller.appspot.com/x/.config?x=18fade5827eb74f7
>>>> dashboard link:
>>>> https://syzkaller.appspot.com/bug?extid=2067e764dbcd10721e2e
>>>> compiler:       Debian clang version 11.0.1-2
>>>> syz repro:     
>>>> https://syzkaller.appspot.com/x/repro.syz?x=11be6bd1d00000
>>>
>>> Hi syz people and x86 people-
>>>
>>> I entirely believe that this bug is real and that syzbot bisected it
>>> correctly, but I'm puzzled by the reproducer.  It says:
>>>
>>> ptrace$setregs(0xd, r0, 0x0, &(0x7f0000000080))
>>>
>>> I would really, really expect this to result from PTRACE_SETREGSET or
>>> PTRACE_SETFPREGS, but this is PTRACE_SETREGS.
>>>
>>> Am I missing something really obvious here?
>>
>> Hi Andy,
>>
>> Sometimes syzkaller uses data format from one syscall variant, but
>> actually invokes another.
>> But here it does _not_ seem to be the case: 0xd is actually
>> PTRACE_SETREGS. And the other ptrace calls in the reproducer are
>> PTRACE_SEIZE and PTRACE_SINGLESTEP.
>> So I would assume somehow it happened with PTRACE_SETREGS.
>> Is there any indication from hardware as to what's wrong with fpregs?
>>
>
> PTRACE_SETREGS can change segment registers.  The PTRACE_SETREGS is
> using some uninitialized memory area.  One possibility would be that
> XRSTORS has a memory operand outside of segment limits.

It's a regression caused by your fpu__clear_user() patch. tglx and I
are working on it.

The syzbot report is confusing but correct.