diff options
author | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2015-02-14 16:40:07 +0100 |
---|---|---|
committer | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2015-02-14 17:45:36 +0100 |
commit | 4587881130db36125c6b800e8f7e3fa0a3c5c9fb (patch) | |
tree | 7afc9d2782badf4f6f6b044a9f9540be247ece2b /debian/patches/1024-Xi-unvalidated-lengths-in-Xinput-extension-CVE-2014-.patch | |
parent | f46d117903c4bc4fe9863041f470e8816d355709 (diff) | |
download | nx-libs-4587881130db36125c6b800e8f7e3fa0a3c5c9fb.tar.gz nx-libs-4587881130db36125c6b800e8f7e3fa0a3c5c9fb.tar.bz2 nx-libs-4587881130db36125c6b800e8f7e3fa0a3c5c9fb.zip |
40 patches, fixing several X.Org CVEs in NX.
* Security fixes:
- Rebase loads of X.Org patches (mainly from RHEL-5) against NX. If not
all patches from a CVE patch series appear here, then it means that
the affected file/code is not used in NX at build time.
- X.Org CVE-2011-2895:
1001-LZW-decompress-fix-for-CVE-2011-2895-From-xorg-lib-X.patch
- X.Org CVE-2011-4028:
1002-Fix-CVE-2011-4028-File-disclosure-vulnerability.-ups.patch
- X.Org CVE-2013-4396:
1003-Avoid-use-after-free-in-dix-dixfonts.c-doImageText-C.patch
- X.Org CVE-2013-6462:
1004-CVE-2013-6462-unlimited-sscanf-overflows-stack-buffe.patch
- X.Org CVE-2014-0209:
1005-CVE-2014-0209-integer-overflow-of-realloc-size-in-Fo.patch
1006-CVE-2014-0209-integer-overflow-of-realloc-size-in-le.patch
- X.Org CVE-2014-0210:
1007-CVE-2014-0210-unvalidated-length-in-_fs_recv_conn_se.patch
1009-CVE-2014-0210-unvalidated-lengths-when-reading-repli.patch
1011-CVE-2014-0210-unvalidated-length-fields-in-fs_read_q.patch
1014-CVE-2014-0210-unvalidated-length-fields-in-fs_read_e.patch
1015-CVE-2014-0210-unvalidated-length-fields-in-fs_read_g.patch
1016-CVE-2014-0210-unvalidated-length-fields-in-fs_read_l.patch
1017-CVE-2014-0210-unvalidated-length-fields-in-fs_read_l.patch
- X.Org CVE-2014-0211:
1010-CVE-2014-0211-Integer-overflow-in-fs_get_reply-_fs_s.patch
1012-CVE-2014-0211-integer-overflow-in-fs_read_extent_inf.patch
1013-CVE-2014-0211-integer-overflow-in-fs_alloc_glyphs-fr.patch
1018-unchecked-malloc-may-allow-unauthed-client-to-crash-.patch
- X.Org CVE-2014-8092:
1019-dix-integer-overflow-in-ProcPutImage-CVE-2014-8092-1.patch
1020-dix-integer-overflow-in-GetHosts-CVE-2014-8092-2-4.patch
1021-dix-integer-overflow-in-RegionSizeof-CVE-2014-8092-3.patch
1022-dix-integer-overflow-in-REQUEST_FIXED_SIZE-CVE-2014-.patch
- X.Org CVE-2014-8097:
1023-dbe-unvalidated-lengths-in-DbeSwapBuffers-calls-CVE-.patch
- X.Org CVE-2014-8095:
1024-Xi-unvalidated-lengths-in-Xinput-extension-CVE-2014-.patch
- X.Org CVE-2014-8096:
1025-xcmisc-unvalidated-length-in-SProcXCMiscGetXIDList-C.patch
- X.Org CVE-2014-8099:
1026-Xv-unvalidated-lengths-in-XVideo-extension-swapped-p.patch
- X.Org CVE-2014-8100:
1027-render-check-request-size-before-reading-it-CVE-2014.patch
1028-render-unvalidated-lengths-in-Render-extn.-swapped-p.patch
- X.Org CVE-2014-8102:
1029-xfixes-unvalidated-length-in-SProcXFixesSelectSelect.patch
- X.Org CVE-2014-8101:
1030-randr-unvalidated-lengths-in-RandR-extension-swapped.patch
- X.Org CVE-2014-8093:
1031-glx-Be-more-paranoid-about-variable-length-requests-.patch
1032-glx-Be-more-strict-about-rejecting-invalid-image-siz.patch
1033-glx-Additional-paranoia-in-__glXGetAnswerBuffer-__GL.patch
1034-glx-Add-safe_-add-mul-pad-v3-CVE-2014-8093-4-6-v4.patch
1036-glx-Integer-overflow-protection-for-non-generated-re.patch
- X.Org CVE-2014-8098:
1035-glx-Length-checking-for-GLXRender-requests-v2-CVE-20.patch
1037-glx-Top-level-length-checking-for-swapped-VendorPriv.patch
1038-glx-Length-checking-for-non-generated-single-request.patch
1039-glx-Length-checking-for-RenderLarge-requests-v2-CVE-.patch
1040-glx-Pass-remaining-request-length-into-varsize-v2-CV.patch
- Security fixes with no assigned CVE:
1008-Don-t-crash-when-we-receive-an-FS_Error-from-the-fon.patch
Diffstat (limited to 'debian/patches/1024-Xi-unvalidated-lengths-in-Xinput-extension-CVE-2014-.patch')
-rw-r--r-- | debian/patches/1024-Xi-unvalidated-lengths-in-Xinput-extension-CVE-2014-.patch | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/debian/patches/1024-Xi-unvalidated-lengths-in-Xinput-extension-CVE-2014-.patch b/debian/patches/1024-Xi-unvalidated-lengths-in-Xinput-extension-CVE-2014-.patch new file mode 100644 index 000000000..884fa435c --- /dev/null +++ b/debian/patches/1024-Xi-unvalidated-lengths-in-Xinput-extension-CVE-2014-.patch @@ -0,0 +1,114 @@ +From fde1375e373137ac52d0530b819bf9df64ab14c1 Mon Sep 17 00:00:00 2001 +From: Alan Coopersmith <alan.coopersmith@oracle.com> +Date: Sun, 26 Jan 2014 10:54:41 -0800 +Subject: [PATCH 24/40] Xi: unvalidated lengths in Xinput extension + [CVE-2014-8095] + +Multiple functions in the Xinput extension handling of requests from +clients failed to check that the length of the request sent by the +client was large enough to perform all the required operations and +thus could read or write to memory outside the bounds of the request +buffer. + +This commit includes the creation of a new REQUEST_AT_LEAST_EXTRA_SIZE +macro in include/dix.h for the common case of needing to ensure a +request is large enough to include both the request itself and a +minimum amount of extra data following the request header. + +v2: backport to nx-libs 3.6.x (Mike DePaulo) + +Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> +Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> + +Conflicts: + Xi/chgdctl.c + Xi/chgfctl.c + Xi/xiallowev.c + Xi/xichangecursor.c + Xi/xichangehierarchy.c + Xi/xigetclientpointer.c + Xi/xigrabdev.c + Xi/xipassivegrab.c + Xi/xiproperty.c + Xi/xiquerydevice.c + Xi/xiquerypointer.c + Xi/xiselectev.c + Xi/xisetclientpointer.c + Xi/xisetdevfocus.c + Xi/xiwarppointer.c + +[RHEL5: Xi/xi* files are XI2 ] +--- + nx-X11/programs/Xserver/Xi/chgdctl.c | 4 ++-- + nx-X11/programs/Xserver/Xi/chgfctl.c | 2 ++ + nx-X11/programs/Xserver/Xi/sendexev.c | 3 +++ + nx-X11/programs/Xserver/include/dix.h | 4 ++++ + 4 files changed, 11 insertions(+), 2 deletions(-) + +diff --git a/nx-X11/programs/Xserver/Xi/chgdctl.c b/nx-X11/programs/Xserver/Xi/chgdctl.c +index 63a3c9c..144a51e 100644 +--- a/nx-X11/programs/Xserver/Xi/chgdctl.c ++++ b/nx-X11/programs/Xserver/Xi/chgdctl.c +@@ -87,7 +87,7 @@ SProcXChangeDeviceControl(client) + + REQUEST(xChangeDeviceControlReq); + swaps(&stuff->length, n); +- REQUEST_AT_LEAST_SIZE(xChangeDeviceControlReq); ++ REQUEST_AT_LEAST_EXTRA_SIZE(xChangeDeviceControlReq, sizeof(xDeviceCtl)); + swaps(&stuff->control, n); + return(ProcXChangeDeviceControl(client)); + } +@@ -111,7 +111,7 @@ ProcXChangeDeviceControl(client) + CARD32 *resolution; + + REQUEST(xChangeDeviceControlReq); +- REQUEST_AT_LEAST_SIZE(xChangeDeviceControlReq); ++ REQUEST_AT_LEAST_EXTRA_SIZE(xChangeDeviceControlReq, sizeof(xDeviceCtl)); + + len = stuff->length - (sizeof(xChangeDeviceControlReq) >>2); + dev = LookupDeviceIntRec (stuff->deviceid); +diff --git a/nx-X11/programs/Xserver/Xi/chgfctl.c b/nx-X11/programs/Xserver/Xi/chgfctl.c +index fe8bd1f..3ffac39 100644 +--- a/nx-X11/programs/Xserver/Xi/chgfctl.c ++++ b/nx-X11/programs/Xserver/Xi/chgfctl.c +@@ -160,6 +160,8 @@ ProcXChangeFeedbackControl(client) + xStringFeedbackCtl *f = ((xStringFeedbackCtl *) &stuff[1]); + if (client->swapped) + { ++ if (len < (sizeof(xStringFeedbackCtl) + 3) >> 2) ++ return BadLength; + swaps(&f->num_keysyms,n); + } + if (len != ((sizeof(xStringFeedbackCtl)>>2) + f->num_keysyms)) +diff --git a/nx-X11/programs/Xserver/Xi/sendexev.c b/nx-X11/programs/Xserver/Xi/sendexev.c +index 9b441f2..0b2a701 100644 +--- a/nx-X11/programs/Xserver/Xi/sendexev.c ++++ b/nx-X11/programs/Xserver/Xi/sendexev.c +@@ -154,6 +154,9 @@ ProcXSendExtensionEvent (client) + return Success; + } + ++ if (stuff->num_events == 0) ++ return ret; ++ + /* The client's event type must be one defined by an extension. */ + + first = ((xEvent *) &stuff[1]); +diff --git a/nx-X11/programs/Xserver/include/dix.h b/nx-X11/programs/Xserver/include/dix.h +index d82979c..9fe575e 100644 +--- a/nx-X11/programs/Xserver/include/dix.h ++++ b/nx-X11/programs/Xserver/include/dix.h +@@ -73,6 +73,10 @@ SOFTWARE. + if ((sizeof(req) >> 2) > client->req_len )\ + return(BadLength) + ++#define REQUEST_AT_LEAST_EXTRA_SIZE(req, extra) \ ++ if (((sizeof(req) + ((uint64_t) extra)) >> 2) > client->req_len ) \ ++ return(BadLength) ++ + #define REQUEST_FIXED_SIZE(req, n)\ + if (((sizeof(req) >> 2) > client->req_len) || \ + ((n >> 2) >= client->req_len) || \ +-- +2.1.4 + |