• M
    sockets: Fix socket_address_to_string() hostname truncation · 44fdc764
    Markus Armbruster 提交于
    We first snprintf() to a fixed buffer, then g_strdup() the result
    *boggle*.
    
    Worse, the size of the fixed buffer INET6_ADDRSTRLEN + 5 + 4 is bogus:
    the 4 correctly accounts for '[', ']', ':' and '\0', but
    INET6_ADDRSTRLEN is not a suitable limit for inet->host, and 5 is not
    one for inet->port!  They are for host and port in *numeric* form
    (exploiting that INET6_ADDRSTRLEN > INET_ADDRSTRLEN), but inet->host
    can also be a hostname, and inet->port can be a service name, to be
    resolved with getaddrinfo().
    
    Fortunately, the only user so far is the "socket" network backend's
    net_socket_connected(), which uses it to initialize a NetSocketState's
    info_str[].  info_str[] has considerable more space: 256 instead of
    55.  So the bug's impact appears to be limited to truncated "info
    networks" with the "socket" network backend.
    
    The fix is obvious: use g_strdup_printf().
    Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
    Message-Id: <1490268208-23368-1-git-send-email-armbru@redhat.com>
    Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
    44fdc764
qemu-sockets.c 36.0 KB