From 6fb74a3746f255f956cc28dec6938fc7a31b2ef9 Mon Sep 17 00:00:00 2001 From: Bryan Call Date: Thu, 19 Feb 2026 23:51:04 -0800 Subject: [PATCH 1/3] Fix synserver accept assertion to log event details before aborting Replace bare TSAssert in synserver_vc_accept and synserver_vc_refuse with diagnostic ink_abort that logs the unexpected event number and, if the data looks like a negated errno, the strerror string. This gives CI output useful for debugging the accept() failure seen on Rocky (build #8376) where the synserver received an unexpected event after SDK_API_HttpParentProxySet_Success passed. --- src/api/InkAPITest.cc | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/api/InkAPITest.cc b/src/api/InkAPITest.cc index 7d2fcc27cd7..e75eaafd374 100644 --- a/src/api/InkAPITest.cc +++ b/src/api/InkAPITest.cc @@ -892,7 +892,14 @@ synserver_delete(SocketServer *s) static int synserver_vc_refuse(TSCont contp, TSEvent event, void *data) { - TSAssert((event == TS_EVENT_NET_ACCEPT) || (event == TS_EVENT_NET_ACCEPT_FAILED)); + if (event != TS_EVENT_NET_ACCEPT && event != TS_EVENT_NET_ACCEPT_FAILED) { + int err = -static_cast(reinterpret_cast(data)); + if (err > 0 && err < 256) { + ink_abort("synserver_vc_refuse: unexpected event %d, accept errno: %s (%d)", event, strerror(err), err); + } else { + ink_abort("synserver_vc_refuse: unexpected event %d, data: %p", event, data); + } + } SocketServer *s = static_cast(TSContDataGet(contp)); TSAssert(s->magic == MAGIC_ALIVE); @@ -913,7 +920,14 @@ synserver_vc_refuse(TSCont contp, TSEvent event, void *data) static int synserver_vc_accept(TSCont contp, TSEvent event, void *data) { - TSAssert((event == TS_EVENT_NET_ACCEPT) || (event == TS_EVENT_NET_ACCEPT_FAILED)); + if (event != TS_EVENT_NET_ACCEPT && event != TS_EVENT_NET_ACCEPT_FAILED) { + int err = -static_cast(reinterpret_cast(data)); + if (err > 0 && err < 256) { + ink_abort("synserver_vc_accept: unexpected event %d, accept errno: %s (%d)", event, strerror(err), err); + } else { + ink_abort("synserver_vc_accept: unexpected event %d, data: %p", event, data); + } + } SocketServer *s = static_cast(TSContDataGet(contp)); TSAssert(s->magic == MAGIC_ALIVE); From bba69ef157e9b6f23145ba144c729617c380adf7 Mon Sep 17 00:00:00 2001 From: Bryan Call Date: Thu, 19 Feb 2026 23:58:18 -0800 Subject: [PATCH 2/3] Validate data as intptr_t before narrowing to errno Check data in intptr_t space (negative and >= -4095) before treating it as a negated errno. Avoids truncating a pointer to int which could accidentally land in the errno range and print a misleading strerror. --- src/api/InkAPITest.cc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/api/InkAPITest.cc b/src/api/InkAPITest.cc index e75eaafd374..c572821059e 100644 --- a/src/api/InkAPITest.cc +++ b/src/api/InkAPITest.cc @@ -893,8 +893,9 @@ static int synserver_vc_refuse(TSCont contp, TSEvent event, void *data) { if (event != TS_EVENT_NET_ACCEPT && event != TS_EVENT_NET_ACCEPT_FAILED) { - int err = -static_cast(reinterpret_cast(data)); - if (err > 0 && err < 256) { + intptr_t data_val = reinterpret_cast(data); + if (data_val < 0 && data_val >= -4095) { + int err = static_cast(-data_val); ink_abort("synserver_vc_refuse: unexpected event %d, accept errno: %s (%d)", event, strerror(err), err); } else { ink_abort("synserver_vc_refuse: unexpected event %d, data: %p", event, data); @@ -921,8 +922,9 @@ static int synserver_vc_accept(TSCont contp, TSEvent event, void *data) { if (event != TS_EVENT_NET_ACCEPT && event != TS_EVENT_NET_ACCEPT_FAILED) { - int err = -static_cast(reinterpret_cast(data)); - if (err > 0 && err < 256) { + intptr_t data_val = reinterpret_cast(data); + if (data_val < 0 && data_val >= -4095) { + int err = static_cast(-data_val); ink_abort("synserver_vc_accept: unexpected event %d, accept errno: %s (%d)", event, strerror(err), err); } else { ink_abort("synserver_vc_accept: unexpected event %d, data: %p", event, data); From 08c17ed6801ec277415e46884420c370db9ea1ec Mon Sep 17 00:00:00 2001 From: Bryan Call Date: Fri, 20 Feb 2026 00:01:02 -0800 Subject: [PATCH 3/3] Add comment explaining the -4095 errno range check --- src/api/InkAPITest.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/api/InkAPITest.cc b/src/api/InkAPITest.cc index c572821059e..872bc49ebd2 100644 --- a/src/api/InkAPITest.cc +++ b/src/api/InkAPITest.cc @@ -893,6 +893,7 @@ static int synserver_vc_refuse(TSCont contp, TSEvent event, void *data) { if (event != TS_EVENT_NET_ACCEPT && event != TS_EVENT_NET_ACCEPT_FAILED) { + // net_accept() passes negated errno as data on EVENT_ERROR; Linux MAX_ERRNO is 4095 intptr_t data_val = reinterpret_cast(data); if (data_val < 0 && data_val >= -4095) { int err = static_cast(-data_val); @@ -922,6 +923,7 @@ static int synserver_vc_accept(TSCont contp, TSEvent event, void *data) { if (event != TS_EVENT_NET_ACCEPT && event != TS_EVENT_NET_ACCEPT_FAILED) { + // net_accept() passes negated errno as data on EVENT_ERROR; Linux MAX_ERRNO is 4095 intptr_t data_val = reinterpret_cast(data); if (data_val < 0 && data_val >= -4095) { int err = static_cast(-data_val);