Hello community, here is the log from the commit of package virglrenderer for openSUSE:Factory checked in at 2020-02-19 12:39:12 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/virglrenderer (Old) and /work/SRC/openSUSE:Factory/.virglrenderer.new.26092 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "virglrenderer" Wed Feb 19 12:39:12 2020 rev:11 rq:773741 version:0.8.2 Changes: -------- --- /work/SRC/openSUSE:Factory/virglrenderer/virglrenderer.changes 2020-02-09 21:02:26.527354391 +0100 +++ /work/SRC/openSUSE:Factory/.virglrenderer.new.26092/virglrenderer.changes 2020-02-19 12:39:12.943471586 +0100 @@ -1,0 +2,11 @@ +Wed Feb 12 14:47:31 UTC 2020 - Bruce Rogers <brog...@suse.com> + +- Update package to 0.8.2 + Release is all bug fixes it seems. It includes these patches in + the release tarball: + vrend-Don-t-free-resource-struct-in-_resource_alloca.patch + vrend-Don-t-try-launching-a-grid-if-no-CS-is-availab.patch + vrend-Use-the-original-context-to-delete-objects.patch + vrend-Don-t-switch-to-ctx0-when-deleting-ctx0.patch + +------------------------------------------------------------------- Old: ---- virglrenderer-virglrenderer-0.8.1.tar.gz vrend-Don-t-free-resource-struct-in-_resource_alloca.patch vrend-Don-t-switch-to-ctx0-when-deleting-ctx0.patch vrend-Don-t-try-launching-a-grid-if-no-CS-is-availab.patch vrend-Use-the-original-context-to-delete-objects.patch New: ---- virglrenderer-virglrenderer-0.8.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ virglrenderer.spec ++++++ --- /var/tmp/diff_new_pack.XGAyu8/_old 2020-02-19 12:39:14.123473859 +0100 +++ /var/tmp/diff_new_pack.XGAyu8/_new 2020-02-19 12:39:14.123473859 +0100 @@ -18,7 +18,7 @@ %define libname lib%{name}1 Name: virglrenderer -Version: 0.8.1 +Version: 0.8.2 Release: 0 Summary: Virgl Rendering library License: MIT @@ -26,11 +26,6 @@ URL: https://virgil3d.github.io/ Source0: https://gitlab.freedesktop.org/virgl/%{name}/-/archive/%{name}-%{version}/%{name}-%{name}-%{version}.tar.gz -Patch0001: vrend-Don-t-free-resource-struct-in-_resource_alloca.patch -Patch0002: vrend-Don-t-try-launching-a-grid-if-no-CS-is-availab.patch -Patch0003: vrend-Use-the-original-context-to-delete-objects.patch -Patch0004: vrend-Don-t-switch-to-ctx0-when-deleting-ctx0.patch - BuildRequires: Mesa-devel BuildRequires: meson >= 0.46 BuildRequires: pkgconfig >= 0.9.0 @@ -76,10 +71,6 @@ %prep %setup -q -n %{name}-%{name}-%{version} -%patch0001 -p1 -%patch0002 -p1 -%patch0003 -p1 -%patch0004 -p1 %build %meson ++++++ virglrenderer-virglrenderer-0.8.1.tar.gz -> virglrenderer-virglrenderer-0.8.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/ci/.gitlab-ci.yml new/virglrenderer-virglrenderer-0.8.2/ci/.gitlab-ci.yml --- old/virglrenderer-virglrenderer-0.8.1/ci/.gitlab-ci.yml 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/ci/.gitlab-ci.yml 2020-02-12 07:29:08.000000000 +0100 @@ -60,8 +60,8 @@ paths: - results/ -make check: - stage: sanity test + +.tests_base: services: - docker:dind before_script: @@ -72,7 +72,7 @@ $RD_CONFIG -v $PWD:/virglrenderer $CI_REGISTRY_IMAGE@$DOCKER_IMAGE_DIGEST - bash -c "/virglrenderer/ci/run_tests.sh --make-check" + bash -c "/virglrenderer/ci/run_tests.sh $TEST_SUITE" - echo -e "\nThat's all folks\n" only: - branches @@ -85,54 +85,28 @@ paths: - results/ -make check meson: +.make_check_base: stage: sanity test - services: - - docker:dind - before_script: - *docker-setup - script: - - docker run - --ulimit core=99999999999:99999999999 - $RD_CONFIG - -v $PWD:/virglrenderer - $CI_REGISTRY_IMAGE@$DOCKER_IMAGE_DIGEST - bash -c "/virglrenderer/ci/run_tests.sh --make-check-meson" - - echo -e "\nThat's all folks\n" - only: - - branches - - tags - - merge_requests - - schedules + extends: .tests_base - artifacts: - when: always - paths: - - results/ +make check: + variables: + TEST_SUITE: '--make-check' + extends: .make_check_base + +mesa check meson: + variables: + TEST_SUITE: '--make-check-meson' + extends: .make_check_base +make check clang-fuzzer: + variables: + TEST_SUITE: '--make-check-clang-fuzzer' + extends: .make_check_base .tests: stage: test - services: - - docker:dind - before_script: - *docker-setup - script: - - docker run - --ulimit core=99999999999:99999999999 - $RD_CONFIG - -v $PWD:/virglrenderer - $CI_REGISTRY_IMAGE@$DOCKER_IMAGE_DIGEST - bash -c "/virglrenderer/ci/run_tests.sh $TEST_SUITE" - - echo -e "\nThat's all folks\n" - only: - - merge_requests - - schedules - - artifacts: - when: always - paths: - - results/ + extends: .tests_base piglit - gl host: variables: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/ci/run_tests.sh new/virglrenderer-virglrenderer-0.8.2/ci/run_tests.sh --- old/virglrenderer-virglrenderer-0.8.1/ci/run_tests.sh 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/ci/run_tests.sh 2020-02-12 07:29:08.000000000 +0100 @@ -6,6 +6,10 @@ use_meson=$1 + if [ "x$2" = "xfuzzer" ]; then + use_clang_fuzzer=1 + fi + # Let .gitlab-ci or local ci runner set # desired thread count NUM_THREADS=${NUM_THREADS:-$(expr $(expr $(nproc) / 8) + 1)} @@ -56,7 +60,12 @@ if [ -d "$VIRGL_PATH" ]; then cd $VIRGL_PATH mkdir build - meson build/ -Dprefix=/usr/local -Ddebug=true -Dtests=true --fatal-meson-warnings + if [ "x$use_clang_fuzzer" = "x1" ]; then + CC=clang-8 + FUZZER=-Dfuzzer=true + fi + + meson build/ -Dprefix=/usr/local -Ddebug=true -Dtests=true --fatal-meson-warnings $FUZZER ninja -C build -j$NUM_THREADS install fi fi @@ -91,6 +100,19 @@ ) } +run_make_check_clang_fuzzer() +{ + run_setup meson fuzzer + ( + cd /virglrenderer/build + mkdir -p /virglrenderer/results/make_check_clang_fuzzer + VRENDTEST_USE_EGL_SURFACELESS=1 ninja -j$NUM_THREADS test + RET=$? + cp /virglrenderer/build/meson-logs/testlog.txt /virglrenderer/results/make_check_clang_fuzzer/ + return $RET + ) +} + run_deqp() { run_setup meson @@ -170,6 +192,10 @@ run_make_check_meson ;; + --make-check-clang-fuzzer) + run_make_check_clang_fuzzer + ;; + --deqp-gl-gl-tests) run_deqp gl gl ;; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/configure.ac new/virglrenderer-virglrenderer-0.8.2/configure.ac --- old/virglrenderer-virglrenderer-0.8.1/configure.ac 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/configure.ac 2020-02-12 07:29:08.000000000 +0100 @@ -2,7 +2,7 @@ AC_PREREQ([2.60]) -AC_INIT([virglrenderer], [0.8.1], +AC_INIT([virglrenderer], [0.8.2], [virglrenderer-de...@lists.freedesktop.org]) AC_ARG_ENABLE(autotools, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/meson.build new/virglrenderer-virglrenderer-0.8.2/meson.build --- old/virglrenderer-virglrenderer-0.8.1/meson.build 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/meson.build 2020-02-12 07:29:08.000000000 +0100 @@ -23,7 +23,7 @@ project( 'virglrenderer', 'c', - version: '0.8.1', + version: '0.8.2', license : 'MIT', meson_version : '>= 0.46', default_options : ['buildtype=release', 'b_ndebug=if-release', @@ -40,7 +40,7 @@ binary_age = 1 interface_age = 4 -revision = 1 +revision = 2 cc = meson.get_compiler('c') @@ -60,6 +60,16 @@ endif endforeach +flags = [ + '-fvisibility=hidden', +] + +foreach f : flags + if cc.has_argument(f) + add_project_arguments(f, language : 'c') + endif +endforeach + prog_python = import('python').find_installation('python3') libdrm_dep = dependency('libdrm', version : '>=2.4.50') @@ -86,9 +96,11 @@ conf_data.set('HAVE_EVENTFD_H', 1) endif -debug_enabled = get_option('debug') +if cc.has_header('sys/select.h') + conf_data.set('HAVE_SYS_SELECT_H', 1) +endif -if debug_enabled +if get_option('buildtype') == 'debug' add_global_arguments('-DDEBUG=1', language : 'c') endif @@ -113,7 +125,7 @@ endif if with_egl - if cc.has_header('epoxy/egl.h') and epoxy_dep.get_pkgconfig_variable('epoxy_has_egl') == '1' + if cc.has_header('epoxy/egl.h', dependencies: epoxy_dep) and epoxy_dep.get_pkgconfig_variable('epoxy_has_egl') == '1' gbm_dep = dependency('gbm', version: '>= ' + _gbm_ver, required: require_egl) have_egl = gbm_dep.found() conf_data.set('HAVE_EPOXY_EGL_H', 1) @@ -124,7 +136,7 @@ endif if with_glx - if cc.has_header('epoxy/glx.h') and epoxy_dep.get_pkgconfig_variable('epoxy_has_glx') == '1' + if cc.has_header('epoxy/glx.h', dependencies: epoxy_dep) and epoxy_dep.get_pkgconfig_variable('epoxy_has_glx') == '1' glx_dep = dependency('x11', required: require_glx) have_glx = glx_dep.found() conf_data.set('HAVE_EPOXY_GLX_H', 1) @@ -183,7 +195,6 @@ lines += '' lines += 'gbm_alloc: ' + (with_gbm_allocation ? 'yes' : 'no' ) lines += '' -lines += 'debug: ' + (debug_enabled ? 'yes' : 'no' ) lines += 'tests: ' + (with_tests ? 'yes' : 'no' ) lines += 'fuzzer: ' + (with_fuzzer ? 'yes' : 'no' ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/src/Makefile.am new/virglrenderer-virglrenderer-0.8.2/src/Makefile.am --- old/virglrenderer-virglrenderer-0.8.1/src/Makefile.am 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/src/Makefile.am 2020-02-12 07:29:08.000000000 +0100 @@ -57,7 +57,7 @@ lib_LTLIBRARIES = libvirglrenderer.la noinst_LTLIBRARIES = libvrend.la -GM_LDFLAGS = -Wl,-Bsymbolic -version-number 1:4:1 -no-undefined +GM_LDFLAGS = -Wl,-Bsymbolic -version-number 1:4:2 -no-undefined libvirglrenderer_la_SOURCES = virglrenderer.c libvirglrenderer_ladir = $(libdir) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/src/meson.build new/virglrenderer-virglrenderer-0.8.2/src/meson.build --- old/virglrenderer-virglrenderer-0.8.1/src/meson.build 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/src/meson.build 2020-02-12 07:29:08.000000000 +0100 @@ -23,12 +23,10 @@ subdir('gallium') -virglrenderer_sources = [ +virgl_sources = [ 'iov.c', 'virgl_hw.h', 'virgl_protocol.h', - 'virglrenderer.c', - 'virglrenderer.h', 'vrend_blitter.c', 'vrend_blitter.h', 'vrend_debug.c', @@ -48,19 +46,25 @@ 'vrend_util.h', ] -virglrenderer_egl_sources = [ +virglrenderer_sources = [ + 'virglrenderer.c', + 'virglrenderer.h', +] + + +virgl_egl_sources = [ 'virgl_gbm.c', 'virgl_gbm.h', 'virgl_egl_context.c', 'virgl_egl.h', ] -virglrenderer_glx_sources = [ +virgl_glx_sources = [ 'virgl_glx_context.c', 'virgl_glx.h', ] -virglrenderer_depends = [ +virgl_depends = [ gallium_dep, epoxy_dep, libdrm_dep, @@ -69,35 +73,48 @@ ] if have_egl - virglrenderer_sources += virglrenderer_egl_sources - virglrenderer_depends += [gbm_dep] + virgl_sources += virgl_egl_sources + virgl_depends += [gbm_dep] endif if have_glx - virglrenderer_sources += virglrenderer_glx_sources - virglrenderer_depends += [glx_dep] + virgl_sources += virgl_glx_sources + virgl_depends += [glx_dep] endif +libvirgl = static_library( + 'virgl', + virgl_sources, + include_directories: [inc_gallium, inc_configuration], + dependencies : virgl_depends, +) + +libvirgl_inc = [ + inc_gallium, + inc_configuration, + include_directories('.') +] + +libvirgl_dep = declare_dependency( + link_with: libvirgl, + include_directories: libvirgl_inc +) + libvirglrenderer = shared_library( 'virglrenderer', virglrenderer_sources, include_directories: [inc_gallium, inc_configuration], - dependencies : virglrenderer_depends, + dependencies : [virgl_depends, libvirgl_dep], version : binary_age.to_string() + '.' + interface_age.to_string() + '.' + revision.to_string(), install : true ) -libvirglrenderer_inc = [ - inc_gallium, - inc_configuration, - include_directories('.') -] - libvirglrenderer_dep = declare_dependency( link_with: libvirglrenderer, - include_directories: libvirglrenderer_inc + include_directories: libvirgl_inc, + dependencies : [libvirgl_dep, gallium_dep] ) install_headers('virglrenderer.h', subdir : 'virgl') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/src/virgl_egl.h new/virglrenderer-virglrenderer-0.8.2/src/virgl_egl.h --- old/virglrenderer-virglrenderer-0.8.1/src/virgl_egl.h 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/src/virgl_egl.h 2020-02-12 07:29:08.000000000 +0100 @@ -58,5 +58,6 @@ void virgl_egl_image_destroy(struct virgl_egl *egl, void *image); bool virgl_egl_need_fence_and_wait_external(struct virgl_egl *egl); -void virgl_egl_fence_and_wait_external(struct virgl_egl *egl); +void *virgl_egl_fence(struct virgl_egl *egl); +void virgl_egl_wait_fence(struct virgl_egl *egl, void* fence); #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/src/virgl_egl_context.c new/virglrenderer-virglrenderer-0.8.2/src/virgl_egl_context.c --- old/virglrenderer-virglrenderer-0.8.1/src/virgl_egl_context.c 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/src/virgl_egl_context.c 2020-02-12 07:29:08.000000000 +0100 @@ -518,21 +518,25 @@ return (egl && egl->need_fence_and_wait_external); } -void virgl_egl_fence_and_wait_external(struct virgl_egl *egl) +void *virgl_egl_fence(struct virgl_egl *egl) { const EGLint attrib_list[] = {EGL_SYNC_CONDITION_KHR, EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR, EGL_NONE}; - EGLSyncKHR fence; + EGLSyncKHR fence = EGL_NO_SYNC_KHR; if (!egl || !has_bit(egl->extension_bits, EGL_KHR_FENCE_SYNC)) { - return; + return (void *)fence; } - fence = eglCreateSyncKHR(egl->egl_display, EGL_SYNC_FENCE_KHR, attrib_list); - if (fence != EGL_NO_SYNC_KHR) { - eglClientWaitSyncKHR(egl->egl_display, fence, - EGL_SYNC_FLUSH_COMMANDS_BIT_KHR, EGL_FOREVER_KHR); - eglDestroySyncKHR(egl->egl_display, fence); - } + return (void *)eglCreateSyncKHR(egl->egl_display, EGL_SYNC_FENCE_KHR, attrib_list); +} + +void virgl_egl_wait_fence(struct virgl_egl *egl, void* sync) +{ + EGLSyncKHR fence = (EGLSyncKHR) sync; + if (fence == EGL_NO_SYNC_KHR) + return; + eglWaitSyncKHR(egl->egl_display, fence, 0); + eglDestroySyncKHR(egl->egl_display, fence); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/src/virgl_hw.h new/virglrenderer-virglrenderer-0.8.2/src/virgl_hw.h --- old/virglrenderer-virglrenderer-0.8.1/src/virgl_hw.h 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/src/virgl_hw.h 2020-02-12 07:29:08.000000000 +0100 @@ -555,7 +555,8 @@ VIRGL_ERROR_GL_ANY_SAMPLES_PASSED, VIRGL_ERROR_CTX_ILLEGAL_FORMAT, VIRGL_ERROR_CTX_ILLEGAL_SAMPLER_VIEW_TARGET, - VIRGL_ERROR_CTX_TRANSFER_IOV_BOUNDS + VIRGL_ERROR_CTX_TRANSFER_IOV_BOUNDS, + VIRGL_ERROR_CTX_ILLEGAL_DUAL_SRC_BLEND }; #define VIRGL_RESOURCE_Y_0_TOP (1 << 0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/src/vrend_blitter.c new/virglrenderer-virglrenderer-0.8.2/src/vrend_blitter.c --- old/virglrenderer-virglrenderer-0.8.1/src/vrend_blitter.c 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/src/vrend_blitter.c 2020-02-12 07:29:08.000000000 +0100 @@ -451,7 +451,7 @@ struct virgl_gl_ctx_param ctx_params; int i; if (blit_ctx->initialised) { - vrend_clicbs->make_current(blit_ctx->gl_context); + vrend_sync_make_current(blit_ctx->gl_context); return; } @@ -467,7 +467,7 @@ break; } - vrend_clicbs->make_current(blit_ctx->gl_context); + vrend_sync_make_current(blit_ctx->gl_context); glGenVertexArrays(1, &blit_ctx->vaoid); glGenFramebuffers(1, &blit_ctx->fb_id); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/src/vrend_blitter.h new/virglrenderer-virglrenderer-0.8.2/src/vrend_blitter.h --- old/virglrenderer-virglrenderer-0.8.1/src/vrend_blitter.h 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/src/vrend_blitter.h 2020-02-12 07:29:08.000000000 +0100 @@ -27,17 +27,17 @@ /* shaders for blitting */ #define HEADER_GL \ - "// Blitter\n" \ "#version 130\n" \ + "// Blitter\n" \ #define HEADER_GLES \ - "// Blitter\n" \ "#version 310 es\n" \ + "// Blitter\n" \ "precision mediump float;\n" \ #define HEADER_GLES_MS_ARRAY \ - "// Blitter\n" \ "#version 310 es\n" \ + "// Blitter\n" \ "#extension GL_OES_texture_storage_multisample_2d_array: require\n" \ "precision mediump float;\n" \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/src/vrend_debug.c new/virglrenderer-virglrenderer-0.8.2/src/vrend_debug.c --- old/virglrenderer-virglrenderer-0.8.1/src/vrend_debug.c 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/src/vrend_debug.c 2020-02-12 07:29:08.000000000 +0100 @@ -123,6 +123,7 @@ {"gles", dbg_gles, "GLES host specific debug"}, {"all", dbg_all, "Enable all debugging output"}, {"guestallow", dbg_allow_guest_override, "Allow the guest to override the debug flags"}, + {"khr", dbg_khr, "Enable debug via KHR_debug extension"}, DEBUG_NAMED_VALUE_END }; @@ -174,7 +175,34 @@ static void vrend_default_debug_callback(const char *fmt, va_list va) { - vfprintf(stderr, fmt, va); + static FILE* fp = NULL; + if (NULL == fp) { + const char* log = getenv("VIRGL_LOG_FILE"); + if (log) { + char *log_prefix = strdup(log); + char *log_suffix = strstr(log_prefix, "%PID%"); + if (log_suffix) { + *log_suffix = 0; + log_suffix += 5; + int len = strlen(log) + 32; + char *name = malloc(len); + snprintf(name, len, "%s%d%s", log_prefix, getpid(), log_suffix); + fp = fopen(name, "a"); + free(name); + } else { + fp = fopen(log, "a"); + } + free(log_prefix); + if (NULL == fp) { + fprintf(stderr, "Can't open %s\n", log); + fp = stderr; + } + } else { + fp = stderr; + } + } + vfprintf(fp, fmt, va); + fflush(fp); } static virgl_debug_callback_type debug_callback = vrend_default_debug_callback; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/src/vrend_debug.h new/virglrenderer-virglrenderer-0.8.2/src/vrend_debug.h --- old/virglrenderer-virglrenderer-0.8.1/src/vrend_debug.h 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/src/vrend_debug.h 2020-02-12 07:29:08.000000000 +0100 @@ -49,6 +49,7 @@ dbg_all = (1 << 13) - 1, dbg_allow_guest_override = 1 << 16, dbg_feature_use = 1 << 17, + dbg_khr = 1 << 18, }; const char *vrend_get_comand_name(enum virgl_context_cmd cmd); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/src/vrend_decode.c new/virglrenderer-virglrenderer-0.8.2/src/vrend_decode.c --- old/virglrenderer-virglrenderer-0.8.1/src/vrend_decode.c 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/src/vrend_decode.c 2020-02-12 07:29:08.000000000 +0100 @@ -1192,7 +1192,8 @@ if (num_abo < 1) return 0; - if (start_slot > PIPE_MAX_HW_ATOMIC_BUFFERS || + if (num_abo > PIPE_MAX_HW_ATOMIC_BUFFERS || + start_slot > PIPE_MAX_HW_ATOMIC_BUFFERS || start_slot > PIPE_MAX_HW_ATOMIC_BUFFERS - num_abo) return EINVAL; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/src/vrend_renderer.c new/virglrenderer-virglrenderer-0.8.2/src/vrend_renderer.c --- old/virglrenderer-virglrenderer-0.8.1/src/vrend_renderer.c 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/src/vrend_renderer.c 2020-02-12 07:29:08.000000000 +0100 @@ -67,9 +67,6 @@ extern struct virgl_egl *egl; #endif -/* debugging via KHR_debug extension */ -int vrend_use_debug_cb = 0; - int use_context = CONTEXT_NONE; static const uint32_t fake_occlusion_query_samples_passed_default = 1024; @@ -681,7 +678,21 @@ static inline bool vrend_format_can_sample(enum virgl_formats format) { - return tex_conv_table[format].bindings & VIRGL_BIND_SAMPLER_VIEW; + if (tex_conv_table[format].bindings & VIRGL_BIND_SAMPLER_VIEW) + return true; + +#ifdef ENABLE_GBM_ALLOCATION + uint32_t gbm_format = 0; + if (virgl_gbm_convert_format(&format, &gbm_format)) + return false; + + if (!gbm || !gbm->device || !gbm_format) + return false; + + return gbm_device_is_format_supported(gbm->device, gbm_format, GBM_BO_USE_TEXTURING); +#else + return false; +#endif } static inline bool vrend_format_can_readback(enum virgl_formats format) @@ -1514,12 +1525,18 @@ if (fs->sel->sinfo.num_outputs > 1) { if (util_blend_state_is_dual(&ctx->sub->blend_state, 0)) { - glBindFragDataLocationIndexed(prog_id, 0, 0, "fsout_c0"); - glBindFragDataLocationIndexed(prog_id, 0, 1, "fsout_c1"); + if (has_feature(feat_dual_src_blend)) { + glBindFragDataLocationIndexed(prog_id, 0, 0, "fsout_c0"); + glBindFragDataLocationIndexed(prog_id, 0, 1, "fsout_c1"); + } else { + report_context_error(ctx, VIRGL_ERROR_CTX_ILLEGAL_DUAL_SRC_BLEND, 0); + } sprog->dual_src_linked = true; } else { - glBindFragDataLocationIndexed(prog_id, 0, 0, "fsout_c0"); - glBindFragDataLocationIndexed(prog_id, 1, 0, "fsout_c1"); + if (has_feature(feat_dual_src_blend)) { + glBindFragDataLocationIndexed(prog_id, 0, 0, "fsout_c0"); + glBindFragDataLocationIndexed(prog_id, 1, 0, "fsout_c1"); + } sprog->dual_src_linked = false; } } else @@ -1704,6 +1721,13 @@ FREE(obj); } +void vrend_sync_make_current(virgl_gl_context gl_cxt) { + GLsync sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); + vrend_clicbs->make_current(gl_cxt); + glWaitSync(sync, 0, GL_TIMEOUT_IGNORED); + glDeleteSync(sync); +} + int vrend_create_surface(struct vrend_context *ctx, uint32_t handle, uint32_t res_handle, uint32_t format, @@ -4604,6 +4628,13 @@ } ctx->sub->shader_dirty = true; } + + if (!ctx->sub->prog) { + vrend_printf("%s: Skipping compute shader execution due to missing shaders: %s\n", + __func__, ctx->debug_name); + return; + } + vrend_use_program(ctx, ctx->sub->prog->id); vrend_draw_bind_ubo_shader(ctx, PIPE_SHADER_COMPUTE, 0); @@ -4831,7 +4862,9 @@ else glDisable(GL_BLEND); - if (state->rt[0].colormask != ctx->sub->hw_blend_state.rt[0].colormask) { + if (state->rt[0].colormask != ctx->sub->hw_blend_state.rt[0].colormask || + (ctx->sub->hw_blend_state.independent_blend_enable && + !state->independent_blend_enable)) { int i; for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++) ctx->sub->hw_blend_state.rt[i].colormask = state->rt[i].colormask; @@ -5752,7 +5785,7 @@ gl_ver = epoxy_gl_version(); /* enable error output as early as possible */ - if (vrend_use_debug_cb && epoxy_has_gl_extension("GL_KHR_debug")) { + if (vrend_debug(NULL, dbg_khr) && epoxy_has_gl_extension("GL_KHR_debug")) { glDebugMessageCallback(vrend_debug_cb, NULL); glEnable(GL_DEBUG_OUTPUT); glDisable(GL_DEBUG_OUTPUT_SYNCHRONOUS); @@ -5866,6 +5899,8 @@ int i, j; struct vrend_streamout_object *obj, *tmp; + vrend_clicbs->make_current(sub->gl_context); + if (sub->fb_id) glDeleteFramebuffers(1, &sub->fb_id); @@ -5961,9 +5996,10 @@ vrend_set_index_buffer(ctx, 0, 0, 0); - vrend_renderer_force_ctx_0(); LIST_FOR_EACH_ENTRY_SAFE(sub, tmp, &ctx->sub_ctxs, head) vrend_destroy_sub_context(sub); + if(ctx->ctx_id) + vrend_renderer_force_ctx_0(); vrend_object_fini_ctx_table(ctx->res_hash); @@ -6455,11 +6491,11 @@ has_feature(feat_egl_image_storage)) { glEGLImageTargetTexStorageEXT(gr->target, (GLeglImageOES) image_oes, NULL); } else if (has_feature(feat_egl_image_external)) { + gr->storage_bits &= ~VREND_STORAGE_GL_IMMUTABLE; glEGLImageTargetTexture2DOES(gr->target, (GLeglImageOES) image_oes); } else { vrend_printf( "missing GL_OES_EGL_image_external extensions\n"); glBindTexture(gr->target, 0); - FREE(gr); return EINVAL; } } else { @@ -6470,7 +6506,6 @@ if (internalformat == 0) { vrend_printf("unknown format is %d\n", pr->format); glBindTexture(gr->target, 0); - FREE(gt); return EINVAL; } @@ -7377,6 +7412,10 @@ if (actually_invert && !has_feature(feat_mesa_invert)) separate_invert = true; +#ifdef PIPE_ARCH_BIG_ENDIAN + glPixelStorei(GL_PACK_SWAP_BYTES, 1); +#endif + if (num_iovs > 1 || separate_invert) need_temp = 1; @@ -7491,6 +7530,11 @@ if (!need_temp && row_stride) glPixelStorei(GL_PACK_ROW_LENGTH, 0); glPixelStorei(GL_PACK_ALIGNMENT, 4); + +#ifdef PIPE_ARCH_BIG_ENDIAN + glPixelStorei(GL_PACK_SWAP_BYTES, 0); +#endif + if (need_temp) { write_transfer_data(&res->base, iov, num_iovs, data, info->stride, info->box, info->level, info->offset, @@ -7612,12 +7656,13 @@ return EINVAL; } + void* fence = NULL; #ifdef HAVE_EPOXY_EGL_H // Some platforms require extra synchronization before transferring. if (transfer_mode == VIRGL_TRANSFER_FROM_HOST) { if (virgl_egl_need_fence_and_wait_external(egl)) { vrend_hw_switch_context(ctx, true); - virgl_egl_fence_and_wait_external(egl); + fence = virgl_egl_fence(egl); } } #endif @@ -7654,6 +7699,7 @@ if (info->context0) { vrend_renderer_force_ctx_0(); + virgl_egl_wait_fence(egl, fence); ctx = NULL; } @@ -8276,10 +8322,6 @@ util_format_name(format), format != dst_fmt ? "(emulated)" : ""); - unsigned layers_factor = 1; - if (res->target == GL_TEXTURE_CUBE_MAP || res->target == GL_TEXTURE_CUBE_MAP_ARRAY) - layers_factor = 6; - if (vrend_state.use_gles) { assert(res->target != GL_TEXTURE_RECTANGLE_NV); assert(res->target != GL_TEXTURE_1D); @@ -8287,7 +8329,7 @@ } glTextureView(view_id, res->target, res->id, fmt, 0, res->base.last_level + 1, - 0, layers_factor * res->base.depth0); + 0, res->base.array_size); return view_id; } @@ -8409,7 +8451,7 @@ has_feature(feat_texture_srgb_decode), has_feature(feat_srgb_write_control), skip_dest_swizzle); - vrend_clicbs->make_current(ctx->sub->gl_context); + vrend_sync_make_current(ctx->sub->gl_context); goto cleanup; } @@ -9527,8 +9569,9 @@ /* All of the formats are common. */ for (i = 0; i < VIRGL_FORMAT_MAX; i++) { - if (tex_conv_table[i].internalformat != 0) { - enum virgl_formats fmt = (enum virgl_formats)i; + enum virgl_formats fmt = (enum virgl_formats)i; + if (tex_conv_table[i].internalformat != 0 || fmt == VIRGL_FORMAT_YV12 || + fmt == VIRGL_FORMAT_NV12) { if (vrend_format_can_sample(fmt)) { set_format_bit(&caps->v1.sampler, fmt); if (vrend_format_can_render(fmt)) @@ -10198,9 +10241,9 @@ if (tofree) { if (ctx->sub == tofree) { ctx->sub = ctx->sub0; - vrend_clicbs->make_current(ctx->sub->gl_context); } vrend_destroy_sub_context(tofree); + vrend_clicbs->make_current(ctx->sub->gl_context); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/src/vrend_renderer.h new/virglrenderer-virglrenderer-0.8.2/src/vrend_renderer.h --- old/virglrenderer-virglrenderer-0.8.1/src/vrend_renderer.h 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/src/vrend_renderer.h 2020-02-12 07:29:08.000000000 +0100 @@ -362,9 +362,6 @@ bool condtion, uint mode); void *vrend_renderer_get_cursor_contents(uint32_t res_handle, uint32_t *width, uint32_t *height); -void vrend_bind_va(GLuint vaoid); -int vrend_renderer_flush_buffer_res(struct vrend_resource *res, - struct pipe_box *box); void vrend_renderer_fill_caps(uint32_t set, uint32_t version, union virgl_caps *caps); @@ -470,4 +467,6 @@ int vrend_renderer_execute(void *execute_args, uint32_t execute_size); +void vrend_sync_make_current(virgl_gl_context); + #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/tests/fuzzer/Makefile.am new/virglrenderer-virglrenderer-0.8.2/tests/fuzzer/Makefile.am --- old/virglrenderer-virglrenderer-0.8.1/tests/fuzzer/Makefile.am 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/tests/fuzzer/Makefile.am 2020-02-12 07:29:08.000000000 +0100 @@ -11,7 +11,6 @@ $(EPOXY_CFLAGS) \ $(VISIBILITY_CFLAGS) \ $(CODE_COVERAGE_CFLAGS) \ - -fsanitize=address \ -fsanitize=fuzzer if FUZZER diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/tests/fuzzer/meson.build new/virglrenderer-virglrenderer-0.8.2/tests/fuzzer/meson.build --- old/virglrenderer-virglrenderer-0.8.1/tests/fuzzer/meson.build 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/tests/fuzzer/meson.build 2020-02-12 07:29:08.000000000 +0100 @@ -27,7 +27,7 @@ virgl_fuzzer = executable( 'virgl_fuzzer', 'virgl_fuzzer.c', - c_args : [ '-fsanitize=address', '-fsanitize=fuzzer' ], - link_args : [ '-fsanitize=address', '-fsanitize=fuzzer' ], - dependencies : [libvirglrenderer_dep, epoxy_dep] + c_args : [ '-fsanitize=fuzzer' ], + link_args : [ '-fsanitize=fuzzer' ], + dependencies : [libvirglrenderer_dep, gallium_dep, epoxy_dep] ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/tests/meson.build new/virglrenderer-virglrenderer-0.8.2/tests/meson.build --- old/virglrenderer-virglrenderer-0.8.1/tests/meson.build 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/tests/meson.build 2020-02-12 07:29:08.000000000 +0100 @@ -30,11 +30,11 @@ 'testvirgl_encode.h', ] -libvrtest = library( +libvrtest = static_library( 'vrtest', libvrtest_sources, dependencies : [ - libvirglrenderer_dep, + libvirgl_dep, gallium_dep, check_dep ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/tests/test_fuzzer_formats.c new/virglrenderer-virglrenderer-0.8.2/tests/test_fuzzer_formats.c --- old/virglrenderer-virglrenderer-0.8.1/tests/test_fuzzer_formats.c 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/tests/test_fuzzer_formats.c 2020-02-12 07:29:08.000000000 +0100 @@ -146,6 +146,28 @@ virgl_renderer_submit_cmd((void *) cmd, ctx_id, VIRGL_CMD_BLIT_SIZE + 1); } +static void test_format_fail_and_double_free() +{ + struct virgl_renderer_resource_create_args args; + + args.handle = 1; + args.target = 3; + args.format = 191; + args.bind = 10; + args.width = 49; + args.height = 0; + args.depth = 0; + args.array_size = 0; + args.last_level = 0; + args.nr_samples = 0; + args.flags = 0; + + virgl_renderer_resource_create(&args, NULL, 0); + virgl_renderer_ctx_attach_resource(ctx_id, args.handle); +} + + + /* Issue #141 */ static void test_blit_info_format_check() @@ -654,11 +676,294 @@ virgl_renderer_submit_cmd((void *) cmd, ctx_id, 11 + 4 + 1); } + +static void test_cs_nullpointer_deference() +{ + + struct virgl_renderer_resource_create_args args; + args.handle = 0x6e735f72; + args.target = 2; + args.format = 0x101; + args.bind = 0x19191919; + args.width = 0x19191919; + args.height = 0x19191919; + args.depth = 0x411959; + args.array_size = 0; + args.last_level = 0x19190000; + args.nr_samples = 0; + args.flags = 0x31313100; + + virgl_renderer_resource_create(&args, NULL, 0); + virgl_renderer_ctx_attach_resource(ctx_id, args.handle); + + uint32_t cmd[9]; + int i = 0; + cmd[i++] = 0x0083925; + cmd[i++] = 0x00313131; + cmd[i++] = 0; + cmd[i++] = 0; + cmd[i++] = 0; + cmd[i++] = 0x25313131; + cmd[i++] = 0x39; + cmd[i++] = 0x0001370b; + cmd[i++] = 0x00340000; + + virgl_renderer_submit_cmd((void *) cmd, ctx_id, 9); +} + +static void test_vrend_set_signle_abo_heap_overflow() { + + struct virgl_renderer_resource_create_args args; + args.handle = 0x4c474572; + args.target = 0; + args.format = 0x43; + args.bind = 0x80000; + args.width = 0x5f5f616d; + args.height = 0x69667562; + args.depth = 0x726f706d; + args.array_size = 0xbbbbbb74; + args.last_level = 0xbbbbbbbb; + args.nr_samples = 0xbbbbbbbb; + args.flags = 0xff; + + virgl_renderer_resource_create(&args, NULL, 0); + virgl_renderer_ctx_attach_resource(ctx_id, args.handle); + + uint32_t cmd[0xde]; + int i = 0; + + cmd[i++] = 0x000e1919; + cmd[i++] = 0x00003f00; + cmd[i++] = 0xc7cf3000; + cmd[i++] = 0x00083907; + cmd[i++] = 0x6e73735f; + cmd[i++] = 0x32323232; + cmd[i++] = 0x19312161; + cmd[i++] = 0x19191919; + cmd[i++] = 0x19191919; + cmd[i++] = 0x19191919; + cmd[i++] = 0xffbe1959; + cmd[i++] = 0xbbbbbbff; + cmd[i++] = 0xbbbbbb29; + cmd[i++] = 0xbbbbbbbb; + cmd[i++] = 0x000000ff; + cmd[i++] = 0x000e1928; + cmd[i++] = 0x00000000; + cmd[i++] = 0x4111d000; + cmd[i++] = 0xfe010000; + cmd[i++] = 0x00000172; + cmd[i++] = 0x32323200; + cmd[i++] = 0xe6cedea2; + cmd[i++] = 0xe6e6e6e6; + cmd[i++] = 0x19191919; + cmd[i++] = 0x19191919; + cmd[i++] = 0xffbe1959; + cmd[i++] = 0xbbbbbbff; + cmd[i++] = 0xbbbbbbbb; + cmd[i++] = 0xbbbbbbbb; + cmd[i++] = 0x000000ff; + cmd[i++] = 0x000e1919; + cmd[i++] = 0x00000000; + cmd[i++] = 0xc7cfa400; + cmd[i++] = 0x00083907; + cmd[i++] = 0x6e73735f; + cmd[i++] = 0x32323232; + cmd[i++] = 0x19312161; + cmd[i++] = 0x19191919; + cmd[i++] = 0x19191919; + cmd[i++] = 0x19191919; + cmd[i++] = 0x00000159; + cmd[i++] = 0xbbbbbb00; + cmd[i++] = 0xbbbbbbbb; + cmd[i++] = 0xbbbbbbbb; + cmd[i++] = 0x000000ff; + cmd[i++] = 0x006e1928; + cmd[i++] = 0x00000000; + cmd[i++] = 0xbeee3000; + cmd[i++] = 0xe6e6ffff; + cmd[i++] = 0x19e6e6e6; + cmd[i++] = 0x19191919; + cmd[i++] = 0x59191919; + cmd[i++] = 0xffffbe19; + cmd[i++] = 0xbbbbbbbb; + cmd[i++] = 0xbbbbbbbb; + cmd[i++] = 0xffbbbbbb; + cmd[i++] = 0x19000000; + cmd[i++] = 0x00000e19; + cmd[i++] = 0x00000000; + cmd[i++] = 0x07c7cfa4; + cmd[i++] = 0x5f000839; + cmd[i++] = 0x326e7373; + cmd[i++] = 0x00390732; + cmd[i++] = 0x00000000; + cmd[i++] = 0x4111d000; + cmd[i++] = 0xfe010000; + cmd[i++] = 0x00000172; + cmd[i++] = 0x32323200; + cmd[i++] = 0xe6cedea2; + cmd[i++] = 0xe6e6e6e6; + cmd[i++] = 0x19191919; + cmd[i++] = 0x19191919; + cmd[i++] = 0xffbe1959; + cmd[i++] = 0xbbbbbbff; + cmd[i++] = 0xbbbbbbbb; + cmd[i++] = 0xbbbbbbbb; + cmd[i++] = 0x000000ff; + cmd[i++] = 0x000e1919; + cmd[i++] = 0x00000000; + cmd[i++] = 0xc7cfa400; + cmd[i++] = 0x00083907; + cmd[i++] = 0x6e73735f; + cmd[i++] = 0x32323232; + cmd[i++] = 0x19312161; + cmd[i++] = 0x19191919; + cmd[i++] = 0x19191919; + cmd[i++] = 0x19191919; + cmd[i++] = 0x00000159; + cmd[i++] = 0xbbbbbb00; + cmd[i++] = 0xbbbbbbbb; + cmd[i++] = 0xbbbbbbbb; + cmd[i++] = 0x000000ff; + cmd[i++] = 0x002e1928; + cmd[i++] = 0x00000000; + cmd[i++] = 0xbeee3000; + cmd[i++] = 0xe6e6ffff; + cmd[i++] = 0x19e6e6e6; + cmd[i++] = 0x19191919; + cmd[i++] = 0x59191919; + cmd[i++] = 0xffffbe19; + cmd[i++] = 0xbbbbbbbb; + cmd[i++] = 0xbbbbbbbb; + cmd[i++] = 0xffbbbbbb; + cmd[i++] = 0x19000000; + cmd[i++] = 0x00000a19; + cmd[i++] = 0x00000000; + cmd[i++] = 0x07c7cfa4; + cmd[i++] = 0x5f000839; + cmd[i++] = 0x326e7373; + cmd[i++] = 0x08390732; + cmd[i++] = 0x73735f00; + cmd[i++] = 0x3232326e; + cmd[i++] = 0x31216132; + cmd[i++] = 0x19191919; + cmd[i++] = 0x19191919; + cmd[i++] = 0x19191919; + cmd[i++] = 0x00015919; + cmd[i++] = 0xbbbb0000; + cmd[i++] = 0xbbbbbbbb; + cmd[i++] = 0x00bbbbbb; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0xbbbb0000; + cmd[i++] = 0x000000ff; + cmd[i++] = 0x002e1928; + cmd[i++] = 0x00000000; + cmd[i++] = 0x08ee3000; + cmd[i++] = 0x73735f00; + cmd[i++] = 0x3232326e; + cmd[i++] = 0x31216132; + cmd[i++] = 0x19191919; + cmd[i++] = 0x19191919; + cmd[i++] = 0x19191919; + cmd[i++] = 0x00015919; + cmd[i++] = 0xbbbb0000; + cmd[i++] = 0xbbbbbbbb; + cmd[i++] = 0x00bbbbbb; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0xbbbb0000; + cmd[i++] = 0x000000ff; + cmd[i++] = 0x002e1928; + cmd[i++] = 0x00000000; + cmd[i++] = 0xbeee3000; + cmd[i++] = 0xe6e6ffff; + cmd[i++] = 0x19e6e6e6; + cmd[i++] = 0x19191919; + cmd[i++] = 0x59191919; + cmd[i++] = 0xffffbe19; + cmd[i++] = 0xbbbbbbbb; + cmd[i++] = 0xbbbbbbbb; + cmd[i++] = 0xffbbbbbb; + cmd[i++] = 0x19000000; + cmd[i++] = 0x61323219; + cmd[i++] = 0x19193121; + cmd[i++] = 0x19191919; + cmd[i++] = 0x19191919; + cmd[i++] = 0xbbbbbb19; + cmd[i++] = 0xbbbbbbbb; + cmd[i++] = 0xffbbbbbb; + cmd[i++] = 0x28000000; + cmd[i++] = 0x00002e19; + cmd[i++] = 0x00000000; + cmd[i++] = 0xffbeee30; + cmd[i++] = 0x00cffeff; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00006161; + cmd[i++] = 0x315d3100; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0x00000000; + cmd[i++] = 0xbb000000; + cmd[i++] = 0xbbbbbbbb; + cmd[i++] = 0x000000ff; + cmd[i++] = 0x000e1919; + cmd[i++] = 0x00000000; + cmd[i++] = 0xc7cfa400; + cmd[i++] = 0x7865745f; + cmd[i++] = 0x00000000; + cmd[i++] = 0x65727574; + cmd[i++] = 0x0b87765f; + cmd[i++] = 0x40000137; + cmd[i++] = 0x00004000; + cmd[i++] = 0x00340034; + + virgl_renderer_submit_cmd((void *) cmd, ctx_id, 0xde); +} + int main() { initialize_environment(); test_format_wrong_size(); + test_format_fail_and_double_free(); test_blit_info_format_check(); test_blit_info_format_check_null_format(); test_format_is_plain_nullptr_deref_trigger(); @@ -672,6 +977,10 @@ test_heap_overflow_vrend_renderer_transfer_write_iov(); test_heap_overflow_vrend_renderer_transfer_write_iov_compressed_tex(); + test_cs_nullpointer_deference(); + test_vrend_set_signle_abo_heap_overflow(); + + virgl_renderer_context_destroy(ctx_id); virgl_renderer_cleanup(&cookie); virgl_egl_destroy(test_egl); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/tests/test_virgl_cmd.c new/virglrenderer-virglrenderer-0.8.2/tests/test_virgl_cmd.c --- old/virglrenderer-virglrenderer-0.8.1/tests/test_virgl_cmd.c 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/tests/test_virgl_cmd.c 2020-02-12 07:29:08.000000000 +0100 @@ -67,6 +67,12 @@ } END_TEST +#ifdef PIPE_ARCH_LITTLE_ENDIAN +static const uint32_t test_green = 0xff00ff00; +#else +static const uint32_t test_green = 0x00ff00ff; +#endif + /* create a resource - clear it to a color, do a transfer */ START_TEST(virgl_test_clear) { @@ -127,7 +133,7 @@ /* check the returned values */ for (i = 0; i < 5; i++) { uint32_t *ptr = res.iovs[0].iov_base; - ck_assert_int_eq(ptr[i], 0xff00ff00); + ck_assert_int_eq(ptr[i], test_green); } /* cleanup */ @@ -216,7 +222,7 @@ /* check the returned values */ for (i = 0; i < 5; i++) { uint32_t *ptr = res2.iovs[0].iov_base; - ck_assert_int_eq(ptr[i], 0xff00ff00); + ck_assert_int_eq(ptr[i], test_green); } /* cleanup */ @@ -460,7 +466,7 @@ uint32_t *ptr = res.iovs[0].iov_base; for (h = 0; h < th; h++) { for (w = 0; w < tw; w++) { - if (ptr[h * tw + w] != 0xff00ff00) + if (ptr[h * tw + w] != test_green) all_cleared = false; } } @@ -724,7 +730,7 @@ uint32_t *ptr = res.iovs[0].iov_base; for (h = 0; h < th; h++) { for (w = 0; w < tw; w++) { - if (ptr[h * tw + w] != 0xff00ff00) + if (ptr[h * tw + w] != test_green) all_cleared = false; } } @@ -969,7 +975,7 @@ uint32_t *ptr = res.iovs[0].iov_base; for (h = 0; h < th; h++) { for (w = 0; w < tw; w++) { - if (ptr[h * tw + w] != 0xff00ff00) + if (ptr[h * tw + w] != test_green) all_cleared = false; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/vtest/Makefile.am new/virglrenderer-virglrenderer-0.8.2/vtest/Makefile.am --- old/virglrenderer-virglrenderer-0.8.1/vtest/Makefile.am 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/vtest/Makefile.am 2020-02-12 07:29:08.000000000 +0100 @@ -50,7 +50,6 @@ $(EPOXY_CFLAGS) \ $(VISIBILITY_CFLAGS) \ $(CODE_COVERAGE_CFLAGS) \ - -fsanitize=address \ -fsanitize=fuzzer vtest_fuzzer_LDADD = $(top_builddir)/src/gallium/auxiliary/libgallium.la $(top_builddir)/src/libvirglrenderer.la diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/vtest/meson.build new/virglrenderer-virglrenderer-0.8.2/vtest/meson.build --- old/virglrenderer-virglrenderer-0.8.1/vtest/meson.build 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/vtest/meson.build 2020-02-12 07:29:08.000000000 +0100 @@ -36,7 +36,7 @@ virgl_test_server = executable( 'virgl_test_server', virgl_test_server_sources, - dependencies : libvirglrenderer_dep, + dependencies : [libvirglrenderer_dep, gallium_dep], install : true ) @@ -52,8 +52,8 @@ vtest_fuzzer = executable( 'vtest_fuzzer', 'vtest_fuzzer.c', - c_args : [ '-fsanitize=address', '-fsanitize=fuzzer' ], - link_args : [ '-fsanitize=address', '-fsanitize=fuzzer' ], + c_args : [ '-fsanitize=fuzzer' ], + link_args : [ '-fsanitize=fuzzer' ], objects : vtest_obj, dependencies : libvirglrenderer_dep ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virglrenderer-virglrenderer-0.8.1/vtest/vtest_server.c new/virglrenderer-virglrenderer-0.8.2/vtest/vtest_server.c --- old/virglrenderer-virglrenderer-0.8.1/vtest/vtest_server.c 2019-12-20 11:38:08.000000000 +0100 +++ new/virglrenderer-virglrenderer-0.8.2/vtest/vtest_server.c 2020-02-12 07:29:08.000000000 +0100 @@ -39,7 +39,9 @@ #include "vtest.h" #include "vtest_protocol.h" #include "virglrenderer.h" - +#ifdef HAVE_SYS_SELECT_H +#include <sys/select.h> +#endif struct vtest_program