mirror of https://github.com/xemu-project/xemu.git
slirp: Remove code that handles socreate() failure
Now that socreate() can never fail, we can remove the code that was trying to handle that situation. In particular this removes code in tcp_connect() that provoked Coverity to complain (CID 1005724): in closesocket(accept(inso->s, (struct sockaddr *)&addr, &addrlen)); if the accept() call fails then we pass closesocket() -1 instead of a valid file descriptor. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
This commit is contained in:
parent
84ec9bfaf2
commit
4ded9bb54c
|
@ -160,7 +160,7 @@ icmp_input(struct mbuf *m, int hlen)
|
||||||
} else {
|
} else {
|
||||||
struct socket *so;
|
struct socket *so;
|
||||||
struct sockaddr_storage addr;
|
struct sockaddr_storage addr;
|
||||||
if ((so = socreate(slirp)) == NULL) goto freeit;
|
so = socreate(slirp);
|
||||||
if (icmp_send(so, m, hlen) == 0) {
|
if (icmp_send(so, m, hlen) == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1477,9 +1477,6 @@ static int slirp_state_load(QEMUFile *f, void *opaque, int version_id)
|
||||||
int ret;
|
int ret;
|
||||||
struct socket *so = socreate(slirp);
|
struct socket *so = socreate(slirp);
|
||||||
|
|
||||||
if (!so)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
ret = vmstate_load_state(f, &vmstate_slirp_socket, so, version_id);
|
ret = vmstate_load_state(f, &vmstate_slirp_socket, so, version_id);
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
|
|
@ -713,9 +713,6 @@ tcp_listen(Slirp *slirp, uint32_t haddr, u_int hport, uint32_t laddr,
|
||||||
DEBUG_ARG("flags = %x", flags);
|
DEBUG_ARG("flags = %x", flags);
|
||||||
|
|
||||||
so = socreate(slirp);
|
so = socreate(slirp);
|
||||||
if (!so) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Don't tcp_attach... we don't need so_snd nor so_rcv */
|
/* Don't tcp_attach... we don't need so_snd nor so_rcv */
|
||||||
if ((so->so_tcpcb = tcp_newtcpcb(so)) == NULL) {
|
if ((so->so_tcpcb = tcp_newtcpcb(so)) == NULL) {
|
||||||
|
|
|
@ -429,8 +429,7 @@ findso:
|
||||||
if ((tiflags & (TH_SYN|TH_FIN|TH_RST|TH_URG|TH_ACK)) != TH_SYN)
|
if ((tiflags & (TH_SYN|TH_FIN|TH_RST|TH_URG|TH_ACK)) != TH_SYN)
|
||||||
goto dropwithreset;
|
goto dropwithreset;
|
||||||
|
|
||||||
if ((so = socreate(slirp)) == NULL)
|
so = socreate(slirp);
|
||||||
goto dropwithreset;
|
|
||||||
if (tcp_attach(so) < 0) {
|
if (tcp_attach(so) < 0) {
|
||||||
g_free(so); /* Not sofree (if it failed, it's not insqued) */
|
g_free(so); /* Not sofree (if it failed, it's not insqued) */
|
||||||
goto dropwithreset;
|
goto dropwithreset;
|
||||||
|
|
|
@ -469,11 +469,6 @@ void tcp_connect(struct socket *inso)
|
||||||
so = inso;
|
so = inso;
|
||||||
} else {
|
} else {
|
||||||
so = socreate(slirp);
|
so = socreate(slirp);
|
||||||
if (so == NULL) {
|
|
||||||
/* If it failed, get rid of the pending connection */
|
|
||||||
closesocket(accept(inso->s, (struct sockaddr *)&addr, &addrlen));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (tcp_attach(so) < 0) {
|
if (tcp_attach(so) < 0) {
|
||||||
g_free(so); /* NOT sofree */
|
g_free(so); /* NOT sofree */
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -171,9 +171,6 @@ udp_input(register struct mbuf *m, int iphlen)
|
||||||
* create one
|
* create one
|
||||||
*/
|
*/
|
||||||
so = socreate(slirp);
|
so = socreate(slirp);
|
||||||
if (!so) {
|
|
||||||
goto bad;
|
|
||||||
}
|
|
||||||
if (udp_attach(so, AF_INET) == -1) {
|
if (udp_attach(so, AF_INET) == -1) {
|
||||||
DEBUG_MISC((dfd," udp_attach errno = %d-%s\n",
|
DEBUG_MISC((dfd," udp_attach errno = %d-%s\n",
|
||||||
errno,strerror(errno)));
|
errno,strerror(errno)));
|
||||||
|
@ -331,9 +328,6 @@ udp_listen(Slirp *slirp, uint32_t haddr, u_int hport, uint32_t laddr,
|
||||||
socklen_t addrlen = sizeof(struct sockaddr_in);
|
socklen_t addrlen = sizeof(struct sockaddr_in);
|
||||||
|
|
||||||
so = socreate(slirp);
|
so = socreate(slirp);
|
||||||
if (!so) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
so->s = qemu_socket(AF_INET,SOCK_DGRAM,0);
|
so->s = qemu_socket(AF_INET,SOCK_DGRAM,0);
|
||||||
if (so->s < 0) {
|
if (so->s < 0) {
|
||||||
sofree(so);
|
sofree(so);
|
||||||
|
|
|
@ -91,9 +91,6 @@ void udp6_input(struct mbuf *m)
|
||||||
if (so == NULL) {
|
if (so == NULL) {
|
||||||
/* If there's no socket for this packet, create one. */
|
/* If there's no socket for this packet, create one. */
|
||||||
so = socreate(slirp);
|
so = socreate(slirp);
|
||||||
if (!so) {
|
|
||||||
goto bad;
|
|
||||||
}
|
|
||||||
if (udp_attach(so, AF_INET6) == -1) {
|
if (udp_attach(so, AF_INET6) == -1) {
|
||||||
DEBUG_MISC((dfd, " udp6_attach errno = %d-%s\n",
|
DEBUG_MISC((dfd, " udp6_attach errno = %d-%s\n",
|
||||||
errno, strerror(errno)));
|
errno, strerror(errno)));
|
||||||
|
|
Loading…
Reference in New Issue