Mercurial > hg > nginx
view src/event/quic/ngx_event_quic_bpf_code.c @ 9295:c5623963c29e
Upstream: fixed proxy_no_cache when caching errors.
Caching errors, notably intercepted errors and internally generated
502/504 errors, as well as handling of cache revalidation with 304,
did not take into account u->conf->no_cache predicates configured.
As a result, an error might be cached even if configuration explicitly
says not to. Fix is to check u->conf->no_cache in these cases.
To simplify usage in multiple places, checking u->conf->no_cache is now
done in a separate function. As a minor optimization, u->conf->no_cache
is only checked if u->cacheable is set.
As a side effect, this change also fixes caching errors after
proxy_cache_bypass. Also, during cache revalidation u->cacheable is
now tested, so 304 responses which disable caching won't extend
cacheability of stored responses.
Additionally, when caching internally generated 502/504 errors
u->cacheable is now explicitly updated from u->headers_in.no_cache and
u->headers_in.expired, restoring the behaviour before 8041:0784ab86ad08
(1.23.0) when an error happens while reading the response headers.
Reported by Kirill A. Korinsky,
https://freenginx.org/pipermail/nginx/2024-April/000082.html
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 25 Jun 2024 21:44:50 +0300 |
parents | 6d1488b62dc5 |
children |
line wrap: on
line source
/* AUTO-GENERATED, DO NOT EDIT. */ #include <stddef.h> #include <stdint.h> #include "ngx_bpf.h" static ngx_bpf_reloc_t bpf_reloc_prog_ngx_quic_reuseport_helper[] = { { "ngx_quic_sockmap", 55 }, }; static struct bpf_insn bpf_insn_prog_ngx_quic_reuseport_helper[] = { /* opcode dst src offset imm */ { 0x79, BPF_REG_4, BPF_REG_1, (int16_t) 0, 0x0 }, { 0x79, BPF_REG_3, BPF_REG_1, (int16_t) 8, 0x0 }, { 0xbf, BPF_REG_2, BPF_REG_4, (int16_t) 0, 0x0 }, { 0x7, BPF_REG_2, BPF_REG_0, (int16_t) 0, 0x8 }, { 0x2d, BPF_REG_2, BPF_REG_3, (int16_t) 54, 0x0 }, { 0xbf, BPF_REG_5, BPF_REG_4, (int16_t) 0, 0x0 }, { 0x7, BPF_REG_5, BPF_REG_0, (int16_t) 0, 0x9 }, { 0x2d, BPF_REG_5, BPF_REG_3, (int16_t) 51, 0x0 }, { 0xb7, BPF_REG_5, BPF_REG_0, (int16_t) 0, 0x14 }, { 0xb7, BPF_REG_0, BPF_REG_0, (int16_t) 0, 0x9 }, { 0x71, BPF_REG_6, BPF_REG_2, (int16_t) 0, 0x0 }, { 0x67, BPF_REG_6, BPF_REG_0, (int16_t) 0, 0x38 }, { 0xc7, BPF_REG_6, BPF_REG_0, (int16_t) 0, 0x38 }, { 0x65, BPF_REG_6, BPF_REG_0, (int16_t) 10, 0xffffffff }, { 0xbf, BPF_REG_2, BPF_REG_4, (int16_t) 0, 0x0 }, { 0x7, BPF_REG_2, BPF_REG_0, (int16_t) 0, 0xd }, { 0x2d, BPF_REG_2, BPF_REG_3, (int16_t) 42, 0x0 }, { 0xbf, BPF_REG_5, BPF_REG_4, (int16_t) 0, 0x0 }, { 0x7, BPF_REG_5, BPF_REG_0, (int16_t) 0, 0xe }, { 0x2d, BPF_REG_5, BPF_REG_3, (int16_t) 39, 0x0 }, { 0xb7, BPF_REG_0, BPF_REG_0, (int16_t) 0, 0xe }, { 0x71, BPF_REG_5, BPF_REG_2, (int16_t) 0, 0x0 }, { 0xb7, BPF_REG_6, BPF_REG_0, (int16_t) 0, 0x8 }, { 0x2d, BPF_REG_6, BPF_REG_5, (int16_t) 35, 0x0 }, { 0xf, BPF_REG_5, BPF_REG_0, (int16_t) 0, 0x0 }, { 0xf, BPF_REG_4, BPF_REG_5, (int16_t) 0, 0x0 }, { 0x2d, BPF_REG_4, BPF_REG_3, (int16_t) 32, 0x0 }, { 0xbf, BPF_REG_4, BPF_REG_2, (int16_t) 0, 0x0 }, { 0x7, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x9 }, { 0x2d, BPF_REG_4, BPF_REG_3, (int16_t) 29, 0x0 }, { 0x71, BPF_REG_4, BPF_REG_2, (int16_t) 1, 0x0 }, { 0x67, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x38 }, { 0x71, BPF_REG_3, BPF_REG_2, (int16_t) 2, 0x0 }, { 0x67, BPF_REG_3, BPF_REG_0, (int16_t) 0, 0x30 }, { 0x4f, BPF_REG_3, BPF_REG_4, (int16_t) 0, 0x0 }, { 0x71, BPF_REG_4, BPF_REG_2, (int16_t) 3, 0x0 }, { 0x67, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x28 }, { 0x4f, BPF_REG_3, BPF_REG_4, (int16_t) 0, 0x0 }, { 0x71, BPF_REG_4, BPF_REG_2, (int16_t) 4, 0x0 }, { 0x67, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x20 }, { 0x4f, BPF_REG_3, BPF_REG_4, (int16_t) 0, 0x0 }, { 0x71, BPF_REG_4, BPF_REG_2, (int16_t) 5, 0x0 }, { 0x67, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x18 }, { 0x4f, BPF_REG_3, BPF_REG_4, (int16_t) 0, 0x0 }, { 0x71, BPF_REG_4, BPF_REG_2, (int16_t) 6, 0x0 }, { 0x67, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x10 }, { 0x4f, BPF_REG_3, BPF_REG_4, (int16_t) 0, 0x0 }, { 0x71, BPF_REG_4, BPF_REG_2, (int16_t) 7, 0x0 }, { 0x67, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x8 }, { 0x4f, BPF_REG_3, BPF_REG_4, (int16_t) 0, 0x0 }, { 0x71, BPF_REG_2, BPF_REG_2, (int16_t) 8, 0x0 }, { 0x4f, BPF_REG_3, BPF_REG_2, (int16_t) 0, 0x0 }, { 0x7b, BPF_REG_10, BPF_REG_3, (int16_t) 65528, 0x0 }, { 0xbf, BPF_REG_3, BPF_REG_10, (int16_t) 0, 0x0 }, { 0x7, BPF_REG_3, BPF_REG_0, (int16_t) 0, 0xfffffff8 }, { 0x18, BPF_REG_2, BPF_REG_0, (int16_t) 0, 0x0 }, { 0x0, BPF_REG_0, BPF_REG_0, (int16_t) 0, 0x0 }, { 0xb7, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x0 }, { 0x85, BPF_REG_0, BPF_REG_0, (int16_t) 0, 0x52 }, { 0xb7, BPF_REG_0, BPF_REG_0, (int16_t) 0, 0x1 }, { 0x95, BPF_REG_0, BPF_REG_0, (int16_t) 0, 0x0 }, }; ngx_bpf_program_t ngx_quic_reuseport_helper = { .relocs = bpf_reloc_prog_ngx_quic_reuseport_helper, .nrelocs = sizeof(bpf_reloc_prog_ngx_quic_reuseport_helper) / sizeof(bpf_reloc_prog_ngx_quic_reuseport_helper[0]), .ins = bpf_insn_prog_ngx_quic_reuseport_helper, .nins = sizeof(bpf_insn_prog_ngx_quic_reuseport_helper) / sizeof(bpf_insn_prog_ngx_quic_reuseport_helper[0]), .license = "BSD", .type = BPF_PROG_TYPE_SK_REUSEPORT, };