|SUCCESS|dpdk|3ad402fa4f| intel-Functional
sys_stv at intel.com
sys_stv at intel.com
Fri Oct 16 02:01:34 CEST 2026
Test-Label: intel-Functional
Test-Status: SUCCESS
_Functional PASS_
DPDK git repo: dpdk
commit 3ad402fa4f567ff6b88612b91b577c40d92be29a
Author: Marat Khalili <qm2k21 at gmail.com>
Date: Tue Aug 25 10:55:29 2026 +0100
bpf/validate: fix mask calculation for 32-bit operations
Function `eval_umax_bits` when calculating the mask matching the
register value counted leading zeroes in 64-bit representation but then
subtracted it from the instruction width (32 for BPF_ALU instructions)
producing zero or negative mask length, all unsupported by macro
`RTE_LEN2MASK`. This function is used by functions `eval_and`, `eval_or`
and `eval_xor` evaluating `BPF_ALU | BPF_AND`, `BPF_ALU | BPF_OR` and
`BPF_ALU | BPF_XOR` correspondingly
E.g. consider the following program with the current validation code:
Tested program:
0: mov r0, #0x0
1: ldxdw r2, [r1 + 0]
2: jgt r2, #0x7fffffff, L7
3: jslt r2, #0x0, L7
4: jsgt r2, #0x7fffffff, L7
5: and32 r2, #0x7fffffff ; tested instruction
6: mov r0, #0x1
7: exit
Pre-state:
r2: 0..INT32_MAX
Post-state:
r2: 0..INT64_MAX
At step 6 validator presumed that r2 may have values up to INT64_MAX,
which is impossible for the 32-bit bitwise operation on 32-bit operands
and could cause false positives.
With sanitizer the following diagnostic is generated:
lib/bpf/bpf_validate.c:821:9: runtime error: shift exponent 65 is
too large for 64-bit type 'long unsigned int'
#0 0x00000837d9b5 in eval_umax_bits lib/bpf/bpf_validate.c:821
#1 0x00000837d9f3 in eval_uand_max lib/bpf/bpf_validate.c:828
#2 0x00000837df83 in eval_and lib/bpf/bpf_validate.c:851
#3 0x000008384faf in eval_alu lib/bpf/bpf_validate.c:1155
#4 0x000008396c24 in evaluate lib/bpf/bpf_validate.c:2999
Similarly for `or32 r2, #0x0`, `xor32 r2, #0x0`.
Found using ESBMC (https://esbmc.github.io/docs/) through an agentic
verification workflow, with integer-overflow and undefined-shift checks
enabled.
To fix the issue change to subtracting clz64 result from 64 instead of
instruction width, add tests. Remove no-longer-used opsz argument
(truncation of inputs to 32 bits is handled by the caller `eval_alu`).
Fixes: 8021917293d0 ("bpf: add extra validation for input BPF program")
Cc: stable at dpdk.org
Reported-by: Sebti Mouelhi <sebti.mouelhi at huawei.com>
Signed-off-by: Marat Khalili <marat.khalili at huawei.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev at huawei.com>
Smoke-Testing Summary : 31 Case Done, 31 Successful, 0 Failures
OS : Ubuntu 24.04.4 LTS
Kernel : 6.8.0-71-generic
GCC : 13.3.0-6ubuntu2~24.04.1
NIC : Ethernet Controller XL710 for 40GbE QSFP+
Target : x86_64-native-linuxapp-gcc
Test result details:
+-----------------+---------------------------------------------------+-------+
| suite | case | status|
+-----------------+---------------------------------------------------+-------+
| checksum_offload| test_do_not_insert_checksum_on_the_transmit_packet| passed|
| checksum_offload| test_hardware_checksum_check_ip_rx | passed|
| checksum_offload| test_hardware_checksum_check_ip_tx | passed|
| checksum_offload| test_hardware_checksum_check_l4_rx | passed|
| checksum_offload| test_hardware_checksum_check_l4_tx | passed|
| checksum_offload| test_insert_checksum_on_the_transmit_packet | passed|
| checksum_offload| test_rx_checksum_valid_flags | passed|
| checksum_offload| test_checksum_offload_with_vlan | n/a |
| dual_vlan | test_dual_vlan_priority_rxtx | passed|
| dual_vlan | test_vlan_filter_config | passed|
| dual_vlan | test_vlan_filter_table | passed|
| dual_vlan | test_vlan_insert_config | passed|
| dual_vlan | test_vlan_random_test | passed|
| dual_vlan | test_vlan_strip_config | passed|
| dual_vlan | test_vlan_synthetic_test | passed|
| dual_vlan | test_vlan_tpid_config | passed|
| dual_vlan | test_vlan_stripq_config | n/a |
| jumboframes | test_jumboframes_bigger_jumbo | passed|
| jumboframes | test_jumboframes_jumbo_jumbo | passed|
| jumboframes | test_jumboframes_jumbo_nojumbo | passed|
| jumboframes | test_jumboframes_normal_jumbo | passed|
| jumboframes | test_jumboframes_normal_nojumbo | passed|
| rxtx_offload | test_rxoffload_port_all | passed|
| rxtx_offload | test_rxoffload_port_cmdline | passed|
| rxtx_offload | test_txoffload_port | passed|
| rxtx_offload | test_txoffload_port_all | passed|
| rxtx_offload | test_txoffload_port_checksum | passed|
| rxtx_offload | test_txoffload_port_cmdline | passed|
| rxtx_offload | test_txoffload_port_multi_segs | passed|
| rxtx_offload | test_txoffload_queue | passed|
| rxtx_offload | test_rxoffload_queue | n/a |
+-----------------+---------------------------------------------------+-------+
DPDK STV team
More information about the test-report
mailing list