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>
This commit is contained in:
parent
3f9f6299a1
commit
ea263e8fd9
1 changed files with 2 additions and 2 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue