Re: [OE-core] [PATCH v4] xserver-kdrive: Fix X server on PowerPC when built with GCC 4.7.x
On 2012-05-16 15:26, Gary Thomas wrote: Newer versions of GCC uncovered illegal code practice which can cause runtime failures in the Xext/xace.c code. This problem has been fixed upstream: http://cgit.freedesktop.org/xorg/xserver/patch/Xext/xace.c?id=6dae7f3792611aace1df0cca63bf50c50d93de43 Subject: xace: Invalid reference to out-of-scope data. Incorporate this patch into the recipe, with a PR bump. Signed-off-by: Gary Thomasg...@mlbassoc.com Ping? --- .../fix-bogus-stack-variables.patch| 231 .../xorg-xserver/xserver-kdrive_1.7.99.2.bb|3 +- 2 files changed, 233 insertions(+), 1 deletions(-) create mode 100644 meta/recipes-graphics/xorg-xserver/xserver-kdrive-1.7.99.2/fix-bogus-stack-variables.patch diff --git a/meta/recipes-graphics/xorg-xserver/xserver-kdrive-1.7.99.2/fix-bogus-stack-variables.patch b/meta/recipes-graphics/xorg-xserver/xserver-kdrive-1.7.99.2/fix-bogus-stack-variables.patch new file mode 100644 index 000..d900fc3 --- /dev/null +++ b/meta/recipes-graphics/xorg-xserver/xserver-kdrive-1.7.99.2/fix-bogus-stack-variables.patch @@ -0,0 +1,233 @@ +From 6dae7f3792611aace1df0cca63bf50c50d93de43 Mon Sep 17 00:00:00 2001 +From: Chris Wilsonch...@chris-wilson.co.uk +Date: Tue, 10 Aug 2010 18:30:20 + +Subject: xace: Invalid reference to out-of-scope data. + +The callback data passed by reference to the hook was allocated on stack +within the scope of the case statement. The compiler is free to reuse +any of that stack space whilst making the function call so we may end up +passing garbage into the callback. + +References: + + Bug 18451 - Xorg server 1.5.2 SEGV during XFixesGetCursorImage() + https://bugs.freedesktop.org/show_bug.cgi?id=18451 + +v2: Drop the unrelated hunk that snuck in when ammending the commit +message. + +Signed-off-by: Chris Wilsonch...@chris-wilson.co.uk +Reviewed-by: Alan Coopersmithalan.coopersm...@oracle.com +Signed-off-by: Keith Packardkei...@keithp.com + +Upstream-Status: accepted +--- +(limited to 'Xext/xace.c') + +diff --git a/Xext/xace.c b/Xext/xace.c +index e10d837..c757cad 100644 +--- a/Xext/xace.c b/Xext/xace.c +@@ -87,7 +87,18 @@ void XaceHookAuditEnd(ClientPtr ptr, int result) + */ + int XaceHook(int hook, ...) + { +-pointer calldata; /* data passed to callback */ ++union { ++ XaceResourceAccessRec res; ++ XaceDeviceAccessRec dev; ++ XaceSendAccessRec send; ++ XaceReceiveAccessRec recv; ++ XaceClientAccessRec client; ++ XaceExtAccessRec ext; ++ XaceServerAccessRec server; ++ XaceScreenAccessRec screen; ++ XaceAuthAvailRec auth; ++ XaceKeyAvailRec key; ++} u; + int *prv = NULL; /* points to return value from callback */ + va_list ap; /* argument list */ + va_start(ap, hook); +@@ -99,117 +110,86 @@ int XaceHook(int hook, ...) + */ + switch (hook) + { +- case XACE_RESOURCE_ACCESS: { +- XaceResourceAccessRec rec; +- rec.client = va_arg(ap, ClientPtr); +- rec.id = va_arg(ap, XID); +- rec.rtype = va_arg(ap, RESTYPE); +- rec.res = va_arg(ap, pointer); +- rec.ptype = va_arg(ap, RESTYPE); +- rec.parent = va_arg(ap, pointer); +- rec.access_mode = va_arg(ap, Mask); +- rec.status = Success; /* default allow */ +- calldata =rec; +- prv =rec.status; ++ case XACE_RESOURCE_ACCESS: ++ u.res.client = va_arg(ap, ClientPtr); ++ u.res.id = va_arg(ap, XID); ++ u.res.rtype = va_arg(ap, RESTYPE); ++ u.res.res = va_arg(ap, pointer); ++ u.res.ptype = va_arg(ap, RESTYPE); ++ u.res.parent = va_arg(ap, pointer); ++ u.res.access_mode = va_arg(ap, Mask); ++ u.res.status = Success; /* default allow */ ++ prv =u.res.status; + break; +- } +- case XACE_DEVICE_ACCESS: { +- XaceDeviceAccessRec rec; +- rec.client = va_arg(ap, ClientPtr); +- rec.dev = va_arg(ap, DeviceIntPtr); +- rec.access_mode = va_arg(ap, Mask); +- rec.status = Success; /* default allow */ +- calldata =rec; +- prv =rec.status; ++ case XACE_DEVICE_ACCESS: ++ u.dev.client = va_arg(ap, ClientPtr); ++ u.dev.dev = va_arg(ap, DeviceIntPtr); ++ u.dev.access_mode = va_arg(ap, Mask); ++ u.dev.status = Success; /* default allow */ ++ prv =u.dev.status; + break; +- } +- case XACE_SEND_ACCESS: { +- XaceSendAccessRec rec; +- rec.client = va_arg(ap, ClientPtr); +- rec.dev = va_arg(ap, DeviceIntPtr); +- rec.pWin = va_arg(ap, WindowPtr); +- rec.events = va_arg(ap, xEventPtr); +- rec.count = va_arg(ap, int); +- rec.status = Success; /* default allow */ +- calldata =rec; +- prv =rec.status; ++ case XACE_SEND_ACCESS: ++
Re: [OE-core] [PATCH v4] xserver-kdrive: Fix X server on PowerPC when built with GCC 4.7.x
On Fri, May 18, 2012 at 5:16 PM, Gary Thomas g...@mlbassoc.com wrote: On 2012-05-16 15:26, Gary Thomas wrote: Newer versions of GCC uncovered illegal code practice which can cause runtime failures in the Xext/xace.c code. This problem has been fixed upstream: http://cgit.freedesktop.org/**xorg/xserver/patch/Xext/xace.**c?id=** 6dae7f3792611aace1df0cca63bf50**c50d93de43http://cgit.freedesktop.org/xorg/xserver/patch/Xext/xace.c?id=6dae7f3792611aace1df0cca63bf50c50d93de43 Subject: xace: Invalid reference to out-of-scope data. Incorporate this patch into the recipe, with a PR bump. Signed-off-by: Gary Thomasg...@mlbassoc.com Ping? Double ping. --- .../fix-bogus-stack-variables.**patch| 231 .../xorg-xserver/xserver-**kdrive_1.7.99.2.bbhttp://xserver-kdrive_1.7.99.2.bb |3 +- 2 files changed, 233 insertions(+), 1 deletions(-) create mode 100644 meta/recipes-graphics/xorg-** xserver/xserver-kdrive-1.7.99.**2/fix-bogus-stack-variables.**patch diff --git a/meta/recipes-graphics/xorg-**xserver/xserver-kdrive-1.7.99.* *2/fix-bogus-stack-variables.**patch b/meta/recipes-graphics/xorg-** xserver/xserver-kdrive-1.7.99.**2/fix-bogus-stack-variables.**patch new file mode 100644 index 000..d900fc3 --- /dev/null +++ b/meta/recipes-graphics/xorg-**xserver/xserver-kdrive-1.7.99.** 2/fix-bogus-stack-variables.**patch @@ -0,0 +1,233 @@ +From 6dae7f3792611aace1df0cca63bf50**c50d93de43 Mon Sep 17 00:00:00 2001 +From: Chris Wilsonch...@chris-wilson.co.**uk ch...@chris-wilson.co.uk +Date: Tue, 10 Aug 2010 18:30:20 + +Subject: xace: Invalid reference to out-of-scope data. + +The callback data passed by reference to the hook was allocated on stack +within the scope of the case statement. The compiler is free to reuse +any of that stack space whilst making the function call so we may end up +passing garbage into the callback. + +References: + + Bug 18451 - Xorg server 1.5.2 SEGV during XFixesGetCursorImage() + https://bugs.freedesktop.org/**show_bug.cgi?id=18451https://bugs.freedesktop.org/show_bug.cgi?id=18451 + +v2: Drop the unrelated hunk that snuck in when ammending the commit +message. + +Signed-off-by: Chris Wilsonch...@chris-wilson.co.**ukch...@chris-wilson.co.uk +Reviewed-by: Alan Coopersmithalan.coopersmith@**oracle.comalan.coopersm...@oracle.com +Signed-off-by: Keith Packardkei...@keithp.com + +Upstream-Status: accepted +--- +(limited to 'Xext/xace.c') + +diff --git a/Xext/xace.c b/Xext/xace.c +index e10d837..c757cad 100644 +--- a/Xext/xace.c b/Xext/xace.c +@@ -87,7 +87,18 @@ void XaceHookAuditEnd(ClientPtr ptr, int result) + */ + int XaceHook(int hook, ...) + { +-pointer calldata; /* data passed to callback */ ++union { ++ XaceResourceAccessRec res; ++ XaceDeviceAccessRec dev; ++ XaceSendAccessRec send; ++ XaceReceiveAccessRec recv; ++ XaceClientAccessRec client; ++ XaceExtAccessRec ext; ++ XaceServerAccessRec server; ++ XaceScreenAccessRec screen; ++ XaceAuthAvailRec auth; ++ XaceKeyAvailRec key; ++} u; + int *prv = NULL; /* points to return value from callback */ + va_list ap; /* argument list */ + va_start(ap, hook); +@@ -99,117 +110,86 @@ int XaceHook(int hook, ...) + */ + switch (hook) + { +- case XACE_RESOURCE_ACCESS: { +- XaceResourceAccessRec rec; +- rec.client = va_arg(ap, ClientPtr); +- rec.id = va_arg(ap, XID); +- rec.rtype = va_arg(ap, RESTYPE); +- rec.res = va_arg(ap, pointer); +- rec.ptype = va_arg(ap, RESTYPE); +- rec.parent = va_arg(ap, pointer); +- rec.access_mode = va_arg(ap, Mask); +- rec.status = Success; /* default allow */ +- calldata =rec; +- prv =rec.status; ++ case XACE_RESOURCE_ACCESS: ++ u.res.client = va_arg(ap, ClientPtr); ++ u.res.id = va_arg(ap, XID); ++ u.res.rtype = va_arg(ap, RESTYPE); ++ u.res.res = va_arg(ap, pointer); ++ u.res.ptype = va_arg(ap, RESTYPE); ++ u.res.parent = va_arg(ap, pointer); ++ u.res.access_mode = va_arg(ap, Mask); ++ u.res.status = Success; /* default allow */ ++ prv =u.res.status; + break; +- } +- case XACE_DEVICE_ACCESS: { +- XaceDeviceAccessRec rec; +- rec.client = va_arg(ap, ClientPtr); +- rec.dev = va_arg(ap, DeviceIntPtr); +- rec.access_mode = va_arg(ap, Mask); +- rec.status = Success; /* default allow */ +- calldata =rec; +- prv =rec.status; ++ case XACE_DEVICE_ACCESS: ++ u.dev.client = va_arg(ap, ClientPtr); ++ u.dev.dev = va_arg(ap, DeviceIntPtr); ++ u.dev.access_mode = va_arg(ap, Mask); ++ u.dev.status = Success; /* default allow */ ++
Re: [OE-core] [PATCH v4] xserver-kdrive: Fix X server on PowerPC when built with GCC 4.7.x
On Wed, 2012-05-16 at 15:26 -0600, Gary Thomas wrote: Newer versions of GCC uncovered illegal code practice which can cause runtime failures in the Xext/xace.c code. This problem has been fixed upstream: http://cgit.freedesktop.org/xorg/xserver/patch/Xext/xace.c?id=6dae7f3792611aace1df0cca63bf50c50d93de43 Subject: xace: Invalid reference to out-of-scope data. Incorporate this patch into the recipe, with a PR bump. Signed-off-by: Gary Thomas g...@mlbassoc.com --- .../fix-bogus-stack-variables.patch| 231 .../xorg-xserver/xserver-kdrive_1.7.99.2.bb|3 +- 2 files changed, 233 insertions(+), 1 deletions(-) create mode 100644 meta/recipes-graphics/xorg-xserver/xserver-kdrive-1.7.99.2/fix-bogus-stack-variables.patch Merged to master, thanks. Richard ___ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
Re: [OE-core] [PATCH v4] xserver-kdrive: Fix X server on PowerPC when built with GCC 4.7.x
On Wed, May 16, 2012 at 03:26:23PM -0600, Gary Thomas wrote: Newer versions of GCC uncovered illegal code practice which can cause runtime failures in the Xext/xace.c code. This problem has been fixed upstream: http://cgit.freedesktop.org/xorg/xserver/patch/Xext/xace.c?id=6dae7f3792611aace1df0cca63bf50c50d93de43 Subject: xace: Invalid reference to out-of-scope data. Incorporate this patch into the recipe, with a PR bump. Signed-off-by: Gary Thomas g...@mlbassoc.com --- .../fix-bogus-stack-variables.patch| 231 .../xorg-xserver/xserver-kdrive_1.7.99.2.bb|3 +- 2 files changed, 233 insertions(+), 1 deletions(-) create mode 100644 meta/recipes-graphics/xorg-xserver/xserver-kdrive-1.7.99.2/fix-bogus-stack-variables.patch diff --git a/meta/recipes-graphics/xorg-xserver/xserver-kdrive-1.7.99.2/fix-bogus-stack-variables.patch b/meta/recipes-graphics/xorg-xserver/xserver-kdrive-1.7.99.2/fix-bogus-stack-variables.patch new file mode 100644 index 000..d900fc3 --- /dev/null +++ b/meta/recipes-graphics/xorg-xserver/xserver-kdrive-1.7.99.2/fix-bogus-stack-variables.patch @@ -0,0 +1,233 @@ +From 6dae7f3792611aace1df0cca63bf50c50d93de43 Mon Sep 17 00:00:00 2001 +From: Chris Wilson ch...@chris-wilson.co.uk +Date: Tue, 10 Aug 2010 18:30:20 + +Subject: xace: Invalid reference to out-of-scope data. + +The callback data passed by reference to the hook was allocated on stack +within the scope of the case statement. The compiler is free to reuse +any of that stack space whilst making the function call so we may end up +passing garbage into the callback. + +References: + + Bug 18451 - Xorg server 1.5.2 SEGV during XFixesGetCursorImage() + https://bugs.freedesktop.org/show_bug.cgi?id=18451 + +v2: Drop the unrelated hunk that snuck in when ammending the commit +message. + +Signed-off-by: Chris Wilson ch...@chris-wilson.co.uk +Reviewed-by: Alan Coopersmith alan.coopersm...@oracle.com +Signed-off-by: Keith Packard kei...@keithp.com + +Upstream-Status: accepted Shouldn't this ^ be Backport as in v3? Probably not worth doing v5, just wondering why did you change that to accepted. +--- +(limited to 'Xext/xace.c') + +diff --git a/Xext/xace.c b/Xext/xace.c +index e10d837..c757cad 100644 +--- a/Xext/xace.c b/Xext/xace.c +@@ -87,7 +87,18 @@ void XaceHookAuditEnd(ClientPtr ptr, int result) + */ + int XaceHook(int hook, ...) + { +-pointer calldata; /* data passed to callback */ ++union { ++XaceResourceAccessRec res; ++XaceDeviceAccessRec dev; ++XaceSendAccessRec send; ++XaceReceiveAccessRec recv; ++XaceClientAccessRec client; ++XaceExtAccessRec ext; ++XaceServerAccessRec server; ++XaceScreenAccessRec screen; ++XaceAuthAvailRec auth; ++XaceKeyAvailRec key; ++} u; + int *prv = NULL;/* points to return value from callback */ + va_list ap; /* argument list */ + va_start(ap, hook); +@@ -99,117 +110,86 @@ int XaceHook(int hook, ...) + */ + switch (hook) + { +-case XACE_RESOURCE_ACCESS: { +-XaceResourceAccessRec rec; +-rec.client = va_arg(ap, ClientPtr); +-rec.id = va_arg(ap, XID); +-rec.rtype = va_arg(ap, RESTYPE); +-rec.res = va_arg(ap, pointer); +-rec.ptype = va_arg(ap, RESTYPE); +-rec.parent = va_arg(ap, pointer); +-rec.access_mode = va_arg(ap, Mask); +-rec.status = Success; /* default allow */ +-calldata = rec; +-prv = rec.status; ++case XACE_RESOURCE_ACCESS: ++u.res.client = va_arg(ap, ClientPtr); ++u.res.id = va_arg(ap, XID); ++u.res.rtype = va_arg(ap, RESTYPE); ++u.res.res = va_arg(ap, pointer); ++u.res.ptype = va_arg(ap, RESTYPE); ++u.res.parent = va_arg(ap, pointer); ++u.res.access_mode = va_arg(ap, Mask); ++u.res.status = Success; /* default allow */ ++prv = u.res.status; + break; +-} +-case XACE_DEVICE_ACCESS: { +-XaceDeviceAccessRec rec; +-rec.client = va_arg(ap, ClientPtr); +-rec.dev = va_arg(ap, DeviceIntPtr); +-rec.access_mode = va_arg(ap, Mask); +-rec.status = Success; /* default allow */ +-calldata = rec; +-prv = rec.status; ++case XACE_DEVICE_ACCESS: ++u.dev.client = va_arg(ap, ClientPtr); ++u.dev.dev = va_arg(ap, DeviceIntPtr); ++u.dev.access_mode = va_arg(ap, Mask); ++u.dev.status = Success; /* default allow */ ++prv = u.dev.status; + break; +-} +-case XACE_SEND_ACCESS: { +-XaceSendAccessRec rec; +-rec.client = va_arg(ap, ClientPtr); +-rec.dev = va_arg(ap, DeviceIntPtr); +-rec.pWin = va_arg(ap, WindowPtr); +-rec.events = va_arg(ap, xEventPtr); +-rec.count = va_arg(ap,