diff options
| author | Ross Burton <ross.burton@arm.com> | 2023-11-08 15:27:41 +0000 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2023-11-08 16:42:49 +0000 |
| commit | 3d2d75119cedcbac8f9665c1ddc0b8975a55e12a (patch) | |
| tree | 934b35ffc14e92518b3b2f2714c177c7625be356 /meta | |
| parent | 832384fdc69bd909183da7572ab8171dc34542c3 (diff) | |
| download | poky-3d2d75119cedcbac8f9665c1ddc0b8975a55e12a.tar.gz | |
Revert "xserver-xorg: Fix for CVE-2023-5574"
These patches are not yet merged (so they're not backports) because they
have outstanding (undescribed) issues[1]. As this issue only affects
Xvfb and is a use-after-free with only a hypothetical attack, revert the
patches until the compromise is understood.
This reverts commit a193c0224a4100f2e75bfff40b0832758affeb45.
[1] https://lists.x.org/archives/xorg-announce/2023-October/003430.html
(From OE-Core rev: 1ed1c4f48203a8366519b40a094c7d9719c3ae32)
Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
4 files changed, 0 insertions, 212 deletions
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xorg/CVE-2023-5574-1.patch b/meta/recipes-graphics/xorg-xserver/xserver-xorg/CVE-2023-5574-1.patch deleted file mode 100644 index 9a8e583e78..0000000000 --- a/meta/recipes-graphics/xorg-xserver/xserver-xorg/CVE-2023-5574-1.patch +++ /dev/null | |||
| @@ -1,113 +0,0 @@ | |||
| 1 | From 1953f460b9ad1a9cdf0fcce70f6ad3310b713d5f Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Peter Hutterer <peter.hutterer@who-t.net> | ||
| 3 | Date: Thu, 12 Oct 2023 12:44:13 +1000 | ||
| 4 | Subject: [PATCH] fb: properly wrap/unwrap CloseScreen | ||
| 5 | |||
| 6 | fbCloseScreen assumes that it overrides miCloseScreen (which just | ||
| 7 | calls FreePixmap(screen->devPrivates)) and emulates that instead of | ||
| 8 | wrapping it. | ||
| 9 | |||
| 10 | This is a wrong assumption, we may have ShmCloseScreen in the mix too, | ||
| 11 | resulting in leaks (see below). Fix this by properly setting up the | ||
| 12 | CloseScreen wrapper. | ||
| 13 | |||
| 14 | This means we no longer need the manual DestroyPixmap call in | ||
| 15 | vfbCloseScreen, reverting d348ab06aae21c153ecbc3511aeafc8ab66d8303 | ||
| 16 | |||
| 17 | CVE-2023-5574, ZDI-CAN-21213 | ||
| 18 | |||
| 19 | This vulnerability was discovered by: | ||
| 20 | Sri working with Trend Micro Zero Day Initiative | ||
| 21 | |||
| 22 | Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> | ||
| 23 | Reviewed-by: Adam Jackson <ajax@redhat.com> | ||
| 24 | |||
| 25 | Upstream-Status: Backport [https://gitlab.freedesktop.org/xorg/xserver/-/commit/1953f460b9ad1a9cdf0fcce70f6ad3310b713d5f] | ||
| 26 | CVE: CVE-2023-5574 | ||
| 27 | Signed-off-by: Vijay Anusuri <vanusuri@mvista.com> | ||
| 28 | --- | ||
| 29 | fb/fb.h | 1 + | ||
| 30 | fb/fbscreen.c | 14 ++++++++++---- | ||
| 31 | hw/vfb/InitOutput.c | 7 ------- | ||
| 32 | 3 files changed, 11 insertions(+), 11 deletions(-) | ||
| 33 | |||
| 34 | diff --git a/fb/fb.h b/fb/fb.h | ||
| 35 | index d157b6956d..cd7bd05d21 100644 | ||
| 36 | --- a/fb/fb.h | ||
| 37 | +++ b/fb/fb.h | ||
| 38 | @@ -410,6 +410,7 @@ typedef struct { | ||
| 39 | #endif | ||
| 40 | DevPrivateKeyRec gcPrivateKeyRec; | ||
| 41 | DevPrivateKeyRec winPrivateKeyRec; | ||
| 42 | + CloseScreenProcPtr CloseScreen; | ||
| 43 | } FbScreenPrivRec, *FbScreenPrivPtr; | ||
| 44 | |||
| 45 | #define fbGetScreenPrivate(pScreen) ((FbScreenPrivPtr) \ | ||
| 46 | diff --git a/fb/fbscreen.c b/fb/fbscreen.c | ||
| 47 | index 4ab807ab50..c481033f98 100644 | ||
| 48 | --- a/fb/fbscreen.c | ||
| 49 | +++ b/fb/fbscreen.c | ||
| 50 | @@ -29,6 +29,7 @@ | ||
| 51 | Bool | ||
| 52 | fbCloseScreen(ScreenPtr pScreen) | ||
| 53 | { | ||
| 54 | + FbScreenPrivPtr screen_priv = fbGetScreenPrivate(pScreen); | ||
| 55 | int d; | ||
| 56 | DepthPtr depths = pScreen->allowedDepths; | ||
| 57 | |||
| 58 | @@ -37,9 +38,10 @@ fbCloseScreen(ScreenPtr pScreen) | ||
| 59 | free(depths[d].vids); | ||
| 60 | free(depths); | ||
| 61 | free(pScreen->visuals); | ||
| 62 | - if (pScreen->devPrivate) | ||
| 63 | - FreePixmap((PixmapPtr)pScreen->devPrivate); | ||
| 64 | - return TRUE; | ||
| 65 | + | ||
| 66 | + pScreen->CloseScreen = screen_priv->CloseScreen; | ||
| 67 | + | ||
| 68 | + return pScreen->CloseScreen(pScreen); | ||
| 69 | } | ||
| 70 | |||
| 71 | Bool | ||
| 72 | @@ -144,6 +146,7 @@ fbFinishScreenInit(ScreenPtr pScreen, void *pbits, int xsize, int ysize, | ||
| 73 | int dpix, int dpiy, int width, int bpp) | ||
| 74 | #endif | ||
| 75 | { | ||
| 76 | + FbScreenPrivPtr screen_priv; | ||
| 77 | VisualPtr visuals; | ||
| 78 | DepthPtr depths; | ||
| 79 | int nvisuals; | ||
| 80 | @@ -177,8 +180,11 @@ fbFinishScreenInit(ScreenPtr pScreen, void *pbits, int xsize, int ysize, | ||
| 81 | rootdepth, ndepths, depths, | ||
| 82 | defaultVisual, nvisuals, visuals)) | ||
| 83 | return FALSE; | ||
| 84 | - /* overwrite miCloseScreen with our own */ | ||
| 85 | + | ||
| 86 | + screen_priv = fbGetScreenPrivate(pScreen); | ||
| 87 | + screen_priv->CloseScreen = pScreen->CloseScreen; | ||
| 88 | pScreen->CloseScreen = fbCloseScreen; | ||
| 89 | + | ||
| 90 | return TRUE; | ||
| 91 | } | ||
| 92 | |||
| 93 | diff --git a/hw/vfb/InitOutput.c b/hw/vfb/InitOutput.c | ||
| 94 | index 48efb61b2f..076fb7defa 100644 | ||
| 95 | --- a/hw/vfb/InitOutput.c | ||
| 96 | +++ b/hw/vfb/InitOutput.c | ||
| 97 | @@ -720,13 +720,6 @@ vfbCloseScreen(ScreenPtr pScreen) | ||
| 98 | |||
| 99 | pScreen->CloseScreen = pvfb->closeScreen; | ||
| 100 | |||
| 101 | - /* | ||
| 102 | - * fb overwrites miCloseScreen, so do this here | ||
| 103 | - */ | ||
| 104 | - if (pScreen->devPrivate) | ||
| 105 | - (*pScreen->DestroyPixmap) (pScreen->devPrivate); | ||
| 106 | - pScreen->devPrivate = NULL; | ||
| 107 | - | ||
| 108 | return pScreen->CloseScreen(pScreen); | ||
| 109 | } | ||
| 110 | |||
| 111 | -- | ||
| 112 | GitLab | ||
| 113 | |||
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xorg/CVE-2023-5574-2.patch b/meta/recipes-graphics/xorg-xserver/xserver-xorg/CVE-2023-5574-2.patch deleted file mode 100644 index 2cdef752c7..0000000000 --- a/meta/recipes-graphics/xorg-xserver/xserver-xorg/CVE-2023-5574-2.patch +++ /dev/null | |||
| @@ -1,42 +0,0 @@ | |||
| 1 | From b6fe3f924aecac6d6e311673511ce61aa2f7a81f Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Peter Hutterer <peter.hutterer@who-t.net> | ||
| 3 | Date: Thu, 12 Oct 2023 12:42:06 +1000 | ||
| 4 | Subject: [PATCH] mi: fix CloseScreen initialization order | ||
| 5 | |||
| 6 | If SHM is enabled it will set the CloseScreen pointer, only to be | ||
| 7 | overridden by the hardcoded miCloseScreen pointer. Do this the other way | ||
| 8 | round, miCloseScreen is the bottom of our stack. | ||
| 9 | |||
| 10 | Direct leak of 48 byte(s) in 2 object(s) allocated from: | ||
| 11 | #0 0x7f5ea3ad8cc7 in calloc (/lib64/libasan.so.8+0xd8cc7) (BuildId: d8f3addefe29e892d775c30eb364afd3c2484ca5)) | ||
| 12 | #1 0x70adfb in ShmInitScreenPriv ../Xext/shm.c:213 | ||
| 13 | |||
| 14 | Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> | ||
| 15 | Reviewed-by: Adam Jackson <ajax@redhat.com> | ||
| 16 | |||
| 17 | Upstream-Status: Backport [https://gitlab.freedesktop.org/xorg/xserver/-/commit/b6fe3f924aecac6d6e311673511ce61aa2f7a81f] | ||
| 18 | CVE: CVE-2023-5574 | ||
| 19 | Signed-off-by: Vijay Anusuri <vanusuri@mvista.com> | ||
| 20 | --- | ||
| 21 | mi/miscrinit.c | 2 +- | ||
| 22 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
| 23 | |||
| 24 | diff --git a/mi/miscrinit.c b/mi/miscrinit.c | ||
| 25 | index 3bb52b1bc6..b88938c9ae 100644 | ||
| 26 | --- a/mi/miscrinit.c | ||
| 27 | +++ b/mi/miscrinit.c | ||
| 28 | @@ -249,10 +249,10 @@ miScreenInit(ScreenPtr pScreen, void *pbits, /* pointer to screen bits */ | ||
| 29 | pScreen->numVisuals = numVisuals; | ||
| 30 | pScreen->visuals = visuals; | ||
| 31 | if (width) { | ||
| 32 | + pScreen->CloseScreen = miCloseScreen; | ||
| 33 | #ifdef MITSHM | ||
| 34 | ShmRegisterFbFuncs(pScreen); | ||
| 35 | #endif | ||
| 36 | - pScreen->CloseScreen = miCloseScreen; | ||
| 37 | } | ||
| 38 | /* else CloseScreen */ | ||
| 39 | /* QueryBestSize */ | ||
| 40 | -- | ||
| 41 | GitLab | ||
| 42 | |||
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xorg/CVE-2023-5574-3.patch b/meta/recipes-graphics/xorg-xserver/xserver-xorg/CVE-2023-5574-3.patch deleted file mode 100644 index 47c247ef0c..0000000000 --- a/meta/recipes-graphics/xorg-xserver/xserver-xorg/CVE-2023-5574-3.patch +++ /dev/null | |||
| @@ -1,54 +0,0 @@ | |||
| 1 | From ab2c58ba4719fc31c19c7829b06bdba8a88bd586 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Peter Hutterer <peter.hutterer@who-t.net> | ||
| 3 | Date: Tue, 24 Oct 2023 12:09:36 +1000 | ||
| 4 | Subject: [PATCH] dix: always initialize pScreen->CloseScreen | ||
| 5 | |||
| 6 | CloseScreen is wrapped by the various modules, many of which do not | ||
| 7 | check if they're the last ones unwrapping. This is fine if the order of | ||
| 8 | those modules never changes but when it does we might get a NULL-pointer | ||
| 9 | dereference by some naive code doing a | ||
| 10 | |||
| 11 | pScreen->CloseScreen = priv->CloseScreen; | ||
| 12 | free(priv); | ||
| 13 | return (*pScreen->CloseScreen)(pScreen); | ||
| 14 | |||
| 15 | To avoid this set it to a default function that just returns TRUE that's | ||
| 16 | guaranteed to be the last one. | ||
| 17 | |||
| 18 | Upstream-Status: Backport [https://gitlab.freedesktop.org/xorg/xserver/-/commit/ab2c58ba4719fc31c19c7829b06bdba8a88bd586] | ||
| 19 | CVE: CVE-2023-5574 | ||
| 20 | Signed-off-by: Vijay Anusuri <vanusuri@mvista.com> | ||
| 21 | --- | ||
| 22 | dix/dispatch.c | 9 +++++++++ | ||
| 23 | 1 file changed, 9 insertions(+) | ||
| 24 | |||
| 25 | diff --git a/dix/dispatch.c b/dix/dispatch.c | ||
| 26 | index eaac39b7c9..cd092fd409 100644 | ||
| 27 | --- a/dix/dispatch.c | ||
| 28 | +++ b/dix/dispatch.c | ||
| 29 | @@ -3890,6 +3890,12 @@ static int indexForScanlinePad[65] = { | ||
| 30 | 3 /* 64 bits per scanline pad unit */ | ||
| 31 | }; | ||
| 32 | |||
| 33 | +static Bool | ||
| 34 | +DefaultCloseScreen(ScreenPtr screen) | ||
| 35 | +{ | ||
| 36 | + return TRUE; | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | /* | ||
| 40 | grow the array of screenRecs if necessary. | ||
| 41 | call the device-supplied initialization procedure | ||
| 42 | @@ -3949,6 +3955,9 @@ static int init_screen(ScreenPtr pScreen, int i, Bool gpu) | ||
| 43 | PixmapWidthPaddingInfo[depth].notPower2 = 0; | ||
| 44 | } | ||
| 45 | } | ||
| 46 | + | ||
| 47 | + pScreen->CloseScreen = DefaultCloseScreen; | ||
| 48 | + | ||
| 49 | return 0; | ||
| 50 | } | ||
| 51 | |||
| 52 | -- | ||
| 53 | GitLab | ||
| 54 | |||
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xorg_21.1.9.bb b/meta/recipes-graphics/xorg-xserver/xserver-xorg_21.1.9.bb index 2e1d2529ab..43c06181e3 100644 --- a/meta/recipes-graphics/xorg-xserver/xserver-xorg_21.1.9.bb +++ b/meta/recipes-graphics/xorg-xserver/xserver-xorg_21.1.9.bb | |||
| @@ -2,9 +2,6 @@ require xserver-xorg.inc | |||
| 2 | 2 | ||
| 3 | SRC_URI += "file://0001-xf86pciBus.c-use-Intel-ddx-only-for-pre-gen4-hardwar.patch \ | 3 | SRC_URI += "file://0001-xf86pciBus.c-use-Intel-ddx-only-for-pre-gen4-hardwar.patch \ |
| 4 | file://0001-Avoid-duplicate-definitions-of-IOPortBase.patch \ | 4 | file://0001-Avoid-duplicate-definitions-of-IOPortBase.patch \ |
| 5 | file://CVE-2023-5574-1.patch \ | ||
| 6 | file://CVE-2023-5574-2.patch \ | ||
| 7 | file://CVE-2023-5574-3.patch \ | ||
| 8 | " | 5 | " |
| 9 | SRC_URI[sha256sum] = "ff697be2011b4c4966b7806929e51b7a08e9d33800d505305d26d9ccde4b533a" | 6 | SRC_URI[sha256sum] = "ff697be2011b4c4966b7806929e51b7a08e9d33800d505305d26d9ccde4b533a" |
| 10 | 7 | ||
