**Additional evidence — root cause is a missing header at build time,
not an ABI break**

`H2_MPLX_MSG` is not an exported symbol at all — it is a C preprocessor
macro defined in `modules/http2/h2_mplx.h`:

```c
#define H2_MPLX_MSG(m, msg)  "h2_mplx(%d-%lu): " msg, m->child_num, (unsigned 
long)m->id
```

(see e.g.
https://nightlies.apache.org/httpd/trunk/doxygen/h2__mplx_8h.html#ad618f2ad9ab0b4974ec74e2a223da6c1)

It is used inside `ap_log_*error` / `ap_log_*cerror` calls in the http2
sources as a format-string helper, e.g. `ap_log_cerror(...,
H2_MPLX_MSG(m, "stream cleanup"))`. The macro must be fully expanded by
the preprocessor before compilation — it should never appear in the
object file at all.

The fact that `nm -D /usr/lib/apache2/modules/mod_http2.so` reports `U
H2_MPLX_MSG` therefore proves that **the macro definition in `h2_mplx.h`
was not visible to the compiler** when at least one `modules/http2/*.c`
translation unit of the `+esm7` build was compiled. With the macro
undefined, the compiler parsed `H2_MPLX_MSG(m, "...")` as an ordinary
function call returning a string literal, and the linker happily emitted
an unresolved external reference.

Most likely cause: the USN-7639 backport pulled in newer upstream
`modules/http2/*.c` files that use the `H2_MPLX_MSG` helper, but the
matching `h2_mplx.h` from the same upstream revision was either not
picked up or shadowed by an older copy in the build tree.

Implications:

- No upstream API or ABI break is involved.
- Rebuilding `apache2-bin` against a `modules/http2/h2_mplx.h` that contains 
the `H2_MPLX_MSG` definition should produce a working `mod_http2.so` with no 
further source changes.
- A simple build-time sanity check (`nm -D --undefined-only mod_http2.so | grep 
H2_` must be empty) would have caught this before release.

Confirming the workaround `a2dismod -f http2` on the affected production
host (Ubuntu 18.04 bionic ESM, KIX/OTRS helpdesk at a university);
HTTP/1.1 service restored, HTTP/2 unavailable until a fixed `+esm8`
build is published.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2154546

Title:
  apache2-bin 2.4.29-1ubuntu4.27+esm7 (bionic ESM): mod_http2.so has
  undefined symbol H2_MPLX_MSG - apache2 fails to start

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/apache2/+bug/2154546/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to