qemu/ui
Michal Privoznik 08d9864fa4 console: Avoid segfault in screendump
After f771c5440e it is possible to select device and
head which to take screendump from. And even though we check if
provided head number falls within range, it may still happen that
the console has no surface yet leading to SIGSEGV:

  qemu.git $ ./x86_64-softmmu/qemu-system-x86_64 \
    -qmp stdio \
    -device virtio-vga,id=video0,max_outputs=4

  {"execute":"qmp_capabilities"}
  {"execute":"screendump", "arguments":{"filename":"/tmp/screen.ppm", "device":"video0", "head":1}}
  Segmentation fault

 #0  0x00005628249dda88 in ppm_save (filename=0x56282826cbc0 "/tmp/screen.ppm", ds=0x0, errp=0x7fff52a6fae0) at ui/console.c:304
 #1  0x00005628249ddd9b in qmp_screendump (filename=0x56282826cbc0 "/tmp/screen.ppm", has_device=true, device=0x5628276902d0 "video0", has_head=true, head=1, errp=0x7fff52a6fae0) at ui/console.c:375
 #2  0x00005628247740df in qmp_marshal_screendump (args=0x562828265e00, ret=0x7fff52a6fb68, errp=0x7fff52a6fb60) at qapi/qapi-commands-ui.c:110

Here, @ds from frame #0 (or @surface from frame #1) is
dereferenced at the very beginning of ppm_save(). And because
it's NULL crash happens.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-id: cb05bb1909daa6ba62145c0194aafa05a14ed3d1.1526569138.git.mprivozn@redhat.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2018-05-18 09:01:14 +02:00
..
keycodemapdb@6b3d716e2b ui: update keycodemapdb to get py3 fixes 2018-02-05 19:53:55 -02:00
shader opengl: add flipping vertex shader 2017-10-17 10:25:42 +02:00
cocoa.m Polish the version strings containing the package version 2018-03-12 16:12:47 +01:00
console-gl.c ui: use QEMU_IS_ALIGNED macro 2017-11-10 14:27:29 +01:00
console.c console: Avoid segfault in screendump 2018-05-18 09:01:14 +02:00
curses_keys.h
curses.c curses: switch over to new display registry 2018-03-05 08:44:11 +01:00
cursor_hidden.xpm
cursor_left_ptr.xpm
cursor.c Replace all occurances of __FUNCTION__ with __func__ 2018-01-22 09:46:18 +01:00
egl-context.c
egl-headless.c egl-headless: switch over to new display registry 2018-03-05 08:44:11 +01:00
egl-helpers.c egl-helpers: add alpha channel to texture format 2018-02-22 10:35:09 +01:00
gtk-egl.c ui/gtk-egl: add cursor_dmabuf support 2018-03-12 09:00:34 +01:00
gtk-gl-area.c ui: opengl updates for dma-buf support. 2017-10-19 12:09:53 +01:00
gtk.c gtk: disable the F10 menubar key 2018-05-15 10:47:01 +02:00
input-keymap.c ui: fix alphabetical ordering of keymaps 2018-01-29 09:35:43 +01:00
input-legacy.c Include less of the generated modular QAPI headers 2018-03-02 13:45:50 -06:00
input-linux.c
input.c Include less of the generated modular QAPI headers 2018-03-02 13:45:50 -06:00
keymaps.c keymap: consider modifier state when picking a mapping 2018-02-22 10:35:32 +01:00
keymaps.h keymap: consider modifier state when picking a mapping 2018-02-22 10:35:32 +01:00
Makefile.objs ui/opengl: Makefile cleanup 2018-03-12 09:00:34 +01:00
qemu-pixman.c ui/pixman: add qemu_drm_format_to_pixman() 2018-03-13 11:17:28 -06:00
qemu-x509.h
sdl2-2d.c sdl: restore optimized redraw 2018-02-16 12:25:35 +01:00
sdl2-gl.c sdl: Allow OpenGL ES context creation 2018-04-27 11:23:01 +02:00
sdl2-input.c sdl2: drop dead code 2018-04-09 10:40:47 +02:00
sdl2.c sdl2: move opts assignment into loop 2018-05-15 10:22:12 +02:00
sdl_keysym.h
sdl_zoom_template.h maint: Fix macros with broken 'do/while(0); ' usage 2018-01-16 14:54:52 +01:00
sdl_zoom.c
sdl_zoom.h
sdl.c sdl: switch over to new display registry 2018-03-05 08:44:11 +01:00
shader.c opengl: add flipping vertex shader 2017-10-17 10:25:42 +02:00
spice-core.c Include less of the generated modular QAPI headers 2018-03-02 13:45:50 -06:00
spice-display.c spice: add cursor_dmabuf support 2018-03-12 09:01:56 +01:00
spice-input.c ui: correctly detect spice PAUSE scancode sequence 2017-07-28 12:35:40 +02:00
trace-events console: minimal hotplug suport 2018-03-13 11:17:29 -06:00
vgafont.h
vnc_keysym.h
vnc-auth-sasl.c ui: extend VNC trottling tracing to SASL codepaths 2018-02-16 12:33:02 +01:00
vnc-auth-sasl.h ui: mix misleading comments & return types of VNC I/O helper methods 2018-01-12 13:48:54 +01:00
vnc-auth-vencrypt.c qio: non-default context for TLS handshake 2018-03-06 10:19:07 +00:00
vnc-auth-vencrypt.h
vnc-enc-hextile-template.h
vnc-enc-hextile.c
vnc-enc-tight.c vnc: use DIV_ROUND_UP 2017-08-31 12:29:07 +02:00
vnc-enc-tight.h
vnc-enc-zlib.c
vnc-enc-zrle.c rename included C files to foo.inc.c, remove osdep.h 2018-05-11 14:33:40 +02:00
vnc-enc-zrle.h
vnc-enc-zrle.inc.c rename included C files to foo.inc.c, remove osdep.h 2018-05-11 14:33:40 +02:00
vnc-enc-zywrle-template.c
vnc-enc-zywrle.h
vnc-jobs.c vnc: add magic cookie to VncState 2018-05-15 10:36:55 +02:00
vnc-jobs.h
vnc-palette.c
vnc-palette.h Include qapi/qmp/qlist.h exactly where needed 2018-02-09 13:52:15 +01:00
vnc-stubs.c vnc: add qapi/error.h include to stubs 2018-02-16 12:23:21 +01:00
vnc-ws.c qio: non-default context for TLS handshake 2018-03-06 10:19:07 +00:00
vnc-ws.h
vnc.c vnc: add magic cookie to VncState 2018-05-15 10:36:55 +02:00
vnc.h vnc: add magic cookie to VncState 2018-05-15 10:36:55 +02:00
x_keymap.c ui: fix keymap detection under Xwayland 2018-04-10 11:21:54 +02:00
x_keymap.h ui: convert GTK and SDL1 frontends to keycodemapdb 2018-01-25 15:02:00 +01:00