Skip to content

Commit

Permalink
net: socket: remove net_init_socket()
Browse files Browse the repository at this point in the history
Move the file descriptor type checking before doing anything with it.
If it's not usable, don't close it as it could be in use by another
part of QEMU, only fail and report an error.

Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
  • Loading branch information
vivier authored and jasowang committed Jul 7, 2023
1 parent 23455ae commit b6aeee0
Showing 1 changed file with 17 additions and 26 deletions.
43 changes: 17 additions & 26 deletions net/socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -463,28 +463,6 @@ static int net_socket_fd_check(int fd, Error **errp)
return so_type;
}

static NetSocketState *net_socket_fd_init(NetClientState *peer,
const char *model, const char *name,
int fd, int is_connected,
const char *mc, Error **errp)
{
int so_type;

so_type = net_socket_fd_check(fd, errp);
if (so_type < 0) {
close(fd);
return NULL;
}
switch(so_type) {
case SOCK_DGRAM:
return net_socket_fd_init_dgram(peer, model, name, fd, is_connected,
mc, errp);
case SOCK_STREAM:
return net_socket_fd_init_stream(peer, model, name, fd, is_connected);
}
return NULL;
}

static void net_socket_accept(void *opaque)
{
NetSocketState *s = opaque;
Expand Down Expand Up @@ -728,21 +706,34 @@ int net_init_socket(const Netdev *netdev, const char *name,
}

if (sock->fd) {
int fd, ret;
int fd, ret, so_type;

fd = monitor_fd_param(monitor_cur(), sock->fd, errp);
if (fd == -1) {
return -1;
}
so_type = net_socket_fd_check(fd, errp);
if (so_type < 0) {
return -1;
}
ret = qemu_socket_try_set_nonblock(fd);
if (ret < 0) {
error_setg_errno(errp, -ret, "%s: Can't use file descriptor %d",
name, fd);
return -1;
}
if (!net_socket_fd_init(peer, "socket", name, fd, 1, sock->mcast,
errp)) {
return -1;
switch (so_type) {
case SOCK_DGRAM:
if (!net_socket_fd_init_dgram(peer, "socket", name, fd, 1,
sock->mcast, errp)) {
return -1;
}
break;
case SOCK_STREAM:
if (!net_socket_fd_init_stream(peer, "socket", name, fd, 1)) {
return -1;
}
break;
}
return 0;
}
Expand Down

0 comments on commit b6aeee0

Please sign in to comment.