Blame SOURCES/ghostscript-cve-2018-16539.patch

2796d4
From: Chris Liddell <chris.liddell@artifex.com>
2796d4
Date: Tue, 21 Aug 2018 19:17:51 +0000 (+0100)
2796d4
Subject: Bug 699658: Fix handling of pre-SAFER opened files.
2796d4
2796d4
Bug 699658: Fix handling of pre-SAFER opened files.
2796d4
2796d4
Temp files opened for writing before SAFER is engaged are not subject to the
2796d4
SAFER restrictions - that is handled by recording in a dictionary, and
2796d4
checking that as part of the permissions checks.
2796d4
2796d4
By adding a custom error handler for invalidaccess, that allowed the filename
2796d4
to be added to the dictionary (despite the attempted open throwing the error)
2796d4
thus meaning subsequent accesses were erroneously permitted.
2796d4
2796d4
https://git.ghostscript.com/?p=ghostpdl.git;a=commit;h=a054156d425b4dbdaaa9fda4b5f1182b27598c2b
2796d4
---
2796d4
2796d4
diff -up a/Resource/Init/gs_init.ps.cve-2018-16539 b/Resource/Init/gs_init.ps
2796d4
--- a/Resource/Init/gs_init.ps.cve-2018-16539	2018-11-14 16:34:23.268867657 +0100
2796d4
+++ b/Resource/Init/gs_init.ps	2018-11-14 16:36:38.765552576 +0100
2796d4
@@ -2015,6 +2015,19 @@ readonly def
2796d4
             concatstrings concatstrings .generate_dir_list_templates
2796d4
         } if
2796d4
       ]
2796d4
+      /PermitFileWriting [
2796d4
+          currentuserparams /PermitFileWriting get aload pop
2796d4
+          (TMPDIR) getenv not
2796d4
+          {
2796d4
+            (TEMP) getenv not
2796d4
+            {
2796d4
+              (TMP) getenv not
2796d4
+              {
2796d4
+                (/temp) (/tmp)
2796d4
+              } if
2796d4
+            } if
2796d4
+          } if
2796d4
+      ]
2796d4
       /LockFilePermissions //true
2796d4
     >> setuserparams
2796d4
   }
2796d4
@@ -2062,7 +2075,9 @@ readonly def
2796d4
 % the file can be deleted later, even if SAFER is set.
2796d4
 /.tempfile {
2796d4
   .tempfile	% filename file
2796d4
-  //SAFETY /tempfiles get 2 .argindex //true .forceput
2796d4
+    //SAFETY /safe get not { % only add the filename if we're not yet safe
2796d4
+    //SAFETY /tempfiles get 2 .argindex //true .forceput
2796d4
+  } if
2796d4
 } .bind executeonly odef
2796d4
 
2796d4
 % If we are running in SAFER mode, lock things down