[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#725747: xserver-xorg-core: Using PRIME providers when discreet card is set to be primary leads to xserver crash



Control: tag -1 moreinfo

On Tue, Oct 08, 2013 at 02:16:10AM +0300, Pauli wrote:
> Package: xserver-xorg-core
> Version: 2:1.14.3-3
> Severity: normal
> Tags: upstream patch
> 
> Dear Maintainer,
> 
> With hydrid graphics laptop I had started X with discreet radein set as
> primary card using vgaswitcheroo. During that run I ended up trying to
> enable PRIME offloading to radeon:
> 
> xrandr --setprovideroutputsource radeon Intel
> 
> That led to following crash:
> #0  0x00007ff44fd431e5 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
> #1  0x00007ff44fd46398 in __GI_abort () at abort.c:90
> #2  0x00007ff44fd3c272 in __assert_fail_base (fmt=0x7ff44fe799c0 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x7ff452186ce7 "slave->isGPU", 
>     file=file@entry=0x7ff452186cb2 "../../dix/dispatch.c", line=line@entry=3937, function=function@entry=0x7ff452186d80 <__PRETTY_FUNCTION__.17904> "DetachUnboundGPU")
>     at assert.c:92
> #3  0x00007ff44fd3c322 in __GI___assert_fail (assertion=assertion@entry=0x7ff452186ce7 "slave->isGPU", file=file@entry=0x7ff452186cb2 "../../dix/dispatch.c", 
>     line=line@entry=3937, function=function@entry=0x7ff452186d80 <__PRETTY_FUNCTION__.17904> "DetachUnboundGPU") at assert.c:101
> #4  0x00007ff45202b2f0 in DetachUnboundGPU (slave=slave@entry=0x7ff45429c0d0) at ../../dix/dispatch.c:3937
> #5  0x00007ff4520a77fd in xf86RandR14ProviderSetOffloadSink (pScreen=0x7ff45429c0d0, provider=0x7ff4526ece20, sink_provider=0x7ff45428f970)
>     at ../../../../hw/xfree86/modes/xf86RandR12.c:1821
> #6  0x00007ff4520ec911 in ProcRRSetProviderOffloadSink (client=<optimized out>) at ../../randr/rrprovider.c:338
> #7  0x00007ff45202ad6e in Dispatch () at ../../dix/dispatch.c:432
> #8  0x00007ff45201a2ca in main (argc=10, argv=0x7fff78e24868, envp=<optimized out>) at ../../dix/main.c:298
> 
> Problem is missing check that provider is actually configured as offscreen
> card in protocol request validation.
> 
> Attached patch adds the missing check to the protocol layer to avoid
> server from asserting.
> 

Hi,

is this still an issue with a newer xserver-xorg-core version (e.g.
the version from jessie or stretch/sid)?

Thanks,
Andreas

> diff --git a/randr/rrprovider.c b/randr/rrprovider.c
> index b321e62..53a610a 100644
> --- a/randr/rrprovider.c
> +++ b/randr/rrprovider.c
> @@ -291,6 +291,8 @@ ProcRRSetProviderOutputSource(ClientPtr client)
>  
>      if (!(provider->capabilities & RR_Capability_SinkOutput))
>          return BadValue;
> +    if (!provider->pScreen->isGPU)
> +        return BadValue;
>  
>      if (stuff->source_provider) {
>          VERIFY_RR_PROVIDER(stuff->source_provider, source_provider, DixReadAccess);
> @@ -322,6 +324,8 @@ ProcRRSetProviderOffloadSink(ClientPtr client)
>      VERIFY_RR_PROVIDER(stuff->provider, provider, DixReadAccess);
>      if (!(provider->capabilities & RR_Capability_SourceOffload))
>          return BadValue;
> +    if (!provider->pScreen->isGPU)
> +        return BadValue;
>  
>      if (stuff->sink_provider) {
>          VERIFY_RR_PROVIDER(stuff->sink_provider, sink_provider, DixReadAccess);

Attachment: signature.asc
Description: Digital signature


Reply to: