qemu-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-commits] [qemu/qemu] 63bab2: char: don't silently skip tn3270 prot


From: GitHub
Subject: [Qemu-commits] [qemu/qemu] 63bab2: char: don't silently skip tn3270 protocol init whe...
Date: Fri, 16 Mar 2018 02:46:16 -0700

  Branch: refs/heads/master
  Home:   https://github.com/qemu/qemu
  Commit: 63bab2b69688dee0ddadff7449143830e59567cd
      
https://github.com/qemu/qemu/commit/63bab2b69688dee0ddadff7449143830e59567cd
  Author: Daniel P. Berrange <address@hidden>
  Date:   2018-03-13 (Tue, 13 Mar 2018)

  Changed paths:
    M chardev/char-socket.c

  Log Message:
  -----------
  char: don't silently skip tn3270 protocol init when TLS is enabled

Even if common tn3270 implementations do not support TLS, it is trivial to
have them proxied over a proxy like stunnel which adds TLS at the sockets
layer. We should thus not silently skip tn3270 protocol initialization
when TLS is enabled.

Reviewed-by: Eric Blake <address@hidden>
Acked-by: Cornelia Huck <address@hidden>
Signed-off-by: Daniel P. Berrange <address@hidden>


  Commit: 473a2a331ee382703f7ca0067ba2545350cfa06c
      
https://github.com/qemu/qemu/commit/473a2a331ee382703f7ca0067ba2545350cfa06c
  Author: Daniel P. Berrange <address@hidden>
  Date:   2018-03-13 (Tue, 13 Mar 2018)

  Changed paths:
    M include/qemu/cutils.h
    M tests/test-cutils.c
    M util/cutils.c

  Log Message:
  -----------
  cutils: add qemu_strtoi & qemu_strtoui parsers for int/unsigned int types

There are qemu_strtoNN functions for various sized integers. This adds two
more for plain int & unsigned int types, with suitable range checking.

Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Marc-André Lureau <address@hidden>
Signed-off-by: Daniel P. Berrange <address@hidden>


  Commit: 9b589ffb1237ec54f8341d8a80ba77f31d428842
      
https://github.com/qemu/qemu/commit/9b589ffb1237ec54f8341d8a80ba77f31d428842
  Author: Daniel P. Berrange <address@hidden>
  Date:   2018-03-13 (Tue, 13 Mar 2018)

  Changed paths:
    M tests/Makefile.include
    A tests/socket-helpers.c
    A tests/socket-helpers.h
    M tests/test-io-channel-socket.c

  Log Message:
  -----------
  sockets: pull code for testing IP availability out of specific test

The test-io-channel-socket.c file has some useful helper functions for
checking if a specific IP protocol is available. Other tests need to
perform similar kinds of checks to avoid running tests that will fail
due to missing IP protocols.

Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Marc-André Lureau <address@hidden>
Signed-off-by: Daniel P. Berrange <address@hidden>


  Commit: abd983c0e0beb4b15326e51a837e1b5177df0e08
      
https://github.com/qemu/qemu/commit/abd983c0e0beb4b15326e51a837e1b5177df0e08
  Author: Daniel P. Berrange <address@hidden>
  Date:   2018-03-13 (Tue, 13 Mar 2018)

  Changed paths:
    M tests/socket-helpers.c
    M tests/socket-helpers.h

  Log Message:
  -----------
  sockets: strengthen test suite IP protocol availability checks

Instead of just checking whether it is possible to bind() on a socket, also
check that we can successfully connect() to the socket we bound to. This
more closely replicates the level of functionality that tests will actually
use.

Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Marc-André Lureau <address@hidden>
Signed-off-by: Daniel P. Berrange <address@hidden>


  Commit: 58dc31f1a7dc6cd0f21bd51a34011ba366d36e53
      
https://github.com/qemu/qemu/commit/58dc31f1a7dc6cd0f21bd51a34011ba366d36e53
  Author: Daniel P. Berrange <address@hidden>
  Date:   2018-03-13 (Tue, 13 Mar 2018)

  Changed paths:
    M include/qemu/sockets.h
    M io/channel-util.c
    M tests/.gitignore
    M tests/Makefile.include
    A tests/test-util-sockets.c
    M util/qemu-sockets.c

  Log Message:
  -----------
  sockets: move fd_is_socket() into common sockets code

The fd_is_socket() helper method is useful in a few places, so put it in
the common sockets code. Make the code more compact while moving it.

Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Marc-André Lureau <address@hidden>
Signed-off-by: Daniel P. Berrange <address@hidden>


  Commit: 30bdb3c56ddd911ab2b1629faa4ce6e883b80e2a
      
https://github.com/qemu/qemu/commit/30bdb3c56ddd911ab2b1629faa4ce6e883b80e2a
  Author: Daniel P. Berrange <address@hidden>
  Date:   2018-03-13 (Tue, 13 Mar 2018)

  Changed paths:
    M tests/test-util-sockets.c
    M util/qemu-sockets.c

  Log Message:
  -----------
  sockets: check that the named file descriptor is a socket

The SocketAddress struct has an "fd" type, which references the name of a
file descriptor passed over the monitor using the "getfd" command. We
currently blindly assume the FD is a socket, which can lead to hard to
diagnose errors later. This adds an explicit check that the FD is actually
a socket to improve the error diagnosis.

Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Marc-André Lureau <address@hidden>
Signed-off-by: Daniel P. Berrange <address@hidden>


  Commit: 1723d6b1cfe6572881f578bce3aa25185b81b148
      
https://github.com/qemu/qemu/commit/1723d6b1cfe6572881f578bce3aa25185b81b148
  Author: Daniel P. Berrange <address@hidden>
  Date:   2018-03-13 (Tue, 13 Mar 2018)

  Changed paths:
    M qapi/sockets.json
    M tests/test-util-sockets.c
    M util/qemu-sockets.c

  Log Message:
  -----------
  sockets: allow SocketAddress 'fd' to reference numeric file descriptors

The SocketAddress 'fd' kind accepts the name of a file descriptor passed
to the monitor with the 'getfd' command. This makes it impossible to use
the 'fd' kind in cases where a monitor is not available. This can apply in
handling command line argv at startup, or simply if internal code wants to
use SocketAddress and pass a numeric FD it has acquired from elsewhere.

Fortunately the 'getfd' command mandated that the FD names must not start
with a leading digit. We can thus safely extend semantics of the
SocketAddress 'fd' kind, to allow a purely numeric name to reference an
file descriptor that QEMU already has open. There will be restrictions on
when each kind can be used.

In codepaths where we are handling a monitor command (ie cur_mon != NULL),
we will only support use of named file descriptors as before. Use of FD
numbers is still not permitted for monitor commands.

In codepaths where we are not handling a monitor command (ie cur_mon ==
NULL), we will not support named file descriptors. Instead we can reference
FD numers explicitly. This allows the app spawning QEMU to intentionally
"leak" a pre-opened socket to QEMU and reference that in a SocketAddress
definition, or for code inside QEMU to pass pre-opened FDs around.

Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Marc-André Lureau <address@hidden>
Signed-off-by: Daniel P. Berrange <address@hidden>


  Commit: 9bb4060c998e56976b36ee628ce7e0ecbd8ffb49
      
https://github.com/qemu/qemu/commit/9bb4060c998e56976b36ee628ce7e0ecbd8ffb49
  Author: Daniel P. Berrange <address@hidden>
  Date:   2018-03-13 (Tue, 13 Mar 2018)

  Changed paths:
    M chardev/char-socket.c

  Log Message:
  -----------
  char: refactor parsing of socket address information

To prepare for handling more address types, refactor the parsing of
socket address information to make it more robust and extensible.

Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Marc-André Lureau <address@hidden>
Signed-off-by: Daniel P. Berrange <address@hidden>


  Commit: 0935700f8544033ebbd41e1f13cd528f8a58d24d
      
https://github.com/qemu/qemu/commit/0935700f8544033ebbd41e1f13cd528f8a58d24d
  Author: Daniel P. Berrange <address@hidden>
  Date:   2018-03-13 (Tue, 13 Mar 2018)

  Changed paths:
    M chardev/char-socket.c
    M chardev/char.c
    M tests/test-char.c

  Log Message:
  -----------
  char: allow passing pre-opened socket file descriptor at startup

When starting QEMU management apps will usually setup a monitor socket, and
then open it immediately after startup. If not using QEMU's own -daemonize
arg, this process can be troublesome to handle correctly. The mgmt app will
need to repeatedly call connect() until it succeeds, because it does not
know when QEMU has created the listener socket. If can't retry connect()
forever though, because an error might have caused QEMU to exit before it
even creates the monitor.

The obvious way to fix this kind of problem is to just pass in a pre-opened
socket file descriptor for the QEMU monitor to listen on. The management
app can now immediately call connect() just once. If connect() fails it
knows that QEMU has exited with an error.

The SocketAddress(Legacy) structs allow for FD passing via the monitor, and
now via inherited file descriptors from the process that spawned QEMU. The
final missing piece is adding a 'fd' parameter in the socket chardev
options.

This allows both HMP usage, pass any FD number with SCM_RIGHTS, then
running HMP commands:

   getfd myfd
   chardev-add socket,fd=myfd

Note that numeric FDs cannot be referenced directly in HMP, only named FDs.

And also CLI usage, by leak FD 3 from parent by clearing O_CLOEXEC, then
spawning QEMU with

  -chardev socket,fd=3,id=mon
  -mon chardev=mon,mode=control

Note that named FDs cannot be referenced in CLI args, only numeric FDs.

We do not wire this up in the legacy chardev syntax, so you cannot use FD
passing with '-qmp', you must use the modern '-mon' + '-chardev' pair.

When passing pre-opened FDs there is a restriction on use of TLS encryption.
It can be used on a server socket chardev, but cannot be used for a client
socket chardev. This is because when validating a server's certificate, the
client needs to have a hostname available to match against the certificate
identity.

An illustrative example of usage is:

  #!/usr/bin/perl

  use IO::Socket::UNIX;
  use Fcntl;

  unlink "/tmp/qmp";
  my $srv = IO::Socket::UNIX->new(
    Type => SOCK_STREAM(),
    Local => "/tmp/qmp",
    Listen => 1,
  );

  my $flags = fcntl $srv, F_GETFD, 0;
  fcntl $srv, F_SETFD, $flags & ~FD_CLOEXEC;

  my $fd = $srv->fileno();

  exec "qemu-system-x86_64", \
      "-chardev", "socket,fd=$fd,server,nowait,id=mon", \
      "-mon", "chardev=mon,mode=control";

Reviewed-by: Eric Blake <address@hidden>
Signed-off-by: Daniel P. Berrange <address@hidden>


  Commit: 58888f8cdd198affa454f9bf664a076f5f63a6a6
      
https://github.com/qemu/qemu/commit/58888f8cdd198affa454f9bf664a076f5f63a6a6
  Author: Peter Maydell <address@hidden>
  Date:   2018-03-15 (Thu, 15 Mar 2018)

  Changed paths:
    M chardev/char-socket.c
    M chardev/char.c
    M include/qemu/cutils.h
    M include/qemu/sockets.h
    M io/channel-util.c
    M qapi/sockets.json
    M tests/.gitignore
    M tests/Makefile.include
    A tests/socket-helpers.c
    A tests/socket-helpers.h
    M tests/test-char.c
    M tests/test-cutils.c
    M tests/test-io-channel-socket.c
    A tests/test-util-sockets.c
    M util/cutils.c
    M util/qemu-sockets.c

  Log Message:
  -----------
  Merge remote-tracking branch 'remotes/berrange/tags/socket-next-pull-request' 
into staging

# gpg: Signature made Tue 13 Mar 2018 18:12:14 GMT
# gpg:                using RSA key BE86EBB415104FDF
# gpg: Good signature from "Daniel P. Berrange <address@hidden>"
# gpg:                 aka "Daniel P. Berrange <address@hidden>"
# Primary key fingerprint: DAF3 A6FD B26B 6291 2D0E  8E3F BE86 EBB4 1510 4FDF

* remotes/berrange/tags/socket-next-pull-request:
  char: allow passing pre-opened socket file descriptor at startup
  char: refactor parsing of socket address information
  sockets: allow SocketAddress 'fd' to reference numeric file descriptors
  sockets: check that the named file descriptor is a socket
  sockets: move fd_is_socket() into common sockets code
  sockets: strengthen test suite IP protocol availability checks
  sockets: pull code for testing IP availability out of specific test
  cutils: add qemu_strtoi & qemu_strtoui parsers for int/unsigned int types
  char: don't silently skip tn3270 protocol init when TLS is enabled

Signed-off-by: Peter Maydell <address@hidden>


Compare: https://github.com/qemu/qemu/compare/55901900ec69...58888f8cdd19

reply via email to

[Prev in Thread] Current Thread [Next in Thread]