aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Sistare <steven.sistare@oracle.com>2025-07-14 13:36:54 -0700
committerJason Wang <jasowang@redhat.com>2025-07-21 10:21:33 +0800
commitea263e8fd9a8f9cff615631a9bda775f5ddd3f98 (patch)
treee0d9ae0e5e0b75dde0181100ceb7045a2b27b30c
parent3f9f6299a1bc46ff462142c7398a5953e3640cc2 (diff)
downloadqemu-ea263e8fd9a8f9cff615631a9bda775f5ddd3f98.zip
qemu-ea263e8fd9a8f9cff615631a9bda775f5ddd3f98.tar.gz
qemu-ea263e8fd9a8f9cff615631a9bda775f5ddd3f98.tar.bz2
tap: fix net_init_tap() return code
net_init_tap intends to return 0 for success and -1 on error. However, when net_init_tap() succeeds for a multi-queue device, it returns 1, because of this code where ret becomes 1 when g_unix_set_fd_nonblocking succeeds: ret = g_unix_set_fd_nonblocking(fd, true, NULL); if (!ret) { ... error ... free_fail: ... return ret; Luckily, the only current call site checks for negative, rather than non-zero: net_client_init1() if (net_client_init_fun[](...) < 0) Also, in the unlikely case that g_unix_set_fd_nonblocking fails and returns false, ret=0 is returned, and net_client_init1 will use a broken interface. Fix it to be future proof. Signed-off-by: Steve Sistare <steven.sistare@oracle.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
-rw-r--r--net/tap.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/net/tap.c b/net/tap.c
index 2a85936..f7df702 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -895,8 +895,8 @@ int net_init_tap(const Netdev *netdev, const char *name,
goto free_fail;
}
- ret = g_unix_set_fd_nonblocking(fd, true, NULL);
- if (!ret) {
+ if (!g_unix_set_fd_nonblocking(fd, true, NULL)) {
+ ret = -1;
error_setg_errno(errp, errno, "%s: Can't use file descriptor %d",
name, fd);
goto free_fail;