Opened 9 months ago

Closed 8 months ago

Last modified 5 weeks ago

#2539 closed defect (fixed)

--with-http_v3_module changes the layout of the ngx_connection_s structure that can be used by modules, but does not change the signature

Reported by: dmikhin@… Owned by:
Priority: major Milestone: nginx-1.26
Component: http/3 Version: 1.25.x
Keywords: Cc: dmikhin@…
uname -a: Linux d334af5216ac 5.15.0-73-generic #80~20.04.1-Ubuntu SMP Wed May 17 14:58:14 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
nginx -V: nginx version: nginx/1.25.2
built by gcc 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)
built with OpenSSL 1.1.1f 31 Mar 2020
TLS SNI support enabled
configure arguments: --with-http_v3_module

Description

Nginx compiled with v3 support has following signature:

./configure --with-http_v3_module && make -j8
egrep -ao '.,.,.,[01]{34}' objs/nginx
8,4,8,0000111111010111001110111111000110

Nginx compiled without v3 support will have the same signature:

./configure && make -j8
egrep -ao '.,.,.,[01]{34}' objs/nginx
8,4,8,0000111111010111001110101111000110

But nginx compiled with v3 support has different struct ngx_connection_s layout, it has additional 'quic' field - https://trac.nginx.org/nginx/browser/nginx/src/core/ngx_connection.h?rev=58afcd72446ff33811e773f1cabb7866a92a09a0#L153. Thus, if we compile a module for nginx without v3 support and try to load it into nginx with v3 support, the module will be successfully loaded because they have the same versions and signatures, but the module will behave badly due to different structure layouts.

Change History (4)

comment:1 by Roman Arutyunyan, 9 months ago

Thanks for reporting this. QUIC indeed should be included in signature.

comment:2 by Roman Arutyunyan <arut@…>, 8 months ago

In 9163:32b5aaebcca5/nginx:

Modules compatibility: added QUIC to signature (ticket #2539).

Enabling QUIC changes ngx_connection_t layout, which is why it should be
added to the signature.

comment:3 by Roman Arutyunyan, 8 months ago

Resolution: fixed
Status: newclosed

comment:4 by m.herasimovich, 5 weeks ago

Milestone: nginx-1.25nginx-1.26

Milestone renamed

Note: See TracTickets for help on using tickets.