<feed xmlns='http://www.w3.org/2005/Atom'>
<title>openssl/test/radix, branch dependabot/github_actions/actions/setup-python-7</title>
<subtitle>TLS/SSL and crypto library.</subtitle>
<id>http://git.bktus.com/gpgfrontend/openssl/atom?h=dependabot%2Fgithub_actions%2Factions%2Fsetup-python-7</id>
<link rel='self' href='http://git.bktus.com/gpgfrontend/openssl/atom?h=dependabot%2Fgithub_actions%2Factions%2Fsetup-python-7'/>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/'/>
<updated>2026-07-21T09:22:31Z</updated>
<entry>
<title>Wire radix QUIC test framework clock to simulated time</title>
<updated>2026-07-21T09:22:31Z</updated>
<author>
<name>Andrew Dinh</name>
<email>andrewd@openssl.org</email>
</author>
<published>2026-07-12T16:50:05Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=fcba83dc4d2a50581466eadd1598e1dd9c0cea03'/>
<id>urn:sha1:fcba83dc4d2a50581466eadd1598e1dd9c0cea03</id>
<content type='text'>
script_17/18/19 (key update tests) rely on OP_SKIP_TIME to advance
simulated time so that TXKU cooldown/RTT-gated behaviour can be
exercised deterministically, but the framework never actually plumbed
that simulated clock into the QUIC channels under test -- OP_SKIP_TIME
only affected the terp's own bookkeeping, so real key updates only
ever occurred by chance regardless of how much time was "skipped".

Fix this by:

- Calling ossl_quic_set_override_now_cb() in hf_new_ssl() so each QUIC
  channel actually uses the framework's simulated clock, matching what
  the older quictestlib.c harness already did via fake_now_cb().
- Activating the server-side connection object in hf_accept_conn() so
  it gets ticked (SSL_handle_events()) like every other object, driving
  its internal key-update/timer processing forward.

Two correctness issues had to be addressed to make this clock
plumbing safe and deterministic:

- The clock handed to QUIC channels must be purely virtual (a fixed
  base time plus an explicit slip that only advances via
  radix_skip_time()/OP_SKIP_TIME), not real wall-clock time, or
  protocol-timing-sensitive assertions become flaky depending on how
  long real cryptographic work takes on a given machine (e.g. much
  slower on ASAN+UBSAN debug builds), occasionally triggering a
  spurious second TXKU before the first is confirmed. radix_process is
  a single static struct reused across every script in the suite, so
  time_slip must be reset in RADIX_PROCESS_init() -- otherwise a
  script would inherit the previous script's accumulated slip and see
  time jump forward all at once for a brand new connection. The
  virtual clock also needs a small, fixed per-tick advance
  (do_per_op(), mirroring the old harness's qtest_add_time(1) in its
  own connect-wait loop), since QUIC's internal timers need to
  observe time actually passing to make progress during a busy-wait
  such as hf_connect_wait spinning on SSL_connect().
- time_slip needs its own dedicated mutex (time_m) rather than being
  protected by the existing global mutex (gm): get_time() is now
  called by libssl/QUIC's internals (e.g. from within the reactor tick
  while holding QUIC's own locks), whereas gm is held by test code
  across calls into libssl (e.g. hf_clear() holds gm while calling
  SSL_free()). Sharing gm would take gm and QUIC's internal lock in
  opposite orders across those two paths, risking a real deadlock
  (confirmed via a ThreadSanitizer lock-order-inversion report).
- The terp's own script-execution watchdog (max_execution_time) needs
  its own now_cb (terp_now) based on real wall-clock time, so that
  OP_SKIP_TIME doesn't eat into its execution budget, and so it can
  still catch a genuinely stuck script independent of the virtual
  protocol clock. Some scripts also legitimately need a larger budget
  than the terp default on slow or heavily instrumented CI machines.

Assisted-by: Claude:claude-sonnet-5

Reviewed-by: Saša Nedvědický &lt;sashan@openssl.org&gt;
Reviewed-by: Neil Horman &lt;nhorman@openssl.org&gt;
Reviewed-by: Bob Beck &lt;beck@openssl.org&gt;
MergeDate: Tue Jul 21 09:22:53 2026
(Merged from https://github.com/openssl/openssl/pull/31889)
</content>
</entry>
<entry>
<title>Port script_19 to radix test framework</title>
<updated>2026-07-21T09:22:31Z</updated>
<author>
<name>Andrew Dinh</name>
<email>andrewd@openssl.org</email>
</author>
<published>2026-06-30T13:52:51Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=08d3dd81b2e4ca23afbd3dc0520ae3b499107dc5'/>
<id>urn:sha1:08d3dd81b2e4ca23afbd3dc0520ae3b499107dc5</id>
<content type='text'>
Assisted-by: Claude:claude-sonnet-4-6

Reviewed-by: Saša Nedvědický &lt;sashan@openssl.org&gt;
Reviewed-by: Neil Horman &lt;nhorman@openssl.org&gt;
Reviewed-by: Bob Beck &lt;beck@openssl.org&gt;
MergeDate: Tue Jul 21 09:22:51 2026
(Merged from https://github.com/openssl/openssl/pull/31889)
</content>
</entry>
<entry>
<title>Port script_18 to radix test framework</title>
<updated>2026-07-21T09:22:31Z</updated>
<author>
<name>Andrew Dinh</name>
<email>andrewd@openssl.org</email>
</author>
<published>2026-06-30T10:17:48Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=7c6adaee6b15eed7eb44bb0c08411dc165940bdb'/>
<id>urn:sha1:7c6adaee6b15eed7eb44bb0c08411dc165940bdb</id>
<content type='text'>
Assisted-by: Claude:claude-sonnet-4-6

Reviewed-by: Saša Nedvědický &lt;sashan@openssl.org&gt;
Reviewed-by: Neil Horman &lt;nhorman@openssl.org&gt;
Reviewed-by: Bob Beck &lt;beck@openssl.org&gt;
MergeDate: Tue Jul 21 09:22:49 2026
(Merged from https://github.com/openssl/openssl/pull/31889)
</content>
</entry>
<entry>
<title>Port script_17 to radix test framework</title>
<updated>2026-07-21T09:22:31Z</updated>
<author>
<name>Andrew Dinh</name>
<email>andrewd@openssl.org</email>
</author>
<published>2026-06-30T10:07:37Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=9b94348003b2412187b22e3ee2201d16816e44fb'/>
<id>urn:sha1:9b94348003b2412187b22e3ee2201d16816e44fb</id>
<content type='text'>
Assisted-by: Claude:claude-sonnet-4-6

Reviewed-by: Saša Nedvědický &lt;sashan@openssl.org&gt;
Reviewed-by: Neil Horman &lt;nhorman@openssl.org&gt;
Reviewed-by: Bob Beck &lt;beck@openssl.org&gt;
MergeDate: Tue Jul 21 09:22:48 2026
(Merged from https://github.com/openssl/openssl/pull/31889)
</content>
</entry>
<entry>
<title>Port script_16 to radix test framework</title>
<updated>2026-07-21T09:22:31Z</updated>
<author>
<name>Andrew Dinh</name>
<email>andrewd@openssl.org</email>
</author>
<published>2026-06-29T15:55:25Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=e528888bc069f216620ea9d7062c673c18bafdcc'/>
<id>urn:sha1:e528888bc069f216620ea9d7062c673c18bafdcc</id>
<content type='text'>
Assisted-by: Claude:claude-sonnet-4-6

Reviewed-by: Saša Nedvědický &lt;sashan@openssl.org&gt;
Reviewed-by: Neil Horman &lt;nhorman@openssl.org&gt;
Reviewed-by: Bob Beck &lt;beck@openssl.org&gt;
MergeDate: Tue Jul 21 09:22:46 2026
(Merged from https://github.com/openssl/openssl/pull/31889)
</content>
</entry>
<entry>
<title>Port script_15 to radix test framework</title>
<updated>2026-07-21T09:22:31Z</updated>
<author>
<name>Andrew Dinh</name>
<email>andrewd@openssl.org</email>
</author>
<published>2026-06-29T15:38:43Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=b27fe1419c2a043eb34d18cdc9469a093f9892c9'/>
<id>urn:sha1:b27fe1419c2a043eb34d18cdc9469a093f9892c9</id>
<content type='text'>
Assisted-by: Claude:claude-sonnet-4-6

Reviewed-by: Saša Nedvědický &lt;sashan@openssl.org&gt;
Reviewed-by: Neil Horman &lt;nhorman@openssl.org&gt;
Reviewed-by: Bob Beck &lt;beck@openssl.org&gt;
MergeDate: Tue Jul 21 09:22:44 2026
(Merged from https://github.com/openssl/openssl/pull/31889)
</content>
</entry>
<entry>
<title>Migrate QUIC_TSERVER script 13 and script 14 to radix</title>
<updated>2026-07-21T09:19:33Z</updated>
<author>
<name>Andrew Dinh</name>
<email>andrewd@openssl.org</email>
</author>
<published>2026-07-13T15:43:41Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=db5b9853692acc99d07626c2e23e54cae2ef4faa'/>
<id>urn:sha1:db5b9853692acc99d07626c2e23e54cae2ef4faa</id>
<content type='text'>
Reviewed-by: Saša Nedvědický &lt;sashan@openssl.org&gt;
Reviewed-by: Bob Beck &lt;beck@openssl.org&gt;
MergeDate: Tue Jul 21 09:19:57 2026
(Merged from https://github.com/openssl/openssl/pull/31945)
</content>
</entry>
<entry>
<title>test: clean up thread-local key in QUIC radix tests</title>
<updated>2026-07-20T09:06:53Z</updated>
<author>
<name>Nikola Pajkovsky</name>
<email>nikolap@openssl.org</email>
</author>
<published>2026-07-15T09:05:35Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=29616c15e476eab4a81a6af20259d7d1809d4e03'/>
<id>urn:sha1:29616c15e476eab4a81a6af20259d7d1809d4e03</id>
<content type='text'>
The QUIC radix test creates a new thread-local key for each script but
only clears the associated value during teardown. The key itself
is never deleted.

Delete the thread-local key after all child threads have joined and the
main-thread value has been cleared.

  1,536 bytes in 3 blocks are still reachable in loss record 873 of 915
     at 0x488D0B0: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-arm64-linux.so)
     by 0x49561CF: pthread_setspecific@@GLIBC_2.34 (in /usr/lib64/libc.so.6)
     by 0x5C0FD7: CRYPTO_THREAD_set_local (threads_pthread.c:1030)
     by 0x41132F: radix_thread_init (quic_bindings.c:570)
     by 0x4114F7: bindings_process_init (quic_bindings.c:604)
     by 0x422563: test_script (main.c:28)
     by 0x5152DF: run_tests (driver.c:518)
     by 0x517447: main (main.c:52)

Signed-off-by: Nikola Pajkovsky &lt;nikolap@openssl.org&gt;

Reviewed-by: Tim Hudson &lt;tjh@openssl.org&gt;
Reviewed-by: Paul Dale &lt;paul.dale@oracle.com&gt;
Reviewed-by: Neil Horman &lt;nhorman@openssl.org&gt;
MergeDate: Mon Jul 20 09:07:10 2026
(Merged from https://github.com/openssl/openssl/pull/31961)
</content>
</entry>
<entry>
<title>Introduce OP_BIND() to QUIC RADIX test framework</title>
<updated>2026-07-17T08:01:58Z</updated>
<author>
<name>Andrew Dinh</name>
<email>andrewd@openssl.org</email>
</author>
<published>2026-07-03T11:18:17Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=98a726d3ca369960d676e2691ca734448ef1a672'/>
<id>urn:sha1:98a726d3ca369960d676e2691ca734448ef1a672</id>
<content type='text'>
RADIX framework keeps objects needed by test scripts
in two places:
  - hash table bound to radix process (`RP()-&gt;objs`), all
  objects are stored there
  - slot which is an array bound to radix thread (`RT()-&gt;slot[]`)

The `slot` is an array which is used to pass arguments
to RADIX ops. The typically script is doing something
like this:
```
   OP_SELECT_SSL(0, C); /* places 'C' object to slot 0 in thread */
   OP_FUNC(print_ssl);  /* calls print_ssl function, which prints object */
```
All objects are managed by RADIX framework, scripts have very
limited options to control object's lifetime. The only way for
scripts to let object go is to use `OP_UNBIND()`. The operation
removes the object from hastable (`RP()-&gt;objs`) and frees the
object afterwards. This is good enough as long a all tests
are running in single thread. Currently `OP_UNBIND()` is
required when test needs to accept/create more than one stream.
The test has two options. It can use unique name for each
stream it creates/accepts:
```
   OP_ACCEPT_STREAM_WAIT(C, C0, 0);
   OP_ACCEPT_STREAM_WAIT(C, C1, 0);
   OP_ACCEPT_STREAM_WAIT(C, C2, 0);
```
Or script may re-use the same variable for stream,
in that case `OP_UNBIND()` is needed:
```
   OP_ACCEPT_STREAM_WAIT(C, C0, 0);
   OP_UNBIND(C0);
   OP_ACCEPT_STREAM_WAIT(C, C0, 0);
   OP_UNBIND(C0);
   OP_ACCEPT_STREAM_WAIT(C, C0, 0);
   OP_UNBIND(C0);
```
Unfortunately `OP_UNBIND()` can not be used when test
uses more than one thread due to missing locking of `RP()-&gt;objs`.

Introducing a locking scheme seems to be bit invasive change,
The OP_BIND()  here hopes to be sufficient and good enough for now.

The idea is as follows:
  - `OP_BIND()` allows  script to insert empty object
  into `RP()-&gt;objs` OP_BIND() is supposed to run before
  script spawns thread(s). No manipulation of `RP()-&gt;objs`
  is allowed after threads are spawned, operations
  OP_BIND()/OP_UNBIND() are not thread safe.

  - Introduce `OP_F_REPLACE_STREAM` flag which tells
  `OP_ACCEPT_STREAM_WAIT()`/`OP_NEW_STREAM()` to re-use
   existing id for stream. This `_REPLACE_` flag requires
   read-only access to `RP()-&gt;objs` hash table.

  - change introduces a per radix object mutex so object can
  be updated safely w.r.t. RADIX thread which ticks SSL object
  bound in radix object.

The guideline for tests which require more then one thread
is as follows:
   - the first thread creates complete set of empty objects
   for all threads.

   - each test thread gets its own set of variables, so it
   can populate them later during test with SSL objects

   - objects are not supposed to be shared between threads

This is a snippet of script executed by main thread before
additional threads are spawned:

```
   ...
   OP_BIND(C1);  /* stream id for child */
   OP_BIND(S1);  /* stream id for parent */

   OP_SPAWN_THREAD(child);
   for (i = 0; i &lt; 10; i++) {
      OP_NEW_STREAM(S, S1, OP_F_REPLACE_STREAM);
      OP_WRITE_B(S1, "foo");
      OP_CONCLUDE(S1);
   }
```
This snippet comes from child:
```
   for (i = 0; i &lt; 10; i++) {
      OP_ACCEPT_STREAM_WAIT(C, C1, OP_F_REPLACE_STREAM);
      OP_READ_EXPECT_B(C1, "foo");
      OP_EXPECT_FIN(C1);
   }
```
As you can see parent and child don't use OP_BIND()/OP_UNBIND()
after child thread is spawned.

Reviewed-by: Neil Horman &lt;nhorman@openssl.org&gt;
Reviewed-by: Saša Nedvědický &lt;sashan@openssl.org&gt;
MergeDate: Fri Jul 17 08:02:04 2026
(Merged from https://github.com/openssl/openssl/pull/31821)
</content>
</entry>
<entry>
<title>Port script12</title>
<updated>2026-07-17T08:01:26Z</updated>
<author>
<name>Andrew Dinh</name>
<email>andrewd@openssl.org</email>
</author>
<published>2026-07-01T16:37:34Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=4eab5e3bb2d17e44da2c9d22e56085b700841788'/>
<id>urn:sha1:4eab5e3bb2d17e44da2c9d22e56085b700841788</id>
<content type='text'>
Assisted-by: Claude:claude-sonnet-4-6

Reviewed-by: Neil Horman &lt;nhorman@openssl.org&gt;
Reviewed-by: Saša Nedvědický &lt;sashan@openssl.org&gt;
MergeDate: Fri Jul 17 08:02:03 2026
(Merged from https://github.com/openssl/openssl/pull/31821)
</content>
</entry>
</feed>
