Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package virglrenderer for openSUSE:Factory 
checked in at 2022-02-06 23:53:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/virglrenderer (Old)
 and      /work/SRC/openSUSE:Factory/.virglrenderer.new.1898 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "virglrenderer"

Sun Feb  6 23:53:22 2022 rev:15 rq:950889 version:0.9.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/virglrenderer/virglrenderer.changes      
2022-01-23 12:16:37.720090719 +0100
+++ /work/SRC/openSUSE:Factory/.virglrenderer.new.1898/virglrenderer.changes    
2022-02-06 23:53:26.995153258 +0100
@@ -1,0 +2,7 @@
+Wed Feb  2 09:33:17 UTC 2022 - Michael Vetter <mvet...@suse.com>
+
+- security update
+  * Fix OOB in read_transfer_data() (CVE-2022-0135 bsc#1195389)
+    Add virglrenderer-CVE-2022-0135.patch
+
+-------------------------------------------------------------------

New:
----
  virglrenderer-CVE-2022-0135.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ virglrenderer.spec ++++++
--- /var/tmp/diff_new_pack.UilIih/_old  2022-02-06 23:53:29.151138882 +0100
+++ /var/tmp/diff_new_pack.UilIih/_new  2022-02-06 23:53:29.155138856 +0100
@@ -27,6 +27,8 @@
 Source0:        
https://gitlab.freedesktop.org/virgl/%{name}/-/archive/%{name}-%{version}/%{name}-%{name}-%{version}.tar.gz
 # CVE-2022-0175 [bsc#1194601], VUL-0: CVE-2022-0175: virglrenderer: Missing 
initialization of res->ptr
 Patch0:         virglrenderer-CVE-2022-0175.patch
+# CVE-2022-0135 [bsc#1195389], VUL-0: CVE-2022-0135: virglrenderer: 
out-of-bounds write in read_transfer_data()
+Patch1:         virglrenderer-CVE-2022-0135.patch
 BuildRequires:  Mesa-devel
 BuildRequires:  meson >= 0.46
 BuildRequires:  pkgconfig >= 0.9.0
@@ -73,6 +75,7 @@
 %prep
 %setup -q -n %{name}-%{name}-%{version}
 %patch0 -p1
+%patch1 -p1
 
 %build
 %meson

++++++ virglrenderer-CVE-2022-0135.patch ++++++
Index: virglrenderer-virglrenderer-0.9.1/src/vrend_renderer.c
===================================================================
--- virglrenderer-virglrenderer-0.9.1.orig/src/vrend_renderer.c
+++ virglrenderer-virglrenderer-0.9.1/src/vrend_renderer.c
@@ -7568,8 +7568,11 @@ static int vrend_renderer_transfer_write
                                           info->box->height) * elsize;
       if (res->target == GL_TEXTURE_3D ||
           res->target == GL_TEXTURE_2D_ARRAY ||
+          res->target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY ||
           res->target == GL_TEXTURE_CUBE_MAP_ARRAY)
           send_size *= info->box->depth;
+      else if (need_temp && info->box->depth != 1)
+          return EINVAL;
 
       if (need_temp) {
          data = malloc(send_size);
Index: virglrenderer-virglrenderer-0.9.1/tests/test_fuzzer_formats.c
===================================================================
--- virglrenderer-virglrenderer-0.9.1.orig/tests/test_fuzzer_formats.c
+++ virglrenderer-virglrenderer-0.9.1/tests/test_fuzzer_formats.c
@@ -958,6 +958,48 @@ static void test_vrend_set_signle_abo_he
     virgl_renderer_submit_cmd((void *) cmd, ctx_id, 0xde);
 }
 
+/* Test adapted from yaojun8558...@gmail.com:
+ * https://gitlab.freedesktop.org/virgl/virglrenderer/-/issues/250
+ */
+static void test_vrend_3d_resource_overflow() {
+
+       struct virgl_renderer_resource_create_args resource;
+       resource.handle = 0x4c474572;
+       resource.target = PIPE_TEXTURE_2D_ARRAY;
+       resource.format = VIRGL_FORMAT_Z24X8_UNORM;
+       resource.nr_samples = 2;
+       resource.last_level = 0;
+       resource.array_size = 3;
+       resource.bind = VIRGL_BIND_SAMPLER_VIEW;
+       resource.depth = 1;
+       resource.width = 8;
+       resource.height = 4;
+       resource.flags = 0;
+
+       virgl_renderer_resource_create(&resource, NULL, 0);
+       virgl_renderer_ctx_attach_resource(ctx_id, resource.handle);
+
+       uint32_t size = 0x400;
+       uint32_t cmd[size];
+       int i = 0;
+       cmd[i++] = (size - 1) << 16 | 0 << 8 | VIRGL_CCMD_RESOURCE_INLINE_WRITE;
+       cmd[i++] = resource.handle;
+       cmd[i++] = 0; // level
+       cmd[i++] = 0; // usage
+       cmd[i++] = 0; // stride
+       cmd[i++] = 0; // layer_stride
+       cmd[i++] = 0; // x
+       cmd[i++] = 0; // y
+       cmd[i++] = 0; // z
+       cmd[i++] = 8; // w
+       cmd[i++] = 4; // h
+       cmd[i++] = 3; // d
+       memset(&cmd[i], 0, size - i);
+
+       virgl_renderer_submit_cmd((void *) cmd, ctx_id, size);
+}
+
+
 int main()
 {
    initialize_environment();
@@ -980,6 +1022,7 @@ int main()
    test_cs_nullpointer_deference();
    test_vrend_set_signle_abo_heap_overflow();
 
+   test_vrend_3d_resource_overflow();
 
    virgl_renderer_context_destroy(ctx_id);
    virgl_renderer_cleanup(&cookie);

Reply via email to