diff options
author | Archana Polampalli <archana.polampalli@windriver.com> | 2024-05-29 05:41:16 +0000 |
---|---|---|
committer | Steve Sakoman <steve@sakoman.com> | 2024-06-01 19:07:52 -0700 |
commit | f60be736e6952838cd4fcb5c7aa9eed13d27305e (patch) | |
tree | b67f142c8403c99b8d798765075080a7f2bc7493 | |
parent | db3cb6f1138d1765fb64d2415083c8503f318a5f (diff) | |
download | poky-f60be736e6952838cd4fcb5c7aa9eed13d27305e.tar.gz |
ghostscript: fix CVE-2024-33870
(From OE-Core rev: 9f0c63b568312da93daeb31eeb2874b98d1e3eea)
Signed-off-by: Archana Polampalli <archana.polampalli@windriver.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
-rw-r--r-- | meta/recipes-extended/ghostscript/ghostscript/CVE-2024-33870.patch | 92 | ||||
-rw-r--r-- | meta/recipes-extended/ghostscript/ghostscript_9.55.0.bb | 1 |
2 files changed, 93 insertions, 0 deletions
diff --git a/meta/recipes-extended/ghostscript/ghostscript/CVE-2024-33870.patch b/meta/recipes-extended/ghostscript/ghostscript/CVE-2024-33870.patch new file mode 100644 index 0000000000..0d289b6d07 --- /dev/null +++ b/meta/recipes-extended/ghostscript/ghostscript/CVE-2024-33870.patch | |||
@@ -0,0 +1,92 @@ | |||
1 | From 79aef19c685984dc3da2dc090450407d9fbcff80 Mon Sep 17 00:00:00 2001 | ||
2 | From: Ken Sharp <Ken.Sharp@artifex.com> | ||
3 | Date: Tue, 26 Mar 2024 12:00:14 +0000 | ||
4 | Subject: [PATCH 1/5] Bug #707686 | ||
5 | |||
6 | See bug thread for details | ||
7 | |||
8 | In addition to the noted bug; an error path (return from | ||
9 | gp_file_name_reduce not successful) could elad to a memory leak as we | ||
10 | did not free 'bufferfull'. Fix that too. | ||
11 | |||
12 | This addresses CVE-2024-33870 | ||
13 | |||
14 | CVE: CVE-2024-33870 | ||
15 | |||
16 | Upstream-Status: Backport [https://cgit.ghostscript.com/cgi-bin/cgit.cgi/ghostpdl.git/commit/?id=79aef19c685984dc] | ||
17 | |||
18 | Signed-off-by: Archana Polampalli <archana.polampalli@windriver.com> | ||
19 | --- | ||
20 | base/gpmisc.c | 33 ++++++++++++++++++++++++++++++--- | ||
21 | 1 file changed, 30 insertions(+), 3 deletions(-) | ||
22 | |||
23 | diff --git a/base/gpmisc.c b/base/gpmisc.c | ||
24 | index f9a9230..3b6fffa 100644 | ||
25 | --- a/base/gpmisc.c | ||
26 | +++ b/base/gpmisc.c | ||
27 | @@ -1042,7 +1042,7 @@ gp_validate_path_len(const gs_memory_t *mem, | ||
28 | const uint len, | ||
29 | const char *mode) | ||
30 | { | ||
31 | - char *buffer, *bufferfull; | ||
32 | + char *buffer, *bufferfull = NULL; | ||
33 | uint rlen; | ||
34 | int code = 0; | ||
35 | const char *cdirstr = gp_file_name_current(); | ||
36 | @@ -1095,8 +1095,10 @@ gp_validate_path_len(const gs_memory_t *mem, | ||
37 | return gs_error_VMerror; | ||
38 | |||
39 | buffer = bufferfull + prefix_len; | ||
40 | - if (gp_file_name_reduce(path, (uint)len, buffer, &rlen) != gp_combine_success) | ||
41 | - return gs_error_invalidfileaccess; | ||
42 | + if (gp_file_name_reduce(path, (uint)len, buffer, &rlen) != gp_combine_success) { | ||
43 | + code = gs_note_error(gs_error_invalidfileaccess); | ||
44 | + goto exit; | ||
45 | + } | ||
46 | buffer[rlen] = 0; | ||
47 | } | ||
48 | while (1) { | ||
49 | @@ -1131,9 +1133,33 @@ gp_validate_path_len(const gs_memory_t *mem, | ||
50 | code = gs_note_error(gs_error_invalidfileaccess); | ||
51 | } | ||
52 | if (code < 0 && prefix_len > 0 && buffer > bufferfull) { | ||
53 | + uint newlen = rlen + cdirstrl + dirsepstrl; | ||
54 | + char *newbuffer; | ||
55 | + int code; | ||
56 | + | ||
57 | buffer = bufferfull; | ||
58 | memcpy(buffer, cdirstr, cdirstrl); | ||
59 | memcpy(buffer + cdirstrl, dirsepstr, dirsepstrl); | ||
60 | + /* We've prepended a './' or similar for the current working directory. We need | ||
61 | + * to execute file_name_reduce on that, to eliminate any '../' or similar from | ||
62 | + * the (new) full path. | ||
63 | + */ | ||
64 | + newbuffer = (char *)gs_alloc_bytes(mem->thread_safe_memory, newlen + 1, "gp_validate_path"); | ||
65 | + if (newbuffer == NULL) { | ||
66 | + code = gs_note_error(gs_error_VMerror); | ||
67 | + goto exit; | ||
68 | + } | ||
69 | + | ||
70 | + memcpy(newbuffer, buffer, rlen + cdirstrl + dirsepstrl); | ||
71 | + newbuffer[newlen] = 0x00; | ||
72 | + | ||
73 | + code = gp_file_name_reduce(newbuffer, (uint)newlen, buffer, &newlen); | ||
74 | + gs_free_object(mem->thread_safe_memory, newbuffer, "gp_validate_path"); | ||
75 | + if (code != gp_combine_success) { | ||
76 | + code = gs_note_error(gs_error_invalidfileaccess); | ||
77 | + goto exit; | ||
78 | + } | ||
79 | + | ||
80 | continue; | ||
81 | } | ||
82 | else if (code < 0 && cdirstrl > 0 && prefix_len == 0 && buffer == bufferfull) { | ||
83 | @@ -1152,6 +1178,7 @@ gp_validate_path_len(const gs_memory_t *mem, | ||
84 | gs_path_control_flag_is_scratch_file); | ||
85 | } | ||
86 | |||
87 | +exit: | ||
88 | gs_free_object(mem->thread_safe_memory, bufferfull, "gp_validate_path"); | ||
89 | #ifdef EACCES | ||
90 | if (code == gs_error_invalidfileaccess) | ||
91 | -- | ||
92 | 2.40.0 | ||
diff --git a/meta/recipes-extended/ghostscript/ghostscript_9.55.0.bb b/meta/recipes-extended/ghostscript/ghostscript_9.55.0.bb index e99c740685..5fa4da0fb8 100644 --- a/meta/recipes-extended/ghostscript/ghostscript_9.55.0.bb +++ b/meta/recipes-extended/ghostscript/ghostscript_9.55.0.bb | |||
@@ -43,6 +43,7 @@ SRC_URI_BASE = "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/d | |||
43 | file://CVE-2023-38559.patch \ | 43 | file://CVE-2023-38559.patch \ |
44 | file://CVE-2023-43115.patch \ | 44 | file://CVE-2023-43115.patch \ |
45 | file://CVE-2023-46751.patch \ | 45 | file://CVE-2023-46751.patch \ |
46 | file://CVE-2024-33870.patch \ | ||
46 | " | 47 | " |
47 | 48 | ||
48 | SRC_URI = "${SRC_URI_BASE} \ | 49 | SRC_URI = "${SRC_URI_BASE} \ |