From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1OAYXZ-0001tH-Hm for qemu-devel@nongnu.org; Fri, 07 May 2010 21:09:13 -0400 Received: from [140.186.70.92] (port=40665 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OAYXY-0001sP-6m for qemu-devel@nongnu.org; Fri, 07 May 2010 21:09:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OAYXV-0000i0-Vy for qemu-devel@nongnu.org; Fri, 07 May 2010 21:09:12 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42214) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OAYXV-0000hw-Oo for qemu-devel@nongnu.org; Fri, 07 May 2010 21:09:09 -0400 Date: Fri, 7 May 2010 22:09:02 -0300 From: Luiz Capitulino Message-ID: <20100507220902.24ea2e7e@redhat.com> In-Reply-To: References: Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Re: Bug in net/socket.c: info_str is overwritten List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Miguel Di Ciurcio Filho Cc: kwolf@redhat.com, markmc@redhat.com, qemu-devel@nongnu.org On Thu, 6 May 2010 10:42:10 -0300 Miguel Di Ciurcio Filho wrote: > Hi there, > > I'm working on the conversion of the 'info network' command do QMP, > and I think I've found some problems. > > Running qemu like this: qemu -net socket,listen=:3333 > > In net/socket.c, the function net_socket_listen_init() [1] is called > and a listening socket is created. There is nothing registering this, > so when using 'info network' as is, no information about this > listening socket is shown. Right, not sure how important this info is but I'd expect it to be shown. > When a connection is accepted, the handler net_socket_accept() calls > net_socket_fd_init(). If the socket is > UDP/multicast net_socket_fd_init() calls net_socket_fd_init_dgram, if > the socket is TCP it calls net_socket_fd_init_dgram_stream. [2] > > In both cases the info_str string is written inside > net_socket_fd_init_(stream|dgram) [3], and after that, it is > overwritten on a subsequent > snprintf() in net_socket_accept() [4]. Yes, those snprintf() in net_socket_fd_init_{stream,dgram} seems dead code to me. Another problem is that info_str is not cleaned when the connection is closed, which makes 'info network' keep saying that the connection is there. > net_socket_fd_init_(stream|dgram) always puts into the info_str the fd > number, and this information is overwritten latter. So, is the fd > number > relevant to be transmitted over QMP? Right now this information is > being lost, IMHO. Only client writers can answer, I guess. But it's not a problem if we don't include it now, as it's easy to extend the output later if needed. > > Same thing happens when qemu is run as a client: > net_socket_connect_init() calls net_socket_fd_init_(dgram|stream) and > latter overwrites info_str. > > [1] http://git.qemu.org/qemu.git/tree/net/socket.c#n375 > [2] http://git.qemu.org/qemu.git/tree/net/socket.c#n336 > [3] http://git.qemu.org/qemu.git/tree/net/socket.c#n310 > [4] http://git.qemu.org/qemu.git/tree/net/socket.c#n369 >