> On 11 Feb 2024, at 19:19, David Benjamin <david...@google.com> wrote:
> 
> Hi all,
> 
> I've attached a patch for the master branch to fix up the custom BIOs used by 
> PostgreSQL, in light of the issues with the OpenSSL update recently. While 
> c82207a548db47623a2bfa2447babdaa630302b9 (switching from BIO_get_data to 
> BIO_get_app_data) resolved the immediate conflict, I don't think it addressed 
> the root cause, which is that PostgreSQL was mixing up two BIO 
> implementations, each of which expected to be driving the BIO.

Thanks for your patch, I'm still digesting it so will provide more of a review
later.

> It turns out the parts that came from the OpenSSL socket BIO were a no-op, 
> and in fact PostgreSQL is relying on it being a no-op. Instead, it's cleaner 
> to just define a custom BIO the normal way, which then leaves the more 
> standard BIO_get_data mechanism usable. This also avoids the risk that a 
> future OpenSSL will add a now BIO_ctrl to the socket type, with libssl 
> calling into it, and then break some assumptions made by PostgreSQL.

+               case BIO_CTRL_FLUSH:
+                       /* libssl expects all BIOs to support BIO_flush. */
+                       res = 1;
+                       break;

Will this always be true?  Returning 1 implies that we have flushed all data on
the socket, but what if we just before called BIO_set_retry..XX()?

> I've attached a patch which does that. The existing SSL tests pass with it, 
> tested on Debian stable. (Though it took me a few iterations to figure out 
> how to run the SSL tests, so it's possible I've missed something.)

We've done a fair bit of work on making them easier to run, so I'm curious if
you saw any room for improvements there as someone coming to them for the first
time?

--
Daniel Gustafsson



Reply via email to