Crash in driGetConfigAttribIndex()

Dave Airlie airlied at gmail.com
Fri Aug 8 23:48:23 PDT 2008


On Sat, Aug 9, 2008 at 2:57 PM, David Miller <davem at davemloft.net> wrote:
> From: David Miller <davem at davemloft.net>
> Date: Fri, 08 Aug 2008 16:40:42 -0700 (PDT)
>
>> For values that are GLboolean, this function does the wrong thing.
>> It's trying to dereference a pointer to a GLboolean as an
>> "unsigned int *" which won't work and in fact will get a SIGBUS
>> on platforms like sparc that require proper data alignment.
>>
>> In my case the X server crashes trying to fetch a
>> __DRI_ATTRIB_FLOAT_MODE value here.
>>
>> Perhaps these members simply need special handling in the switch
>> statement.
>
> There is the same exact issue in the xserver's DRI code,
> specifically glx/glxdricommon.c's createModeFromConfig.
>
> Here are two patches I am using which together seem to fix these
> problems.

Thanks Dave, applied to master and 1.5 X server and Mesa master.

Dave.

>
> The first is for MESA and the second is for the X server:
>
> ----------------------------------------
> diff --git a/src/mesa/drivers/dri/common/utils.c b/src/mesa/drivers/dri/common/utils.c
> index 7fbe0d8..b15a922 100644
> --- a/src/mesa/drivers/dri/common/utils.c
> +++ b/src/mesa/drivers/dri/common/utils.c
> @@ -836,6 +836,10 @@ driGetConfigAttribIndex(const __DRIconfig *config,
>     case __DRI_ATTRIB_SWAP_METHOD:
>        break;
>
> +    case __DRI_ATTRIB_FLOAT_MODE:
> +       *value = config->modes.floatMode;
> +       break;
> +
>     default:
>        *value = *(unsigned int *)
>            ((char *) &config->modes + attribMap[index].offset);
> ----------------------------------------
> diff --git a/glx/glxdricommon.c b/glx/glxdricommon.c
> index 13725ae..c02ba66 100644
> --- a/glx/glxdricommon.c
> +++ b/glx/glxdricommon.c
> @@ -164,6 +164,9 @@ createModeFromConfig(const __DRIcoreExtension *core,
>            if (value & __DRI_ATTRIB_TEXTURE_RECTANGLE_BIT)
>                config->config.bindToTextureTargets |= GLX_TEXTURE_RECTANGLE_BIT_EXT;
>            break;
> +       case __DRI_ATTRIB_FLOAT_MODE:
> +           config->config.floatMode = (value ? GL_TRUE : GL_FALSE);
> +           break;
>        default:
>            setScalar(&config->config, attrib, value);
>            break;
> --------------------
> _______________________________________________
> xorg mailing list
> xorg at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/xorg
>



More information about the xorg mailing list