On Mon, Aug 07, 2017 at 09:12:00PM +0200, Matthieu Herrb wrote:
> On Mon, Aug 07, 2017 at 09:08:53PM +0200, Mark Kettenis wrote:
> > > Date: Mon, 7 Aug 2017 20:53:59 +0200
> > > From: Matthieu Herrb <matth...@herrb.eu>
> > > 
> > > On Mon, Aug 07, 2017 at 05:04:46PM +0200, Mark Kettenis wrote:
> > > > > Date: Mon, 7 Aug 2017 16:46:42 +0200 (CEST)
> > > > > From: Mark Kettenis <mark.kette...@xs4all.nl>
> > > > > 
> > > > > > Date: Sun, 6 Aug 2017 19:44:49 -0700
> > > > > > From: Max Parmer <m...@trystero.is>
> > > > > > 
> > > > > > >Synopsis:  X server segfaults in VESA driver as Linux KVM guest
> > > > > > >Category:  system
> > > > > > >Environment:
> > > > > >     System      : OpenBSD 6.1
> > > > > >     Details     : OpenBSD 6.1-current (GENERIC.MP) #45: Sat Aug  5 
> > > > > > 16:22:04 MDT 2017
> > > > > >                      
> > > > > > dera...@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC.MP
> > > > > > 
> > > > > >     Architecture: OpenBSD.amd64
> > > > > >     Machine     : amd64
> > > > > > >Description:
> > > > > >     startx crashes with an illegal instruction leaving a jumble of
> > > > > >     colors on screen.
> > > > > > 
> > > > > >     After enabling suid coredumps I retrieved this backtrace:
> > > > > >     (gdb) bt
> > > > > >     #0  0x0000169016f7e620 in xf86SlowBcopy () from 
> > > > > > /usr/X11R6/bin/Xorg
> > > > > >     #1  0x00001692b393238a in VESASaveRestore () from
> > > > > >     /usr/X11R6/lib/modules/drivers/vesa_drv.so
> > > > > >     #2  0x00001692b39314ea in VESAScreenInit () from
> > > > > >     /usr/X11R6/lib/modules/drivers/vesa_drv.so
> > > > > >     #3  0x0000169016f147d3 in AddScreen () from /usr/X11R6/bin/Xorg
> > > > > >     #4  0x0000169016f5dcb2 in InitOutput () from /usr/X11R6/bin/Xorg
> > > > > >     #5  0x0000169016f18774 in dix_main () from /usr/X11R6/bin/Xorg
> > > > > >     #6  0x0000169016f01914 in _start () from /usr/X11R6/bin/Xorg
> > > > > >     #7  0x0000169016f018c0 in ?? () from /usr/X11R6/bin/Xorg
> > > > > >     #8  0x0000000000000000 in ?? ()
> > > > > 
> > > > > Looks like clang is uptimizing xf86SlowBcopy() to use SSE
> > > > > instructions.  I wouldn't be surprised that those are indeed
> > > > > unsupported on memory mapped device memory.  Since the whole purpose
> > > > > of xf86SlowBcopy to do a bytewise unoptimized copy, we need to tell
> > > > > the compiler not to optimize this code.
> > > > 
> > > > FreeBSD fixed this:
> > > > 
> > > > https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=202643
> > > 
> > > Here's an adaptation of Dimitry's patch for xenocara (tested here).
> > 
> > The xf86Init.c bit isn't supposed to be in here is it?
> 
> Ooups no. Glad I only had this small change in this tree :)
> > 
> > The Makefile bits are ok kettenis@
> > 
> > > Index: hw/xfree86/common/xf86Init.c
> > > ===================================================================
> > > RCS file: /cvs/OpenBSD/xenocara/xserver/hw/xfree86/common/xf86Init.c,v
> > > retrieving revision 1.25
> > > diff -u -p -u -r1.25 xf86Init.c
> > > --- hw/xfree86/common/xf86Init.c  9 Aug 2016 18:59:52 -0000       1.25
> > > +++ hw/xfree86/common/xf86Init.c  6 Mar 2017 22:20:33 -0000
> > > @@ -945,6 +945,10 @@ InitOutput(ScreenInfo * pScreenInfo, int
> > >  
> > >      RegisterBlockAndWakeupHandlers((BlockHandlerProcPtr) NoopDDA, 
> > > xf86Wakeup,
> > >                                     NULL);
> > > +#ifdef X_PRIVSEP
> > > +    ErrorF("enabling local access\n");
> > > +    LocalAccessScopeUser();
> > > +#endif
> > >  }
> > >  
> > >  /**
> > > Index: hw/xfree86/os-support/misc/Makefile.am
> > > ===================================================================
> > > RCS file: 
> > > /cvs/OpenBSD/xenocara/xserver/hw/xfree86/os-support/misc/Makefile.am,v
> > > retrieving revision 1.4
> > > diff -u -p -u -r1.4 Makefile.am
> > > --- hw/xfree86/os-support/misc/Makefile.am        2 May 2014 19:27:49 
> > > -0000       1.4
> > > +++ hw/xfree86/os-support/misc/Makefile.am        7 Aug 2017 18:31:57 
> > > -0000
> > > @@ -7,6 +7,11 @@ libmisc_la_SOURCES = SlowBcopy.c
> > >  
> > >  AM_CPPFLAGS = $(XORG_INCS)
> > >  
> > > -AM_CFLAGS = $(XORG_CFLAGS) $(DIX_CFLAGS)
> > > +if I386_VIDEO
> > > +NOSSE_CFLAGS = -mno-sse
> > > +endif
> > > +
> > > +AM_CFLAGS = $(XORG_CFLAGS) $(DIX_CFLAGS) $(NOSSE_CFLAGS)
> > > +
> > >  
> > >  EXTRA_DIST = $(I386_SRCS) $(PORTIO_SRCS)
> > > Index: hw/xfree86/os-support/misc/Makefile.in
> > > ===================================================================
> > > RCS file: 
> > > /cvs/OpenBSD/xenocara/xserver/hw/xfree86/os-support/misc/Makefile.in,v
> > > retrieving revision 1.33
> > > diff -u -p -u -r1.33 Makefile.in
> > > --- hw/xfree86/os-support/misc/Makefile.in        11 Oct 2016 22:15:56 
> > > -0000      1.33
> > > +++ hw/xfree86/os-support/misc/Makefile.in        7 Aug 2017 18:37:58 
> > > -0000
> > > @@ -475,7 +475,8 @@ libmisc_la_SOURCES = SlowBcopy.c
> > >  
> > >  #AM_LDFLAGS = -r
> > >  AM_CPPFLAGS = $(XORG_INCS)
> > > -AM_CFLAGS = $(XORG_CFLAGS) $(DIX_CFLAGS)
> > > +@I386_VIDEO_TRUE@NOSSE_CFLAGS = -mno-sse
> > > +AM_CFLAGS = $(XORG_CFLAGS) $(DIX_CFLAGS) $(NOSSE_CFLAGS)
> > >  EXTRA_DIST = $(I386_SRCS) $(PORTIO_SRCS)
> > >  all: all-am
> > >  
> > > 
> > > -- 
> > > Matthieu Herrb
> > > 
> 
> -- 
> Matthieu Herrb

Issue is fixed for me in the 8/8 snapshot, thanks!

-- 
0x7D964D3361142ACF

Reply via email to