SRU justification provides and added to the bug description.

** Description changed:

+ SRU Justification:
+ ==================
+ 
+ [Impact]
+ 
+ * zlib: compressBound() returns an incorrect result on IBM z15 hardware.
+ 
+ * Passing the result of compressBound() to compress() results
+   in an error code.
+ 
+ * This is because compressBound() is not adjusted for DFLTCC.
+ 
+ [Fix]
+ 
+ * Adjust compressBound() for DFLTCC like it's already done
+   for deflateBound().
+ 
+ * Since zlib project does not accept patches at the moment,
+   the fix has been integrated into the DFLTCC pull request:
+   https://github.com/madler/zlib/pull/410
+   The commitid is b25781e735363e04f6c56e21431c47e4afc50b17.
+ 
+ * The fix extracted out of the above is:
+   
https://launchpadlibrarian.net/589857296/debdiff_zlib_1.2.11.dfsg-2ubuntu7_to_zlib_1.2.11.dfsg-2ubuntu8_jammy.diff
+ 
+ [Test Plan]
+ 
+ * An IBM z15 system (LPAR, z/VM guest or KVM virtual machine)
+   with Ubuntu Server 21.10 (or 22.04).
+ 
+ * A test can be done  based on the following C test program:
+       #include <assert.h>
+       #include <stdlib.h>
+       #include <zlib.h>
+       int main() {
+           Bytef in_buf[128], out_buf[1024];
+           for (size_t i = 0; i < sizeof(in_buf); i++)
+               in_buf[i] = rand();
+           uLongf dest_len = compressBound(sizeof(in_buf));
+           assert(dest_len <= sizeof(out_buf));
+           int ret = compress(out_buf, &dest_len,
+                              in_buf, sizeof(in_buf));
+           assert(ret == Z_OK);
+           }
+ 
+ * The test needs to be done by IBM, due to the requirements
+   for the special z15 hardware.
+ 
+ [Where problems could occur]
+ 
+ * If the adjustment of compressBound() for DFLTCC is done
+   erroneously the issue can still be present or in worst case
+   even affect Z systems other than z15 only.
+ 
+ * The crc table can be broken, in case the endian detection
+   or the register initialization is done wrong.
+ 
+ * The compression can become errorneous with the new changes,
+   e.g. in compressBound.
+ 
+ * Mistakes in dfltcc_free_window OF and especially DEFLATE_BOUND_COMPLEN,
+   (incl. the bit definitions), may cause various and unforseen defects.
+ 
+ * Any build time issues that might have been introduced by this patch
+   can be identified by a test build; this was done and is available here:
+   https://launchpad.net/~fheimes/+archive/ubuntu/lp1961427
+ 
+ [Other Info]
+ 
+ * Only impish and jammy are affected.
+ __________
+ 
  Description:   zlib: compressBound() returns an incorrect result on z15
  Symptom:       Passing the result of compressBound() to compress()
-                results in an error code.
+                results in an error code.
  Problem:       compressBound() is not adjusted for DFLTCC.
  Solution:      Adjust compressBound() for DFLTCC like it's already done
-                for deflateBound(). Since zlib project does not accept
-                patches at the moment, the fix has been integrated into
-                the DFLTCC pull request:
-                https://github.com/madler/zlib/pull/410
-                The commitid is b25781e735363e04f6c56e21431c47e4afc50b17.
+                for deflateBound(). Since zlib project does not accept
+                patches at the moment, the fix has been integrated into
+                the DFLTCC pull request:
+                https://github.com/madler/zlib/pull/410
+                The commitid is b25781e735363e04f6c56e21431c47e4afc50b17.
  
  Reproduction:  z15 only:
-                #include <assert.h>
-                #include <stdlib.h>
-                #include <zlib.h>
-                int main() {
-                    Bytef in_buf[128], out_buf[1024];
-                    for (size_t i = 0; i < sizeof(in_buf); i++)
-                        in_buf[i] = rand();
-                    uLongf dest_len = compressBound(sizeof(in_buf));
-                    assert(dest_len <= sizeof(out_buf));
-                    int ret = compress(out_buf, &dest_len,
-                                       in_buf, sizeof(in_buf));
-                    assert(ret == Z_OK);
-                }
+                #include <assert.h>
+                #include <stdlib.h>
+                #include <zlib.h>
+                int main() {
+                    Bytef in_buf[128], out_buf[1024];
+                    for (size_t i = 0; i < sizeof(in_buf); i++)
+                        in_buf[i] = rand();
+                    uLongf dest_len = compressBound(sizeof(in_buf));
+                    assert(dest_len <= sizeof(out_buf));
+                    int ret = compress(out_buf, &dest_len,
+                                       in_buf, sizeof(in_buf));
+                    assert(ret == Z_OK);
+                }

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1961427

Title:
  zlib: compressBound() returns an incorrect result on z15

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu-z-systems/+bug/1961427/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to