Re: Seeing issue with BIO_free call

"'Samiya Khanum' via openssl-users" <[email protected]> Mon, 22 Sep 2025 17:40:19 +0530
Newsgroups gmane.comp.encryption.openssl.user
Message-ID <CADmX34oo7vbuCJVhhqH9ZXMK_F3w90AFOtnruU28i1t35r-pxA@mail.gmail.com>
Hi,
I would be grateful if someone could please provide some assistance or
insights into this issue.

Thanks & Regards,
Samiya khanum


On Fri, Sep 19, 2025 at 6:34 PM Samiya Khanum <[email protected]>
wrote:

> Hi,
>
> I'm encountering an issue with the `BIO_free` call in the following code
> snippet.
>
> When `sslCleanupTask` is triggered and `BIO_free` is called, we
> occasionally receive data on `listen_s`. This subsequently causes a hang
> because `BIO_do_accept` in `sslListenTask` is then called on a file
> descriptor that has already been freed or closed by `BIO_free`.
>
> Could you please explain why `listen_s` is set in `readfds` when
> `BIO_free` is called?
> I've attempted to set the `BIO_CLOSE` flag, but the issue persists.
>
> Do we need to set any other APIs or flags to prevent this? Please note
> that we are not initiating any connections here.
>
> *sslListenTask()*
> *{*
> *    BIO *ppBio = NULL;*
>
> *    if ((ppBio = BIO_new_accept("[::]:443")) == NULL)*
> *    {*
> *      BIO_free(ppBio);*
> *      return;*
> *    }*
> *    BIO_set_bind_mode(ppBio, BIO_BIND_REUSEADDR);*
> *    /* First call sets up the BIO listening socket */*
> *    if (BIO_do_accept(ppBio) <= NULL)*
> *    {*
> *      BIO_free(ppBio);*
> *      return;*
> *    }*
> *    if( (listen_s = BIO_get_fd(ppBio,0)) <=0 )*
> *    {*
> *       BIO_free(ppBio);*
> *        return;*
> *    }*
> *   /**
> *    ** Loop waiting for SSLT connections*
> *    */*
> *    while (1)*
> *    {*
> *      fd_set readfds;*
> *      struct timeval tmout;*
> *      int num,max_fd;*
>
> *      tmout.tv_sec = 3;*
> *      tmout.tv_usec = 0;*
> *      FD_ZERO(&readfds);*
> *      FD_SET(listen_s,&readfds);*
> *      max_fd = listen_s;*
>
> *      num = select(max_fd + 1, &readfds, NULL, NULL, &tmout);*
>
> *      if (num <= 0)*
> *      {*
> *        if (!((num < 0) && (EINTR == errno)))*
> *        {*
> *          /* Set cancellation point for timeout and other errors except
> EINTR */*
> *          pthread_testcancel();*
> *        }*
>
> *      continue;*
> *    }*
> *     if (FD_ISSET(listen_s, &readfds))*
> *     {*
> *        if (BIO_do_accept(rdy_acc) <= L7_NULL)*
> *       {*
> *          //err*
> *       }*
>
> *      client = BIO_pop(rdy_acc);*
> *      //Rest of the program for SSL*
> *   } *
> * } /* while */*
> *}*
>
> *There is one more task doing the BIO_free if the SSL port changes.*
> *sslCleanupTask()*
> *{*
> *   BIO_free(ppBio);*
> *}*
>
> Thanks & Regards,
> Samiya khanum
>

-- 
You received this message because you are subscribed to the Google Groups "openssl-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openssl-users+unsubscribe-MCmKBN63+Bmbup2nOX2J7Q@public.gmane.org
To view this discussion visit https://groups.google.com/a/openssl.org/d/msgid/openssl-users/CADmX34oo7vbuCJVhhqH9ZXMK_F3w90AFOtnruU28i1t35r-pxA%40mail.gmail.com.
smime.p7s (application/pkcs7-signature, 4.1 KB) - not displayed