[Patch 4.8.2-3] Unexpected behaviour in wineserver

From: Alexander Freudenberg
Date: Tue Dec 20 2016 - 06:02:25 EST


Hi. Patch-4.8.2-3 introduced some unexpected behaviour when running certain, probably Delphi, applications with Wine. Using kernel 4.8.3, on one hand, the wineserver process gets stuck at full load and the application does not start. On the other hand, attempts to login are blocked during that time, making it hard to get into a different tty or even spawn a new terminal. One has to sigkill the wineserver process.

The commit in question is 89eeba1594ac641a30b91942961e80fae978f839 with the relevant part shown below:

105 static struct page *follow_page_pte(struct vm_area_struct *vma, 106 unsigned long address, pmd_t *pmd, unsigned int flags) 107 { 108 @@ -95,7 +105,7 @@ retry: 109 } 110 if ((flags & FOLL_NUMA) && pte_protnone(pte)) 111 goto no_page; 112 - if ((flags & FOLL_WRITE) && !pte_write(pte)) { 113 + if ((flags & FOLL_WRITE) && !can_follow_write_pte(pte, flags)) { 114 pte_unmap_unlock(ptep, ptl); 115 return NULL; 116 } 117 @@ -412,7 +422,7 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma, 118 * reCOWed by userspace write). 119 */ 120 if ((ret & VM_FAULT_WRITE) && !(vma->vm_flags & VM_WRITE)) 121 - *flags &= ~FOLL_WRITE; 122 + *flags |= FOLL_COW; 123 return 0; 124 }

Reverting the changes made by lines 112,113 and 121,122 of patch-4.8.2-3 makes the system and the winserver process behave as expected again.

Steps to reproduce: -use kernel 4.8.3 or above -take a recent Wine release, i.e. 1.9.20 -run a Delphi application. i.e. the Altium Designer Installer, with Wine. It can be received here: https://s3.amazonaws.com/altium-release-manager/Altium_Designer_16/AltiumDesignerSetup_16_1_12.exe

Further discussion: https://bugs.winehq.org/show_bug.cgi?id=41637

Regards, Alex Freudenberg