[Bug 37669] New: Resetting a write watch can cause memory access violation in kernel

wine-bugs at winehq.org wine-bugs at winehq.org
Thu Dec 4 02:26:50 CST 2014


https://bugs.winehq.org/show_bug.cgi?id=37669

            Bug ID: 37669
           Summary: Resetting a write watch can cause memory access
                    violation in kernel
           Product: Wine
           Version: 1.7.32
          Hardware: x86
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: -unknown
          Assignee: wine-bugs at winehq.org
          Reporter: dmitry at baikal.ru
      Distribution: ---

What happens:
heavy multi-threaded network application in one thread reads/writes from/to
a socket while in another thread .net GC calls GetWriteWatch with flag
WRITE_WATCH_FLAG_RESET on a buffer which was just verified for write access
and passed by ws2_32.recv to recvmsg kernel call. While recvmsg waits for
incoming data GetWriteWatch resets write watches by clearing VPROT_WRITE
access on a buffer passed to recvmsg. That cases recvmsg to return EFAULT
which in turn leads to a .net application raising an exception and dying.

This is basically a .net garbage collector causing races in network code
which reads/writes to a buffer because reading or writing via a network
is much slower than say reading/writing a disk file, but essentially this
is a general problem with resetting a write watch while another thread
is being dealing with the affected memory range.

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list