From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59178) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WyXgP-0007m9-Hs for qemu-devel@nongnu.org; Sat, 21 Jun 2014 22:39:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WyXgK-00019i-T3 for qemu-devel@nongnu.org; Sat, 21 Jun 2014 22:39:05 -0400 Received: from mx1.redhat.com ([209.132.183.28]:30008) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WyXgK-00019e-ID for qemu-devel@nongnu.org; Sat, 21 Jun 2014 22:39:00 -0400 From: Stefan Hajnoczi Date: Sun, 22 Jun 2014 10:38:36 +0800 Message-Id: <1403404717-12101-2-git-send-email-stefanha@redhat.com> In-Reply-To: <1403404717-12101-1-git-send-email-stefanha@redhat.com> References: <1403404717-12101-1-git-send-email-stefanha@redhat.com> Subject: [Qemu-devel] [PATCH for-2.1 1/2] qemu-char: fix qemu_chr_fe_get_msgfd() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Nikolay Nikolaev , Stefan Hajnoczi , Anthony Liguori , "Michael S. Tsirkin" Commit c76bf6bb8fbbb233a7d3641e09229d23747d5ee3 ("Add chardev API qemu_chr_fe_get_msgfds") broke qemu_chr_fe_get_msgfd() because it changed the return value. Callers expect -1 if no fd is available. The commit changed the return value to 0 (which is a valid file descriptor number) so callers always detected a file descriptor even if none was available. This patch fixes qemu-iotests 045: $ cd tests/qemu-iotests && ./check 045 [...] +FAIL: test_add_fd_invalid_fd (__main__.TestFdSets) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "./045", line 123, in test_add_fd_invalid_fd + self.assert_qmp(result, 'error/class', 'GenericError') + File "/home/stefanha/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp + result = self.dictpath(d, path) + File "/home/stefanha/qemu/tests/qemu-iotests/iotests.py", line 211, in dictpath + self.fail('failed path traversal for "%s" in "%s"' % (path, str(d))) +AssertionError: failed path traversal for "error/class" in "{u'return': {u'fdset-id': 2, u'fd': 0}}" Cc: Nikolay Nikolaev Signed-off-by: Stefan Hajnoczi --- qemu-char.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qemu-char.c b/qemu-char.c index b3bd3b5..6ee2275 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -205,7 +205,7 @@ void qemu_chr_be_write(CharDriverState *s, uint8_t *buf, int len) int qemu_chr_fe_get_msgfd(CharDriverState *s) { int fd; - return (qemu_chr_fe_get_msgfds(s, &fd, 1) >= 0) ? fd : -1; + return (qemu_chr_fe_get_msgfds(s, &fd, 1) == 1) ? fd : -1; } int qemu_chr_fe_get_msgfds(CharDriverState *s, int *fds, int len) -- 1.9.3