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

xorg-server: Changes to 'ubuntu'



 debian/changelog                                                |   16 +
 debian/patches/190_cache-xkbcomp_output_for_fast_start_up.patch |  122 +++++++---
 2 files changed, 108 insertions(+), 30 deletions(-)

New commits:
commit ccc15e4f21a531dca745730393515008e148e389
Author: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Date:   Tue Dec 10 15:25:46 2013 +0100

    release to trusty

diff --git a/debian/changelog b/debian/changelog
index da33b7e..e2d2033 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,8 @@
-xorg-server (2:1.14.4.901-0ubuntu2) UNRELEASED; urgency=low
+xorg-server (2:1.14.4.901-0ubuntu2) trusty; urgency=low
 
   * Re-apply security update again.
 
- -- Maarten Lankhorst <maarten.lankhorst@ubuntu.com>  Tue, 10 Dec 2013 15:24:16 +0100
+ -- Maarten Lankhorst <maarten.lankhorst@ubuntu.com>  Tue, 10 Dec 2013 15:25:04 +0100
 
 xorg-server (2:1.14.4.901-0ubuntu1) trusty; urgency=low
 

commit 4ac6bdabc87cec94c98c43cfd502e58abf8616f5
Author: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Date:   Tue Dec 10 15:25:00 2013 +0100

    Re-apply security update again.
    
    * SECURITY UPDATE: unsafe use of xkb cache files
      - debian/patches/190_cache-xkbcomp_output_for_fast_start_up.patch:
        updated to not use xkb cache files in /tmp when running a non-root
        server.
      - CVE-2013-1056

diff --git a/debian/changelog b/debian/changelog
index 773dbf6..da33b7e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+xorg-server (2:1.14.4.901-0ubuntu2) UNRELEASED; urgency=low
+
+  * Re-apply security update again.
+
+ -- Maarten Lankhorst <maarten.lankhorst@ubuntu.com>  Tue, 10 Dec 2013 15:24:16 +0100
+
 xorg-server (2:1.14.4.901-0ubuntu1) trusty; urgency=low
 
   * New upstream release with some optimus fixes.
@@ -5,6 +11,16 @@ xorg-server (2:1.14.4.901-0ubuntu1) trusty; urgency=low
 
  -- Maarten Lankhorst <maarten.lankhorst@ubuntu.com>  Tue, 10 Dec 2013 15:09:07 +0100
 
+xorg-server (2:1.14.4-1ubuntu2) trusty; urgency=low
+
+  * SECURITY UPDATE: unsafe use of xkb cache files
+    - debian/patches/190_cache-xkbcomp_output_for_fast_start_up.patch:
+      updated to not use xkb cache files in /tmp when running a non-root
+      server.
+    - CVE-2013-1056
+
+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com>  Fri, 06 Dec 2013 11:15:23 -0500
+
 xorg-server (2:1.14.4-1ubuntu1) trusty; urgency=low
 
   * Merge released debian-unstable.
diff --git a/debian/patches/190_cache-xkbcomp_output_for_fast_start_up.patch b/debian/patches/190_cache-xkbcomp_output_for_fast_start_up.patch
index 279fc10..c5a08bc 100644
--- a/debian/patches/190_cache-xkbcomp_output_for_fast_start_up.patch
+++ b/debian/patches/190_cache-xkbcomp_output_for_fast_start_up.patch
@@ -1,8 +1,10 @@
-diff --git a/configure.ac b/configure.ac
-index 2693ce7..6665c10 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -515,9 +515,9 @@ AC_MSG_RESULT([$FONTPATH])
+Last-Update: 2013-09-19
+
+Index: xorg-server-1.14.2.901/configure.ac
+===================================================================
+--- xorg-server-1.14.2.901.orig/configure.ac	2013-09-19 11:43:53.948797077 -0400
++++ xorg-server-1.14.2.901/configure.ac	2013-09-19 11:43:53.944797077 -0400
+@@ -517,9 +517,9 @@
  AC_ARG_WITH(xkb-path,         AS_HELP_STRING([--with-xkb-path=PATH], [Path to XKB base dir (default: ${datadir}/X11/xkb)]),
  				[ XKBPATH="$withval" ],
  				[ XKBPATH="${datadir}/X11/xkb" ])
@@ -14,7 +16,7 @@ index 2693ce7..6665c10 100644
  AC_ARG_WITH(default-xkb-rules, AS_HELP_STRING([--with-default-xkb-rules=RULES],
                                     [Keyboard ruleset (default: base/evdev)]),
                                  [ XKB_DFLT_RULES="$withval" ],
-@@ -1204,7 +1204,7 @@ AC_DEFINE_DIR(XKB_BIN_DIRECTORY, XKB_BIN_DIRECTORY, [Path to XKB bin dir])
+@@ -1225,7 +1225,7 @@
  dnl Make sure XKM_OUTPUT_DIR is an absolute path
  XKBOUTPUT_FIRSTCHAR=`echo $XKBOUTPUT | cut -b 1`
  if [[ x$XKBOUTPUT_FIRSTCHAR != x/ -a x$XKBOUTPUT_FIRSTCHAR != 'x$' ]] ; then
@@ -23,11 +25,11 @@ index 2693ce7..6665c10 100644
  fi
  
  dnl XKM_OUTPUT_DIR (used in code) must end in / or file names get hosed
-diff --git a/xkb/README.compiled b/xkb/README.compiled
-index 71caa2f..a4a2ae0 100644
---- a/xkb/README.compiled
-+++ b/xkb/README.compiled
-@@ -4,10 +4,10 @@ current keymap and/or any scratch keymaps used by clients.  The X server
+Index: xorg-server-1.14.2.901/xkb/README.compiled
+===================================================================
+--- xorg-server-1.14.2.901.orig/xkb/README.compiled	2013-09-19 11:43:53.948797077 -0400
++++ xorg-server-1.14.2.901/xkb/README.compiled	2013-09-19 11:43:53.944797077 -0400
+@@ -4,10 +4,10 @@
  or some other tool might destroy or replace the files in this directory,
  so it is not a safe place to store compiled keymaps for long periods of
  time.  The default keymap for any server is usually stored in:
@@ -42,11 +44,11 @@ index 71caa2f..a4a2ae0 100644
  
  Unless the X server is modified, sharing this directory between servers on
  different hosts could cause problems.
-diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c
-index cb2dfc3..e531540 100644
---- a/xkb/ddxLoad.c
-+++ b/xkb/ddxLoad.c
-@@ -30,6 +30,12 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
+Index: xorg-server-1.14.2.901/xkb/ddxLoad.c
+===================================================================
+--- xorg-server-1.14.2.901.orig/xkb/ddxLoad.c	2013-09-19 11:43:53.948797077 -0400
++++ xorg-server-1.14.2.901/xkb/ddxLoad.c	2013-09-19 11:51:04.744800715 -0400
+@@ -30,6 +30,12 @@
  
  #include <xkb-config.h>
  
@@ -59,7 +61,7 @@ index cb2dfc3..e531540 100644
  #include <stdio.h>
  #include <ctype.h>
  #include <X11/X.h>
-@@ -43,20 +49,9 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
+@@ -43,20 +49,9 @@
  #define	XKBSRV_NEED_FILE_FUNCS
  #include <xkbsrv.h>
  #include <X11/extensions/XI.h>
@@ -81,7 +83,35 @@ index cb2dfc3..e531540 100644
  #define	PRE_ERROR_MSG "\"The XKEYBOARD keymap compiler (xkbcomp) reports:\""
  #define	ERROR_PREFIX	"\"> \""
  #define	POST_ERROR_MSG1 "\"Errors from xkbcomp are not fatal to the X server\""
-@@ -165,6 +160,47 @@ OutputDirectory(char *outdir, size_t size)
+@@ -69,35 +64,87 @@
+ #endif
+ 
+ static void
+-OutputDirectory(char *outdir, size_t size)
++OutputDirectory(char *outdir, size_t size, Bool *is_private_directory)
+ {
+ #ifndef WIN32
+     /* Can we write an xkm and then open it too? */
+     if (access(XKM_OUTPUT_DIR, W_OK | X_OK) == 0 &&
+         (strlen(XKM_OUTPUT_DIR) < size)) {
+         (void) strcpy(outdir, XKM_OUTPUT_DIR);
++        if (is_private_directory)
++            *is_private_directory = TRUE;
+     }
+     else
+ #else
+     if (strlen(Win32TempDir()) + 1 < size) {
+         (void) strcpy(outdir, Win32TempDir());
+         (void) strcat(outdir, "\\");
++        if (is_private_directory)
++            *is_private_directory = FALSE;
+     }
+     else
+ #endif
+     if (strlen("/tmp/") < size) {
+         (void) strcpy(outdir, "/tmp/");
++        if (is_private_directory)
++            *is_private_directory = FALSE;
      }
  }
  
@@ -129,8 +159,10 @@ index cb2dfc3..e531540 100644
  static Bool
  XkbDDXCompileKeymapByNames(XkbDescPtr xkb,
                             XkbComponentNamesPtr names,
-@@ -172,7 +208,11 @@ XkbDDXCompileKeymapByNames(XkbDescPtr xkb,
-                            unsigned need, char *nameRtrn, int nameRtrnLen)
+                            unsigned want,
+-                           unsigned need, char *nameRtrn, int nameRtrnLen)
++                           unsigned need, char *nameRtrn, int nameRtrnLen,
++                           Bool *is_private_directory)
  {
      FILE *out;
 -    char *buf = NULL, keymap[PATH_MAX], xkm_output_dir[PATH_MAX];
@@ -142,7 +174,7 @@ index cb2dfc3..e531540 100644
  
      const char *emptystring = "";
      char *xkbbasedirflag = NULL;
-@@ -183,14 +223,68 @@ XkbDDXCompileKeymapByNames(XkbDescPtr xkb,
+@@ -108,14 +155,68 @@
      /* WIN32 has no popen. The input must be stored in a file which is
         used as input for xkbcomp. xkbcomp does not read from stdin. */
      char tmpname[PATH_MAX];
@@ -189,18 +221,19 @@ index cb2dfc3..e531540 100644
 +               "using display name instead as xkm file name\n");
 +        snprintf(xkmfile, sizeof(xkmfile), "server-%s", display);
 +    }
- 
-     OutputDirectory(xkm_output_dir, sizeof(xkm_output_dir));
++
++    OutputDirectory(xkm_output_dir, sizeof(xkm_output_dir), is_private_directory);
 +    /* set nameRtrn, fail if it's too small */
 +    if ((strlen(xkmfile) + 1 > nameRtrnLen) && nameRtrn) {
 +        ErrorF("[xkb] nameRtrn too small to hold xkmfile name\n");
 +        return FALSE;
 +    }
 +    strncpy(nameRtrn, xkmfile, nameRtrnLen);
-+
+ 
+-    OutputDirectory(xkm_output_dir, sizeof(xkm_output_dir));
 +    /* if the xkm file already exists, reuse it */
 +    canonicalXkmFileName = Xprintf("%s%s.xkm", xkm_output_dir, xkmfile);
-+    if (access(canonicalXkmFileName, R_OK) == 0) {
++    if ((*is_private_directory) && (access(canonicalXkmFileName, R_OK) == 0)) {
 +        /* yes, we can reuse the old xkm file */
 +        LogMessage(X_INFO, "XKB: reuse xkmfile %s\n", canonicalXkmFileName);
 +        result = TRUE;
@@ -214,7 +247,7 @@ index cb2dfc3..e531540 100644
  
  #ifdef WIN32
      strcpy(tmpname, Win32TempDir());
-@@ -214,15 +308,21 @@ XkbDDXCompileKeymapByNames(XkbDescPtr xkb,
+@@ -139,15 +240,21 @@
          }
      }
  
@@ -239,7 +272,7 @@ index cb2dfc3..e531540 100644
          buf = NULL;
  
      free(xkbbasedirflag);
-@@ -233,6 +333,11 @@ XkbDDXCompileKeymapByNames(XkbDescPtr xkb,
+@@ -158,6 +265,11 @@
          return FALSE;
      }
  
@@ -251,7 +284,7 @@ index cb2dfc3..e531540 100644
  #ifndef WIN32
      out = Popen(buf, "w");
  #else
-@@ -240,32 +345,43 @@ XkbDDXCompileKeymapByNames(XkbDescPtr xkb,
+@@ -165,32 +277,43 @@
  #endif
  
      if (out != NULL) {
@@ -306,7 +339,7 @@ index cb2dfc3..e531540 100644
  #ifdef WIN32
          /* remove the temporary file */
          unlink(tmpname);
-@@ -280,8 +396,17 @@ XkbDDXCompileKeymapByNames(XkbDescPtr xkb,
+@@ -205,8 +328,17 @@
      }
      if (nameRtrn)
          nameRtrn[0] = '\0';
@@ -326,11 +359,40 @@ index cb2dfc3..e531540 100644
  }
  
  static FILE *
-@@ -368,7 +493,6 @@ XkbDDXLoadKeymapByNames(DeviceIntPtr keybd,
+@@ -217,7 +349,7 @@
+ 
+     buf[0] = '\0';
+     if (mapName != NULL) {
+-        OutputDirectory(xkm_output_dir, sizeof(xkm_output_dir));
++        OutputDirectory(xkm_output_dir, sizeof(xkm_output_dir), NULL);
+         if ((XkbBaseDirectory != NULL) && (xkm_output_dir[0] != '/')
+ #ifdef WIN32
+             && (!isalpha(xkm_output_dir[0]) || xkm_output_dir[1] != ':')
+@@ -256,6 +388,7 @@
+     FILE *file;
+     char fileName[PATH_MAX];
+     unsigned missing;
++    Bool is_private_directory;
+ 
+     *xkbRtrn = NULL;
+     if ((keybd == NULL) || (keybd->key == NULL) ||
+@@ -271,7 +404,8 @@
+         return 0;
+     }
+     else if (!XkbDDXCompileKeymapByNames(xkb, names, want, need,
+-                                         nameRtrn, nameRtrnLen)) {
++                                         nameRtrn, nameRtrnLen,
++                                         &is_private_directory)) {
+         LogMessage(X_ERROR, "XKB: Couldn't compile keymap\n");
+         return 0;
+     }
+@@ -293,7 +427,8 @@
                 (*xkbRtrn)->defined);
      }
      fclose(file);
 -    (void) unlink(fileName);
++    if (!is_private_directory)
++        (void) unlink(fileName);
      return (need | want) & (~missing);
  }
  


Reply to: