linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* KMSAN: kernel-infoleak in kvm_arch_vcpu_ioctl
@ 2018-11-16 22:09 syzbot
  2018-11-16 22:59 ` Liran Alon
  0 siblings, 1 reply; 2+ messages in thread
From: syzbot @ 2018-11-16 22:09 UTC (permalink / raw)
  To: bp, hpa, kvm, linux-kernel, mingo, pbonzini, rkrcmar,
	syzkaller-bugs, tglx, x86

Hello,

syzbot found the following crash on:

HEAD commit:    006aa39cddee kmsan: don't instrument fixup_bad_iret()
git tree:       https://github.com/google/kmsan.git/master
console output: https://syzkaller.appspot.com/x/log.txt?x=101dcb0b400000
kernel config:  https://syzkaller.appspot.com/x/.config?x=f388ea1732f3c473
dashboard link: https://syzkaller.appspot.com/bug?extid=cfbc368e283d381f8cef
compiler:       clang version 8.0.0 (trunk 343298)
syz repro:      https://syzkaller.appspot.com/x/repro.syz?x=10c56fbd400000
C reproducer:   https://syzkaller.appspot.com/x/repro.c?x=153c8a47400000

IMPORTANT: if you fix the bug, please add the following tag to the commit:
Reported-by: syzbot+cfbc368e283d381f8cef@syzkaller.appspotmail.com

IPVS: ftp: loaded support on port[0] = 21
L1TF CPU bug present and SMT on, data leak possible. See CVE-2018-3646 and  
https://www.kernel.org/doc/html/latest/admin-guide/l1tf.html for details.
==================================================================
BUG: KMSAN: kernel-infoleak in _copy_to_user+0x19a/0x230 lib/usercopy.c:31
CPU: 0 PID: 6697 Comm: syz-executor853 Not tainted 4.20.0-rc2+ #85
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS  
Google 01/01/2011
Call Trace:
  __dump_stack lib/dump_stack.c:77 [inline]
  dump_stack+0x32d/0x480 lib/dump_stack.c:113
  kmsan_report+0x19f/0x300 mm/kmsan/kmsan.c:911
  kmsan_internal_check_memory+0x35b/0x3b0 mm/kmsan/kmsan.c:993
  kmsan_copy_to_user+0x7c/0xe0 mm/kmsan/kmsan_hooks.c:552
  _copy_to_user+0x19a/0x230 lib/usercopy.c:31
  copy_to_user include/linux/uaccess.h:183 [inline]
  kvm_vcpu_ioctl_enable_cap arch/x86/kvm/x86.c:3834 [inline]
  kvm_arch_vcpu_ioctl+0x5dee/0x7680 arch/x86/kvm/x86.c:4132
  kvm_vcpu_ioctl+0xca3/0x1f90 arch/x86/kvm/../../../virt/kvm/kvm_main.c:2748
  do_vfs_ioctl+0xfbc/0x2f70 fs/ioctl.c:46
  ksys_ioctl fs/ioctl.c:713 [inline]
  __do_sys_ioctl fs/ioctl.c:720 [inline]
  __se_sys_ioctl+0x1da/0x270 fs/ioctl.c:718
  __x64_sys_ioctl+0x4a/0x70 fs/ioctl.c:718
  do_syscall_64+0xcf/0x110 arch/x86/entry/common.c:291
  entry_SYSCALL_64_after_hwframe+0x63/0xe7
RIP: 0033:0x4471b9
Code: e8 fc b9 02 00 48 83 c4 18 c3 0f 1f 80 00 00 00 00 48 89 f8 48 89 f7  
48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff  
ff 0f 83 3b 07 fc ff c3 66 2e 0f 1f 84 00 00 00 00
RSP: 002b:00007f1e22946da8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
RAX: ffffffffffffffda RBX: 00000000006f0038 RCX: 00000000004471b9
RDX: 0000000020000000 RSI: 000000004068aea3 RDI: 0000000000000005
RBP: 00000000006f0030 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 00000000006f003c
R13: 6d766b2f7665642f R14: 00007f1e229479c0 R15: 00000000000003e8

Local variable description: ----__pu_val@kvm_arch_vcpu_ioctl
Variable was created at:
  kvm_arch_vcpu_ioctl+0x29d/0x7680 arch/x86/kvm/x86.c:3848
  kvm_vcpu_ioctl+0xca3/0x1f90 arch/x86/kvm/../../../virt/kvm/kvm_main.c:2748

Bytes 0-1 of 2 are uninitialized
Memory access of size 2 starts at ffff8881967ffbb0
Data copied to user address 0000000000706000
==================================================================


---
This bug is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at syzkaller@googlegroups.com.

syzbot will keep track of this bug report. See:
https://goo.gl/tpsmEJ#bug-status-tracking for how to communicate with  
syzbot.
syzbot can test patches for this bug, for details see:
https://goo.gl/tpsmEJ#testing-patches

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: KMSAN: kernel-infoleak in kvm_arch_vcpu_ioctl
  2018-11-16 22:09 KMSAN: kernel-infoleak in kvm_arch_vcpu_ioctl syzbot
@ 2018-11-16 22:59 ` Liran Alon
  0 siblings, 0 replies; 2+ messages in thread
From: Liran Alon @ 2018-11-16 22:59 UTC (permalink / raw)
  To: syzbot
  Cc: bp, hpa, kvm, linux-kernel, mingo, pbonzini, rkrcmar,
	syzkaller-bugs, tglx, x86



> On 17 Nov 2018, at 0:09, syzbot <syzbot+cfbc368e283d381f8cef@syzkaller.appspotmail.com> wrote:
> 
> Hello,
> 
> syzbot found the following crash on:
> 
> HEAD commit:    006aa39cddee kmsan: don't instrument fixup_bad_iret()
> git tree:       https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_google_kmsan.git_master&d=DwIBaQ&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=Jk6Q8nNzkQ6LJ6g42qARkg6ryIDGQr-yKXPNGZbpTx0&m=6-j0bZwOIu2D7UVtppvdFzCPoDvVU1l3ExqVO_Po11o&s=qBVZxFprJcGeWFBppSXwwkTrx3u7E8vv78UxFb1N2yM&e=
> console output: https://urldefense.proofpoint.com/v2/url?u=https-3A__syzkaller.appspot.com_x_log.txt-3Fx-3D101dcb0b400000&d=DwIBaQ&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=Jk6Q8nNzkQ6LJ6g42qARkg6ryIDGQr-yKXPNGZbpTx0&m=6-j0bZwOIu2D7UVtppvdFzCPoDvVU1l3ExqVO_Po11o&s=m7FuREmXFg2ZHCkPmLKPCIrMU2Pw0zlAPdkpQXTtmHs&e=
> kernel config:  https://urldefense.proofpoint.com/v2/url?u=https-3A__syzkaller.appspot.com_x_.config-3Fx-3Df388ea1732f3c473&d=DwIBaQ&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=Jk6Q8nNzkQ6LJ6g42qARkg6ryIDGQr-yKXPNGZbpTx0&m=6-j0bZwOIu2D7UVtppvdFzCPoDvVU1l3ExqVO_Po11o&s=vvmEqhqn8-cl-D88zy6BsN9exSDvIKxVRopXWs0hIYE&e=
> dashboard link: https://urldefense.proofpoint.com/v2/url?u=https-3A__syzkaller.appspot.com_bug-3Fextid-3Dcfbc368e283d381f8cef&d=DwIBaQ&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=Jk6Q8nNzkQ6LJ6g42qARkg6ryIDGQr-yKXPNGZbpTx0&m=6-j0bZwOIu2D7UVtppvdFzCPoDvVU1l3ExqVO_Po11o&s=HTwepMOiTfeo-sYvcbfkdwY3-DouLgzz3XT6a26qLhM&e=
> compiler:       clang version 8.0.0 (trunk 343298)
> syz repro:      https://urldefense.proofpoint.com/v2/url?u=https-3A__syzkaller.appspot.com_x_repro.syz-3Fx-3D10c56fbd400000&d=DwIBaQ&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=Jk6Q8nNzkQ6LJ6g42qARkg6ryIDGQr-yKXPNGZbpTx0&m=6-j0bZwOIu2D7UVtppvdFzCPoDvVU1l3ExqVO_Po11o&s=N7ZWdZk1M360lcHmoXIX8utlbcjYLe7MPu_Gxe3sLBU&e=
> C reproducer:   https://urldefense.proofpoint.com/v2/url?u=https-3A__syzkaller.appspot.com_x_repro.c-3Fx-3D153c8a47400000&d=DwIBaQ&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=Jk6Q8nNzkQ6LJ6g42qARkg6ryIDGQr-yKXPNGZbpTx0&m=6-j0bZwOIu2D7UVtppvdFzCPoDvVU1l3ExqVO_Po11o&s=Y_PwncNZIx_yxjGLefhRu5GpOYmjCqOloLFHGxsH7eQ&e=
> 
> IMPORTANT: if you fix the bug, please add the following tag to the commit:
> Reported-by: syzbot+cfbc368e283d381f8cef@syzkaller.appspotmail.com
> 
> IPVS: ftp: loaded support on port[0] = 21
> L1TF CPU bug present and SMT on, data leak possible. See CVE-2018-3646 and https://urldefense.proofpoint.com/v2/url?u=https-3A__www.kernel.org_doc_html_latest_admin-2Dguide_l1tf.html&d=DwIBaQ&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=Jk6Q8nNzkQ6LJ6g42qARkg6ryIDGQr-yKXPNGZbpTx0&m=6-j0bZwOIu2D7UVtppvdFzCPoDvVU1l3ExqVO_Po11o&s=W59LMRxHTTYAxlGlzLxWOuioL5Z6ousHYqJPO5KJuDI&e= for details.
> ==================================================================
> BUG: KMSAN: kernel-infoleak in _copy_to_user+0x19a/0x230 lib/usercopy.c:31
> CPU: 0 PID: 6697 Comm: syz-executor853 Not tainted 4.20.0-rc2+ #85
> Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
> Call Trace:
> __dump_stack lib/dump_stack.c:77 [inline]
> dump_stack+0x32d/0x480 lib/dump_stack.c:113
> kmsan_report+0x19f/0x300 mm/kmsan/kmsan.c:911
> kmsan_internal_check_memory+0x35b/0x3b0 mm/kmsan/kmsan.c:993
> kmsan_copy_to_user+0x7c/0xe0 mm/kmsan/kmsan_hooks.c:552
> _copy_to_user+0x19a/0x230 lib/usercopy.c:31
> copy_to_user include/linux/uaccess.h:183 [inline]
> kvm_vcpu_ioctl_enable_cap arch/x86/kvm/x86.c:3834 [inline]
> kvm_arch_vcpu_ioctl+0x5dee/0x7680 arch/x86/kvm/x86.c:4132
> kvm_vcpu_ioctl+0xca3/0x1f90 arch/x86/kvm/../../../virt/kvm/kvm_main.c:2748
> do_vfs_ioctl+0xfbc/0x2f70 fs/ioctl.c:46
> ksys_ioctl fs/ioctl.c:713 [inline]
> __do_sys_ioctl fs/ioctl.c:720 [inline]
> __se_sys_ioctl+0x1da/0x270 fs/ioctl.c:718
> __x64_sys_ioctl+0x4a/0x70 fs/ioctl.c:718
> do_syscall_64+0xcf/0x110 arch/x86/entry/common.c:291
> entry_SYSCALL_64_after_hwframe+0x63/0xe7
> RIP: 0033:0x4471b9
> Code: e8 fc b9 02 00 48 83 c4 18 c3 0f 1f 80 00 00 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 0f 83 3b 07 fc ff c3 66 2e 0f 1f 84 00 00 00 00
> RSP: 002b:00007f1e22946da8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
> RAX: ffffffffffffffda RBX: 00000000006f0038 RCX: 00000000004471b9
> RDX: 0000000020000000 RSI: 000000004068aea3 RDI: 0000000000000005
> RBP: 00000000006f0030 R08: 0000000000000000 R09: 0000000000000000
> R10: 0000000000000000 R11: 0000000000000246 R12: 00000000006f003c
> R13: 6d766b2f7665642f R14: 00007f1e229479c0 R15: 00000000000003e8
> 
> Local variable description: ----__pu_val@kvm_arch_vcpu_ioctl
> Variable was created at:
> kvm_arch_vcpu_ioctl+0x29d/0x7680 arch/x86/kvm/x86.c:3848
> kvm_vcpu_ioctl+0xca3/0x1f90 arch/x86/kvm/../../../virt/kvm/kvm_main.c:2748
> 
> Bytes 0-1 of 2 are uninitialized
> Memory access of size 2 starts at ffff8881967ffbb0
> Data copied to user address 0000000000706000
> ==================================================================
> 

The info-leak bug is very simple, What happens is the following:
1) kvm_vcpu_ioctl_enable_cap() is called to enable KVM_CAP_HYPERV_ENLIGHTENED_VMCS which calls nested_enable_evmcs().
2) nested_enable_evmcs() sets enlightened_vmcs_enabled = true and fills up vmcs_version.
3) kvm_vcpu_ioctl_enable_cap() is called again to enable KVM_CAP_HYPERV_ENLIGHTENED_VMCS which calls nested_enable_evmcs().
4) This time nested_enable_evmcs() just returns 0 as enlightened_vmcs_enabled is already true. Without filling vmcs_version!
5) kvm_vcpu_ioctl_enable_cap() continues as usual and returns uninitialised vmcs_version to userspace which leads to kernel info-leak.

I will create a patch to fix this by changing nested_enable_evmcs() to always fill up vmcs_version field.

-Liran



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2018-11-16 23:00 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-11-16 22:09 KMSAN: kernel-infoleak in kvm_arch_vcpu_ioctl syzbot
2018-11-16 22:59 ` Liran Alon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).