PROBLEM: Kernel Bug: Updated gup.c/faultin_page() makes wine crash and system unresponsive

From: Alexander Freudenberg
Date: Tue Jan 03 2017 - 08:27:59 EST


[1.] One line summary of the problem:
Wine crash makes system unresponsive.

[2.] Full description of the problem/report:
Since kernel patch-4.8.2-3, certain applications make the wineserver process stuck, running with full load and blocking user attempts to login. One has to send SIGKILL the wineserver to make the system responsive again. The issue is independent from the wine version, but affects kernels from 4.8.3 and above.

[3.] Keywords (i.e., modules, networking, kernel):
wine, wineserver, kernel

[4.] Kernel information
[4.1.] Kernel version (from /proc/version):
Linux version 4.8.13-ARCH

[4.2.] Kernel .config file:
--

[5.] Most recent kernel version which did not have the bug:
4.8.2

[6.] Output of Oops.. message (if applicable) with symbolic information
resolved (see Documentation/oops-tracing.txt)
--

[7.] A small shell script or example program which triggers the
problem (if possible)
Start the Altium Designer Installer in a new wine prefix:
wine ./AltiumDesignerSetup_16_1_12.exe
available at https://s3.amazonaws.com/altium-release-manager/Altium_Designer_16/AltiumDesignerSetup_16_1_12.exe

[8.] Environment
[8.1.] Software Linux togusa 4.8.13-ARCH #1 SMP PREEMPT Tue Jan 3 11:57:35 CET 2017 x86_64 GNU/Linux GNU C 6.2.1 GNU Make 4.2.1 Binutils 2.27 Util-linux 2.28.2 Mount 2.28.2 Module-init-tools 23 E2fsprogs 1.43.3 Jfsutils 1.1.15 Reiserfsprogs 3.6.25 Xfsprogs 4.8.0 Pcmciautils 018 Linux C Library 2.24 Dynamic linker (ldd) 2.24 Linux C++ Library 6.0.22 Kbd 2.0.3 Console-tools 2.0.3 Sh-utils 8.26 Udev 232 Modules Loaded ablk_helper aesni_intel aes_x86_64 ahci arc4 ata_generic atkbd button cdrom cifs coretemp crc16 crc32c_intel crc3
2_pclmul crc_itu_t crct10dif_pclmul cryptd dca dns_resolver drm drm_kms_helper e1000e edac_core ehci_hcd ehci_pci evdev ext4 fb_sys_fops firewire_core firewire_ohci fjes fscache fscrypto gf128mul ghash_clmulni_intel glue_helper hid hid_generic hmac hp_wmi i2c_algo_bit i2c_i
801 i2c_smbus i8042 input_leds intel_cstate intel_powerclamp intel_rapl intel_rapl_perf ioatdma ip_tables irqbypass isci iTCO_vendor_supp
ort iTCO_wdt jbd2 kvm kvm_intel led_class libahci libata libps2 libsas lpc_ich lrw mac_hid mbcache md4 mei mei_me mei_wdt mousedev mxm_wm
i nls_utf8 nouveau pata_acpi pps_core psmouse ptp rfkill sb_edac sch_fq_codel scsi_mod scsi_transport_sas sd_mod serio serio_raw shpchp s
nd snd_hda_codec snd_hda_codec_generic snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_core snd_hda_intel snd_hwdep snd_pcm snd_timer so
undcore sparse_keymap sr_mod syscopyarea sysfillrect sysimgblt tpm tpm_infineon tpm_tis tpm_tis_core ttm uas usb_common usbcore usbhid us
b_storage video wmi x86_pkg_temp_thermal xhci_hcd xhci_pci x_tables
[8.2.] Processor information (from /proc/cpuinfo):
processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 45 model name : Intel(R) Xeon(R) CPU E5-1620 0 @ 3.60GHz stepping : 7 microcode : 0x710
[8.3.] Module information (from /proc/modules):
--

[8.4.] Loaded driver and hardware information (/proc/ioports, /proc/iomem)
--

[8.5.] PCI information ('lspci -vvv' as root)
--

[8.6.] SCSI information (from /proc/scsi/scsi)
--

[8.7.] Other information that might be relevant to the problem
(please look in /proc and include all information that you
think to be relevant):
--
[X.] Other notes, patches, fixes, workarounds:
Workaround:
Reverting the changes to mm/gup.c/faultin_page() of commit 89eeba1594ac641a30b91942961e80fae978f839 within a recent kernel version solves the issue, but may reopen dirty COW:
--- mm/gup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/gup.c b/mm/gup.c index 22cc22e7432f..6cb23bfb0c74 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -422,7 +422,7 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma, * reCOWed by userspace write). */ if ((ret & VM_FAULT_WRITE) && !(vma->vm_flags & VM_WRITE)) - *flags |= FOLL_COW; + *flags &= ~FOLL_WRITE; // Temporary Wineserver fix return 0; } -- 2.11.0