lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200107205302.45yb2rkekz3nat6v@linutronix.de>
Date:   Tue, 7 Jan 2020 21:53:02 +0100
From:   Sebastian Andrzej Siewior <bigeasy@...utronix.de>
To:     syzbot <syzbot+f2ca20d4aa1408b0385a@...kaller.appspotmail.com>
Cc:     alexander.deucher@....com, bp@...en8.de, dave.hansen@...el.com,
        hpa@...or.com, linux-kernel@...r.kernel.org, mingo@...hat.com,
        nicholas.kazlauskas@....com, riel@...riel.com, sunpeng.li@....com,
        syzkaller-bugs@...glegroups.com, tglx@...utronix.de,
        x86@...nel.org, zhan.liu@....com
Subject: Re: WARNING in switch_fpu_return

On 2020-01-01 18:25:09 [-0800], syzbot wrote:
> Hello,
> 
> syzbot found the following crash on:
> 
> HEAD commit:    bf8d1cd4 Merge tag 'scsi-fixes' of git://git.kernel.org/pu..
> git tree:       upstream
> console output: https://syzkaller.appspot.com/x/log.txt?x=17a4ce15e00000
> kernel config:  https://syzkaller.appspot.com/x/.config?x=ed9d672709340e35
> dashboard link: https://syzkaller.appspot.com/bug?extid=f2ca20d4aa1408b0385a
> compiler:       gcc (GCC) 9.0.0 20181231 (experimental)
> userspace arch: i386
> syz repro:      https://syzkaller.appspot.com/x/repro.syz?x=10cc8971e00000

So I tried to reproduce this. syz-prog2c made .c out of the above link.
It starts with:
|int main(void)
| {
|   syscall(__NR_mmap, 0x20000000ul, 0x1000000ul, 3ul, 0x32ul, -1, 0);

and segfaults on execution. The problem is that for for 32bit-x86 this
should be __NR_mmap2 instead. This fixed the mmap() calls however the
openat() still failed… Nothing bad happened in the end since all the
syscalls failed "early".
As a 64bit binary, it is a different story:
- On a Intel box the KVM_RUN ioctl() worked and did not return (CTRL-C
  ended the ioctl() without an error/warning)
- On a AMD box the KVM_RUN ioctl() triggered a reboot of the kvm guest.

> The bug was bisected to:
> 
> commit 92e6475ae0a0383b012eb21c1aaf0e5456b1a3d9
> Author: Nicholas Kazlauskas <nicholas.kazlauskas@....com>
> Date:   Wed Jul 3 14:02:39 2019 +0000
> 
>     drm/amd/display: Set enabled to false at start of audio disable
> 
> bisection log:  https://syzkaller.appspot.com/x/bisect.txt?x=15614e3ee00000

This commit changes a file which is not compiled by the config provided.

> console output: https://syzkaller.appspot.com/x/log.txt?x=13614e3ee00000

> IMPORTANT: if you fix the bug, please add the following tag to the commit:
> Reported-by: syzbot+f2ca20d4aa1408b0385a@...kaller.appspotmail.com
> Fixes: 92e6475ae0a0 ("drm/amd/display: Set enabled to false at start of
> audio disable")
> 
> ------------[ cut here ]------------
> WARNING: CPU: 0 PID: 2862 at arch/x86/include/asm/fpu/internal.h:539
> __fpregs_load_activate arch/x86/include/asm/fpu/internal.h:539 [inline]
> WARNING: CPU: 0 PID: 2862 at arch/x86/include/asm/fpu/internal.h:539
> switch_fpu_return+0x437/0x4f0 arch/x86/kernel/fpu/core.c:343
> Kernel panic - not syncing: panic_on_warn set ...
> CPU: 0 PID: 2862 Comm: kworker/0:3 Not tainted 5.5.0-rc3-syzkaller #0
> Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
> Google 01/01/2011
> Workqueue: events async_pf_execute
> Call Trace:
…
> ff e8 9d 8d 4a 00 0f 0b e9 18 fd ff ff e8 91 8d
> RSP: 0018:ffffc90007ecfa80 EFLAGS: 00010293
> RAX: ffff88809f60e0c0 RBX: ffff88809f60e0c0 RCX: ffffffff812a9ccf
> RDX: 0000000000000000 RSI: ffffffff812aa047 RDI: 0000000000000005
> RBP: ffffc90007ecfb10 R08: ffff88809f60e0c0 R09: ffffed1013ec1c19
> R10: ffffed1013ec1c18 R11: ffff88809f60e0c7 R12: 1ffff92000fd9f51
> R13: ffff88809f60f5c0 R14: 0000000000200000 R15: ffffc90007ecfae8
>  kvm_arch_vcpu_load+0x66e/0x950 arch/x86/kvm/x86.c:3463
>  vcpu_load+0x43/0x90 arch/x86/kvm/../../../virt/kvm/kvm_main.c:201
>  kvm_unload_vcpu_mmu arch/x86/kvm/x86.c:9543 [inline]
>  kvm_free_vcpus arch/x86/kvm/x86.c:9558 [inline]
>  kvm_arch_destroy_vm+0x184/0x5f0 arch/x86/kvm/x86.c:9663
>  kvm_destroy_vm arch/x86/kvm/../../../virt/kvm/kvm_main.c:816 [inline]
>  kvm_put_kvm+0x5a5/0xcc0 arch/x86/kvm/../../../virt/kvm/kvm_main.c:837
>  async_pf_execute+0x3bf/0x800 arch/x86/kvm/../../../virt/kvm/async_pf.c:101
>  process_one_work+0x9af/0x1740 kernel/workqueue.c:2264
>  worker_thread+0x98/0xe40 kernel/workqueue.c:2410
>  kthread+0x361/0x430 kernel/kthread.c:255
>  ret_from_fork+0x24/0x30 arch/x86/entry/entry_64.S:352
> Kernel Offset: disabled
> Rebooting in 86400 seconds..

As part of kvm_arch_vcpu_load() switch_fpu_return() is invoked which
triggers the warning. The problem is that a workqueue should have
TIF_NEED_FPU_LOAD set. I have no idea how that one got set since it
should not be set for kernel threads.

Sebastian

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ