Skip to content
Snippets Groups Projects
  1. Jul 14, 2017
  2. Jul 13, 2017
  3. May 09, 2017
  4. Apr 24, 2017
  5. Apr 04, 2017
  6. Apr 03, 2017
  7. Feb 28, 2017
    • Daniel P. Berrangé's avatar
      io: fully parse & validate HTTP headers for websocket protocol handshake · 07e95cd5
      Daniel P. Berrangé authored
      
      The current websockets protocol handshake code is very relaxed, just
      doing crude string searching across the HTTP header data. This causes
      it to both reject valid connections and fail to reject invalid
      connections. For example, according to the RFC 6455 it:
      
       - MUST reject any method other than "GET"
       - MUST reject any HTTP version less than "HTTP/1.1"
       - MUST reject Connection header without "Upgrade" listed
       - MUST reject Upgrade header which is not 'websocket'
       - MUST reject missing Host header
       - MUST treat HTTP header names as case insensitive
      
      To do all this validation correctly requires that we fully parse the
      HTTP headers, populating a data structure containing the header
      fields.
      
      After this change, we also reject any path other than '/'
      
      Signed-off-by: default avatarDaniel P. Berrange <berrange@redhat.com>
      07e95cd5
    • Daniel P. Berrangé's avatar
      io: fix decoding when multiple websockets frames arrive at once · cd892a2e
      Daniel P. Berrangé authored
      
      The qio_channel_websock_read_wire() method will read upto 4096
      bytes off the socket and then decode the websockets header and
      payload. The code was only decoding a single websockets frame,
      even if the buffered data contained multiple frames. This meant
      that decoding of subsequent frames was delayed until further
      input arrived on the socket. This backlog of delayed frames
      gets worse & worse over time.
      
      Symptom was that when connecting to the VNC server via the
      built-in websockets server, mouse/keyboard interaction would
      start out fine, but slowly get more & more delayed until it
      was unusable.
      
      Signed-off-by: default avatarDaniel P. Berrange <berrange@redhat.com>
      cd892a2e
  8. Feb 21, 2017
  9. Jan 26, 2017
  10. Jan 23, 2017
  11. Oct 27, 2016
  12. Oct 26, 2016
  13. Sep 28, 2016
  14. Aug 12, 2016
  15. Aug 03, 2016
  16. Jul 13, 2016
    • Paolo Bonzini's avatar
      coroutine: move entry argument to qemu_coroutine_create · 0b8b8753
      Paolo Bonzini authored
      
      In practice the entry argument is always known at creation time, and
      it is confusing that sometimes qemu_coroutine_enter is used with a
      non-NULL argument to re-enter a coroutine (this happens in
      block/sheepdog.c and tests/test-coroutine.c).  So pass the opaque value
      at creation time, for consistency with e.g. aio_bh_new.
      
      Mostly done with the following semantic patch:
      
      @ entry1 @
      expression entry, arg, co;
      @@
      - co = qemu_coroutine_create(entry);
      + co = qemu_coroutine_create(entry, arg);
        ...
      - qemu_coroutine_enter(co, arg);
      + qemu_coroutine_enter(co);
      
      @ entry2 @
      expression entry, arg;
      identifier co;
      @@
      - Coroutine *co = qemu_coroutine_create(entry);
      + Coroutine *co = qemu_coroutine_create(entry, arg);
        ...
      - qemu_coroutine_enter(co, arg);
      + qemu_coroutine_enter(co);
      
      @ entry3 @
      expression entry, arg;
      @@
      - qemu_coroutine_enter(qemu_coroutine_create(entry), arg);
      + qemu_coroutine_enter(qemu_coroutine_create(entry, arg));
      
      @ reentry @
      expression co;
      @@
      - qemu_coroutine_enter(co, NULL);
      + qemu_coroutine_enter(co);
      
      except for the aforementioned few places where the semantic patch
      stumbled (as expected) and for test_co_queue, which would otherwise
      produce an uninitialized variable warning.
      
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Reviewed-by: default avatarFam Zheng <famz@redhat.com>
      Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
      0b8b8753
  17. Jul 06, 2016
  18. Jun 29, 2016
  19. Jun 20, 2016
  20. May 26, 2016
  21. May 19, 2016
  22. Mar 22, 2016
    • Markus Armbruster's avatar
      include/qemu/osdep.h: Don't include qapi/error.h · da34e65c
      Markus Armbruster authored
      
      Commit 57cb38b3 included qapi/error.h into qemu/osdep.h to get the
      Error typedef.  Since then, we've moved to include qemu/osdep.h
      everywhere.  Its file comment explains: "To avoid getting into
      possible circular include dependencies, this file should not include
      any other QEMU headers, with the exceptions of config-host.h,
      compiler.h, os-posix.h and os-win32.h, all of which are doing a
      similar job to this file and are under similar constraints."
      qapi/error.h doesn't do a similar job, and it doesn't adhere to
      similar constraints: it includes qapi-types.h.  That's in excess of
      100KiB of crap most .c files don't actually need.
      
      Add the typedef to qemu/typedefs.h, and include that instead of
      qapi/error.h.  Include qapi/error.h in .c files that need it and don't
      get it now.  Include qapi-types.h in qom/object.h for uint16List.
      
      Update scripts/clean-includes accordingly.  Update it further to match
      reality: replace config.h by config-target.h, add sysemu/os-posix.h,
      sysemu/os-win32.h.  Update the list of includes in the qemu/osdep.h
      comment quoted above similarly.
      
      This reduces the number of objects depending on qapi/error.h from "all
      of them" to less than a third.  Unfortunately, the number depending on
      qapi-types.h shrinks only a little.  More work is needed for that one.
      
      Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
      [Fix compilation without the spice devel packages. - Paolo]
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      da34e65c
  23. Mar 10, 2016
Loading