Re: [OE-core] [PATCH v4] xserver-kdrive: Fix X server on PowerPC when built with GCC 4.7.x

2012-05-18 Thread Gary Thomas

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

2012-05-18 Thread Andrei Gherzan
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

2012-05-18 Thread Richard Purdie
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

2012-05-16 Thread Martin Jansa
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,