[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [Bug 1504513] [NEW] Socket leak on each call to qemu_so
From: |
Mark Pizzolato - Info Comm |
Subject: |
Re: [Qemu-devel] [Bug 1504513] [NEW] Socket leak on each call to qemu_socket() |
Date: |
Mon, 12 Oct 2015 12:11:02 -0700 |
On Sunday, October 11, 2015 at 11:58 PM. Markus Armbruster wrote:
> Mark Pizzolato <address@hidden> writes:
>
> > Public bug reported:
> >
> > On any host platform where SOCK_CLOEXEC is defined (Linux at least), a
> > socket is leaked on each call to qemu_socket() AND the socket returned
> > hasn't been created with the desired SOCK_CLOEXEC attribute. The
> > qemu_socket routine is:
> >
> > Line 272 of util/osdep.c:
> > /*
> > * Opens a socket with FD_CLOEXEC set
> > */
> > int qemu_socket(int domain, int type, int protocol)
> > {
> > int ret;
> >
> > #ifdef SOCK_CLOEXEC
> > ret = socket(domain, type | SOCK_CLOEXEC, protocol);
> > if (ret != -1 || errno != EINVAL) {
> > return ret;
>
> If socket() succeeded (ret != -1), we return the socket.
>
> If socket() failed with anything but EINVAL (ret == -1 && errno !=
> EINVAL), we return -1 with errno set.
>
> > }
>
> Here, ret == -1 && errno == EINVAL.
>
> > #endif
> > ret = socket(domain, type, protocol);
> > if (ret >= 0) {
> > qemu_set_cloexec(ret);
> > }
> >
> > return ret;
> > }
>
> How can this leak a socket?
>
> How can this return a socket with FD_CLOEXEC not set?
All I can say is "OOPS!!" Sorry for bothering you. I misread the status check
after the first socket() call.
I'm in the process of lifting qemu's slirp code and dropping it into another
open source project. Since I'm trying to use all the code in the slirp
directory without modification I'm digging through where it now depends on
other qemu code. I quickly looked at the qemu_socket() routine and read it
wrong.
Once again, sorry.
- Mark Pizzolato