CVS commit: [netbsd-9] xsrc/external/mit/MesaLib/dist/src/mapi
Module Name:xsrc Committed By: martin Date: Tue Feb 25 19:33:40 UTC 2020 Modified Files: xsrc/external/mit/MesaLib/dist/src/mapi [netbsd-9]: entry_x86-64_tls.h entry_x86_tls.h Log Message: Pull up following revision(s) (requested by tnn in ticket #724): xsrc/external/mit/MesaLib/dist/src/mapi/entry_x86_tls.h: revision 1.6 xsrc/external/mit/MesaLib/dist/src/mapi/entry_x86-64_tls.h: revision 1.5 mesa: sync w/ pkgsrc: don't assume the current gl dispatch table points to noop if NULL, instead call the ENTRY_CURRENT_TABLE_GET function. Additionally the previous i386 implementation probably never worked because it looks like it used the wrong asm label when computing GOT ptr. Likely relevant to PR port-i386/54782. XXX pullup -9 To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.4.2.1 \ xsrc/external/mit/MesaLib/dist/src/mapi/entry_x86-64_tls.h cvs rdiff -u -r1.5 -r1.5.2.1 \ xsrc/external/mit/MesaLib/dist/src/mapi/entry_x86_tls.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: xsrc/external/mit/MesaLib/dist/src/mapi/entry_x86-64_tls.h diff -u xsrc/external/mit/MesaLib/dist/src/mapi/entry_x86-64_tls.h:1.4 xsrc/external/mit/MesaLib/dist/src/mapi/entry_x86-64_tls.h:1.4.2.1 --- xsrc/external/mit/MesaLib/dist/src/mapi/entry_x86-64_tls.h:1.4 Tue Apr 9 14:14:59 2019 +++ xsrc/external/mit/MesaLib/dist/src/mapi/entry_x86-64_tls.h Tue Feb 25 19:33:40 2020 @@ -32,24 +32,27 @@ #endif __asm__(".text\n" -".balign 32\n" +".balign 64\n" "x86_64_entry_start:"); #define STUB_ASM_ENTRY(func) \ ".globl " func "\n" \ ".type " func ", @function\n" \ - ".balign 32\n"\ + ".balign 64\n"\ func ":" #ifndef __ILP32__ -#if defined(__NetBSD__) && defined(MAPI_MODE_GLAPI) +#if defined(__NetBSD__) #define STUB_ASM_CODE(slot) \ "movq " ENTRY_CURRENT_TABLE "@GOTTPOFF(%rip), %rax\n\t" \ "movq %fs:(%rax), %r11\n\t" \ "testq %r11, %r11\n\t"\ - "cmoveq table_noop_array@GOTPCREL(%rip), %r11\n\t"\ - "jmp *(8 * " slot ")(%r11)" + "je 1f\n\t" \ + "jmp *(8 * " slot ")(%r11)\n\t" \ + "1:\n\t" \ + "callq " ENTRY_CURRENT_TABLE_GET "@PLT\n\t" \ + "jmp *(8 * " slot ")(%rax)" #else #define STUB_ASM_CODE(slot) \ "movq " ENTRY_CURRENT_TABLE "@GOTTPOFF(%rip), %rax\n\t" \ @@ -86,7 +89,7 @@ x86_64_entry_start[] HIDDEN; mapi_func entry_get_public(int slot) { - return (mapi_func) (x86_64_entry_start + slot * 32); + return (mapi_func) (x86_64_entry_start + slot * 64); } void Index: xsrc/external/mit/MesaLib/dist/src/mapi/entry_x86_tls.h diff -u xsrc/external/mit/MesaLib/dist/src/mapi/entry_x86_tls.h:1.5 xsrc/external/mit/MesaLib/dist/src/mapi/entry_x86_tls.h:1.5.2.1 --- xsrc/external/mit/MesaLib/dist/src/mapi/entry_x86_tls.h:1.5 Tue Apr 9 14:14:59 2019 +++ xsrc/external/mit/MesaLib/dist/src/mapi/entry_x86_tls.h Tue Feb 25 19:33:40 2020 @@ -43,6 +43,20 @@ __asm__("x86_current_tls:\n\t" "movl " ENTRY_CURRENT_TABLE "@GOTNTPOFF(%eax), %eax\n\t" "ret"); +#if defined(__NetBSD__) +__asm__("x86_current_table_helper:\n\t" + "movl %gs:(%eax), %eax\n\t" \ + "testl %eax, %eax\n\t"\ + "je 1f\n\t" \ + "ret\n\t" \ + "1:\n\t" \ + "call 2f\n\t" \ + "2:\n\t" \ + "popl %eax\n\t" \ + "addl $_GLOBAL_OFFSET_TABLE_+[.-2b], %eax\n\t" \ + "jmp *" ENTRY_CURRENT_TABLE_GET "@GOT(%eax)"); +#endif + #ifndef GLX_X86_READONLY_TEXT __asm__(".section wtext, \"awx\", @progbits"); #endif /* GLX_X86_READONLY_TEXT */ @@ -56,20 +70,10 @@ __asm__(".balign 16\n" ".balign 16\n"\ func ":" -#if defined(__NetBSD__) && defined(MAPI_MODE_GLAPI) -extern const mapi_func table_noop_array[]; +#if defined(__NetBSD__) #define STUB_ASM_CODE(slot) \ "call x86_current_tls\n\t"\ - "movl %gs:(%eax), %eax\n\t" \ - "testl %eax, %eax\n\t"\ - "je 1f\n\t" \ - "jmp *(4 * " slot ")(%eax)\n\t" \ - "1:\n\t" \ - "call 2f\n" \ - "2:\n\t" \ - "popl %eax\n\t" \ - "addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %eax\n\t" \ - "movl table_noop_array@GOT(%eax), %eax\n\t" \ + "call x86_current_table_helper\n\t"\ "jmp *(4 * " slot ")(%eax)" #else #define STUB_ASM_CODE(slot) \
CVS commit: [netbsd-9] xsrc/external/mit/MesaLib/dist/src
Module Name:xsrc Committed By: martin Date: Thu Dec 12 12:26:20 UTC 2019 Modified Files: xsrc/external/mit/MesaLib/dist/src/egl/drivers/dri2 [netbsd-9]: egl_dri2.c xsrc/external/mit/MesaLib/dist/src/gbm/backends/dri [netbsd-9]: gbm_dri.c xsrc/external/mit/MesaLib/dist/src/glx [netbsd-9]: dri_common.c Log Message: Pull up following revision(s) (requested by maya in ticket #526): external/mit/MesaLib/dist/src/intel/dev/gen_device_info.c: revision 1.5 external/mit/MesaLib/dist/src/loader/loader.c: revision 1.2 external/mit/MesaLib/dist/src/mesa/main/context.c: revision 1.8 external/mit/MesaLib/dist/src/util/disk_cache.c: revision 1.4 (all via patch) external/mit/MesaLib/dist/src/egl/drivers/dri2/egl_dri2.c (apply patch) external/mit/MesaLib/dist/src/gbm/backends/dri/gbm_dri.c (apply patch) external/mit/MesaLib/dist/src/glx/dri_common.c (apply patch) Wherever we test for setuid, also test for setgid. Inspired by a diff to openbsd but with a few more instances. To generate a diff of this commit: cvs rdiff -u -r1.1.1.5 -r1.1.1.5.2.1 \ xsrc/external/mit/MesaLib/dist/src/egl/drivers/dri2/egl_dri2.c cvs rdiff -u -r1.4 -r1.4.2.1 \ xsrc/external/mit/MesaLib/dist/src/gbm/backends/dri/gbm_dri.c cvs rdiff -u -r1.3 -r1.3.2.1 \ xsrc/external/mit/MesaLib/dist/src/glx/dri_common.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: xsrc/external/mit/MesaLib/dist/src/egl/drivers/dri2/egl_dri2.c diff -u xsrc/external/mit/MesaLib/dist/src/egl/drivers/dri2/egl_dri2.c:1.1.1.5 xsrc/external/mit/MesaLib/dist/src/egl/drivers/dri2/egl_dri2.c:1.1.1.5.2.1 --- xsrc/external/mit/MesaLib/dist/src/egl/drivers/dri2/egl_dri2.c:1.1.1.5 Sat Jun 1 07:41:07 2019 +++ xsrc/external/mit/MesaLib/dist/src/egl/drivers/dri2/egl_dri2.c Thu Dec 12 12:26:19 2019 @@ -491,7 +491,7 @@ dri2_open_driver(_EGLDisplay *disp) const __DRIextension **(*get_extensions)(void); search_paths = NULL; - if (geteuid() == getuid()) { + if (!issetugid()) { /* don't allow setuid apps to use LIBGL_DRIVERS_PATH */ search_paths = getenv("LIBGL_DRIVERS_PATH"); } Index: xsrc/external/mit/MesaLib/dist/src/gbm/backends/dri/gbm_dri.c diff -u xsrc/external/mit/MesaLib/dist/src/gbm/backends/dri/gbm_dri.c:1.4 xsrc/external/mit/MesaLib/dist/src/gbm/backends/dri/gbm_dri.c:1.4.2.1 --- xsrc/external/mit/MesaLib/dist/src/gbm/backends/dri/gbm_dri.c:1.4 Sun Apr 7 19:35:43 2019 +++ xsrc/external/mit/MesaLib/dist/src/gbm/backends/dri/gbm_dri.c Thu Dec 12 12:26:20 2019 @@ -310,7 +310,7 @@ dri_open_driver(struct gbm_dri_device *d search_paths = NULL; /* don't allow setuid apps to use LIBGL_DRIVERS_PATH or GBM_DRIVERS_PATH */ - if (geteuid() == getuid()) { + if (!issetugid()) { /* Read GBM_DRIVERS_PATH first for compatibility, but LIBGL_DRIVERS_PATH * is recommended over GBM_DRIVERS_PATH. */ Index: xsrc/external/mit/MesaLib/dist/src/glx/dri_common.c diff -u xsrc/external/mit/MesaLib/dist/src/glx/dri_common.c:1.3 xsrc/external/mit/MesaLib/dist/src/glx/dri_common.c:1.3.2.1 --- xsrc/external/mit/MesaLib/dist/src/glx/dri_common.c:1.3 Sun Mar 10 04:15:51 2019 +++ xsrc/external/mit/MesaLib/dist/src/glx/dri_common.c Thu Dec 12 12:26:20 2019 @@ -106,7 +106,7 @@ driOpenDriver(const char *driverName) glhandle = dlopen(GL_LIB_NAME, RTLD_NOW | RTLD_GLOBAL); libPaths = NULL; - if (geteuid() == getuid()) { + if (!issetugid()) { /* don't allow setuid apps to use LIBGL_DRIVERS_PATH */ libPaths = getenv("LIBGL_DRIVERS_PATH"); if (!libPaths)
CVS commit: [netbsd-9] xsrc/external/mit/MesaLib/dist/src
Module Name:xsrc Committed By: martin Date: Thu Dec 12 11:36:34 UTC 2019 Modified Files: xsrc/external/mit/MesaLib/dist/src/intel/dev [netbsd-9]: gen_device_info.c xsrc/external/mit/MesaLib/dist/src/loader [netbsd-9]: loader.c xsrc/external/mit/MesaLib/dist/src/mesa/main [netbsd-9]: context.c xsrc/external/mit/MesaLib/dist/src/util [netbsd-9]: disk_cache.c Log Message: Pull up following revision(s) (requested by maya in ticket #526): external/mit/MesaLib/dist/src/intel/dev/gen_device_info.c: revision 1.5 external/mit/MesaLib/dist/src/loader/loader.c: revision 1.2 external/mit/MesaLib/dist/src/mesa/main/context.c: revision 1.8 external/mit/MesaLib/dist/src/util/disk_cache.c: revision 1.4 (all via patch) Wherever we test for setuid, also test for setgid. Inspired by a diff to openbsd but with a few more instances. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.3.2.1 \ xsrc/external/mit/MesaLib/dist/src/intel/dev/gen_device_info.c cvs rdiff -u -r1.1.1.2 -r1.1.1.2.2.1 \ xsrc/external/mit/MesaLib/dist/src/loader/loader.c cvs rdiff -u -r1.6 -r1.6.2.1 \ xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c cvs rdiff -u -r1.2 -r1.2.2.1 \ xsrc/external/mit/MesaLib/dist/src/util/disk_cache.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: xsrc/external/mit/MesaLib/dist/src/intel/dev/gen_device_info.c diff -u xsrc/external/mit/MesaLib/dist/src/intel/dev/gen_device_info.c:1.3 xsrc/external/mit/MesaLib/dist/src/intel/dev/gen_device_info.c:1.3.2.1 --- xsrc/external/mit/MesaLib/dist/src/intel/dev/gen_device_info.c:1.3 Sat Jun 1 07:53:00 2019 +++ xsrc/external/mit/MesaLib/dist/src/intel/dev/gen_device_info.c Thu Dec 12 11:36:34 2019 @@ -82,7 +82,7 @@ gen_device_name_to_pci_device_id(const c int gen_get_pci_device_id_override(void) { - if (geteuid() == getuid()) { + if (!issetugid()) { const char *devid_override = getenv("INTEL_DEVID_OVERRIDE"); if (devid_override) { const int id = gen_device_name_to_pci_device_id(devid_override); Index: xsrc/external/mit/MesaLib/dist/src/loader/loader.c diff -u xsrc/external/mit/MesaLib/dist/src/loader/loader.c:1.1.1.2 xsrc/external/mit/MesaLib/dist/src/loader/loader.c:1.1.1.2.2.1 --- xsrc/external/mit/MesaLib/dist/src/loader/loader.c:1.1.1.2 Sun Mar 10 03:42:46 2019 +++ xsrc/external/mit/MesaLib/dist/src/loader/loader.c Thu Dec 12 11:36:34 2019 @@ -441,7 +441,7 @@ loader_get_driver_for_fd(int fd) * user's problem, but this allows vc4 simulator to run on an i965 host, * and may be useful for some touch testing of i915 on an i965 host. */ - if (geteuid() == getuid()) { + if (!issetugid()) { driver = getenv("MESA_LOADER_DRIVER_OVERRIDE"); if (driver) return strdup(driver); Index: xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c diff -u xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c:1.6 xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c:1.6.2.1 --- xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c:1.6 Sun Mar 10 04:15:55 2019 +++ xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c Thu Dec 12 11:36:34 2019 @@ -1223,7 +1223,7 @@ _mesa_initialize_context(struct gl_conte */ if (env_var_as_boolean("MESA_NO_ERROR", false)) { #if !defined(_WIN32) - if (geteuid() == getuid()) + if (!issetugid()) #endif ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR; } Index: xsrc/external/mit/MesaLib/dist/src/util/disk_cache.c diff -u xsrc/external/mit/MesaLib/dist/src/util/disk_cache.c:1.2 xsrc/external/mit/MesaLib/dist/src/util/disk_cache.c:1.2.2.1 --- xsrc/external/mit/MesaLib/dist/src/util/disk_cache.c:1.2 Sun Mar 10 04:15:57 2019 +++ xsrc/external/mit/MesaLib/dist/src/util/disk_cache.c Thu Dec 12 11:36:34 2019 @@ -212,7 +212,7 @@ disk_cache_create(const char *gpu_name, size_t cv_size = sizeof(cache_version); /* If running as a users other than the real user disable cache */ - if (geteuid() != getuid()) + if (issetugid()) return NULL; /* A ralloc context for transient data during this invocation. */
CVS commit: [netbsd-9] xsrc/external/mit/MesaLib/dist/src
Module Name:xsrc Committed By: martin Date: Sun Dec 8 15:00:33 UTC 2019 Modified Files: xsrc/external/mit/MesaLib/dist/src/gallium/winsys/sw/dri [netbsd-9]: dri_sw_winsys.c xsrc/external/mit/MesaLib/dist/src/gallium/winsys/sw/xlib [netbsd-9]: xlib_sw_winsys.c xsrc/external/mit/MesaLib/dist/src/mesa/drivers/x11 [netbsd-9]: xm_buffer.c Log Message: Pull up following revision(s) (requested by maya in ticket #518): external/mit/MesaLib/dist/src/gallium/winsys/sw/dri/dri_sw_winsys.c: revision 1.2 external/mit/MesaLib/dist/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c: revision 1.2 external/mit/MesaLib/dist/src/mesa/drivers/x11/xm_buffer.c: revision 1.2 >From 02c3dad0f3b4d26e0faa5cc51d06bc50d693dcdc Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Wed, 9 Oct 2019 12:05:16 -0600 Subject: [PATCH] Call shmget() with permission 0600 instead of 0777 A security advisory (TALOS-2019-0857/CVE-2019-5068) found that creating shared memory regions with permission mode 0777 could allow any user to access that memory. Several Mesa drivers use shared- memory XImages to implement back buffers for improved performance. This path changes the shmget() calls to use 0600 (user r/w). Tested with legacy Xlib driver and llvmpipe. Cc: mesa-sta...@lists.freedesktop.org Reviewed-by: Kristian H. Kristensen To generate a diff of this commit: cvs rdiff -u -r1.1.1.3 -r1.1.1.3.2.1 \ xsrc/external/mit/MesaLib/dist/src/gallium/winsys/sw/dri/dri_sw_winsys.c cvs rdiff -u -r1.1.1.3 -r1.1.1.3.2.1 \ xsrc/external/mit/MesaLib/dist/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c cvs rdiff -u -r1.1.1.7 -r1.1.1.7.2.1 \ xsrc/external/mit/MesaLib/dist/src/mesa/drivers/x11/xm_buffer.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: xsrc/external/mit/MesaLib/dist/src/gallium/winsys/sw/dri/dri_sw_winsys.c diff -u xsrc/external/mit/MesaLib/dist/src/gallium/winsys/sw/dri/dri_sw_winsys.c:1.1.1.3 xsrc/external/mit/MesaLib/dist/src/gallium/winsys/sw/dri/dri_sw_winsys.c:1.1.1.3.2.1 --- xsrc/external/mit/MesaLib/dist/src/gallium/winsys/sw/dri/dri_sw_winsys.c:1.1.1.3 Sun Mar 10 03:42:41 2019 +++ xsrc/external/mit/MesaLib/dist/src/gallium/winsys/sw/dri/dri_sw_winsys.c Sun Dec 8 15:00:33 2019 @@ -93,7 +93,8 @@ alloc_shm(struct dri_sw_displaytarget *d { char *addr; - dri_sw_dt->shmid = shmget(IPC_PRIVATE, size, IPC_CREAT|0777); + /* 0600 = user read+write */ + dri_sw_dt->shmid = shmget(IPC_PRIVATE, size, IPC_CREAT | 0600); if (dri_sw_dt->shmid < 0) return NULL; Index: xsrc/external/mit/MesaLib/dist/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c diff -u xsrc/external/mit/MesaLib/dist/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c:1.1.1.3 xsrc/external/mit/MesaLib/dist/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c:1.1.1.3.2.1 --- xsrc/external/mit/MesaLib/dist/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c:1.1.1.3 Sun Mar 10 03:42:41 2019 +++ xsrc/external/mit/MesaLib/dist/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c Sun Dec 8 15:00:33 2019 @@ -126,7 +126,8 @@ alloc_shm(struct xlib_displaytarget *buf shminfo->shmid = -1; shminfo->shmaddr = (char *) -1; - shminfo->shmid = shmget(IPC_PRIVATE, size, IPC_CREAT|0777); + /* 0600 = user read+write */ + shminfo->shmid = shmget(IPC_PRIVATE, size, IPC_CREAT | 0600); if (shminfo->shmid < 0) { return NULL; } Index: xsrc/external/mit/MesaLib/dist/src/mesa/drivers/x11/xm_buffer.c diff -u xsrc/external/mit/MesaLib/dist/src/mesa/drivers/x11/xm_buffer.c:1.1.1.7 xsrc/external/mit/MesaLib/dist/src/mesa/drivers/x11/xm_buffer.c:1.1.1.7.2.1 --- xsrc/external/mit/MesaLib/dist/src/mesa/drivers/x11/xm_buffer.c:1.1.1.7 Sun Mar 10 03:42:37 2019 +++ xsrc/external/mit/MesaLib/dist/src/mesa/drivers/x11/xm_buffer.c Sun Dec 8 15:00:33 2019 @@ -89,8 +89,9 @@ alloc_back_shm_ximage(XMesaBuffer b, GLu return GL_FALSE; } + /* 0600 = user read+write */ b->shminfo.shmid = shmget(IPC_PRIVATE, b->backxrb->ximage->bytes_per_line - * b->backxrb->ximage->height, IPC_CREAT|0777); + * b->backxrb->ximage->height, IPC_CREAT | 0600); if (b->shminfo.shmid < 0) { _mesa_warning(NULL, "shmget failed while allocating back buffer.\n"); XDestroyImage(b->backxrb->ximage);