]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
netfilter: ip6t_hbh: reject oversized option lists
authorZhengchuan Liang <zcliangcn@gmail.com>
Wed, 13 May 2026 07:57:17 +0000 (15:57 +0800)
committerPablo Neira Ayuso <pablo@netfilter.org>
Sat, 16 May 2026 11:21:41 +0000 (13:21 +0200)
commit4322dcde6b4173c2d8e8e6118ed290794263bcc8
tree2fa8a4faa51360ae4bb431402ab2e5c6c812384c
parenta6cb3ff979855f7f0ee9450a947fe8f96c2ba37a
netfilter: ip6t_hbh: reject oversized option lists

struct ip6t_opts stores at most IP6T_OPTS_OPTSNR option descriptors,
but hbh_mt6_check() does not reject larger optsnr values supplied from
userspace.

Validate optsnr in the rule setup path so only match data that fits the
fixed-size opts array can be installed. This follows the existing xtables
pattern of rejecting invalid user-provided counts in checkentry() and
keeps the packet matching path unchanged.

`struct ip6t_opts` has a fixed `opts[IP6T_OPTS_OPTSNR]` array,
where `IP6T_OPTS_OPTSNR` is 16, then off-by-one array access is possible:

[  137.924693][ T8692] UBSAN: array-index-out-of-bounds in ../net/ipv6/netfilter/ip6t_hbh.c:110:29
[  137.926167][ T8692] index 16 is out of range for type '__u16 [16]'

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Cc: stable@kernel.org
Reported-by: Yuan Tan <yuantan098@gmail.com>
Reported-by: Yifan Wu <yifanwucs@gmail.com>
Reported-by: Juefei Pu <tomapufckgml@gmail.com>
Reported-by: Xin Liu <bird@lzu.edu.cn>
Signed-off-by: Zhengchuan Liang <zcliangcn@gmail.com>
Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/ipv6/netfilter/ip6t_hbh.c