Re: BIO_do_accept Issue

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Apr 08, 2020 at 11:47:19AM +0100, Scott Morgan via openssl-users wrote:

> Run into an odd issue.
> 
> Consider the following program, based on the documentation[0], using
> OpenSSL 1.1.1f
> 
> 	abio = BIO_new_accept("4444");
> 	res = BIO_do_accept(abio);

It seems to me that since commit 417be660e1c BIO_do_accept() has
incomplete error handling, "ret" isn't assigned when bind() or listen()
fail:

    acpt_state(), crypto/bio//bss_acpt.c: line 241:

        case ACPT_S_LISTEN:
            {
                if (!BIO_listen(c->accept_sock,
                                BIO_ADDRINFO_address(c->addr_iter),
                                c->bind_mode)) {
                    BIO_closesocket(c->accept_sock);
                    goto exit_loop;
                }
            }

    ...
      exit_loop:
        if (bio != NULL)
            BIO_free(bio);
        else if (s >= 0)
            BIO_closesocket(s);
      end:
        return ret;

So the function returns the wrong value of ret, in your case the the
socket descriptor created in an earlier case in the loop.  The fix is
presumably to set ret to either -1 or 0, whichever is appropriate here.

-- 
    Viktor.



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux