From: Konstantin Khorenko <khorenko@virtuozzo.com>
Subject: [Devel] [PATCH vz10 22/32] ve: mark ve0.css with CSS_NO_REF
Date: Fri, 21 Aug 2026 18:37:08 +0200 [thread overview]
Message-ID: <20260821163718.187766-23-khorenko@virtuozzo.com> (raw)
In-Reply-To: <20260821163718.187766-1-khorenko@virtuozzo.com>
From: Eva Kurchatova <eva.kurchatova@virtuozzo.com>
ve0.css is the root css of the ve cgroup subsystem, and ve_cgrp_subsys is
not an early_init one, so the css - its percpu_ref included - is only set
up by cgroup_init(). net_ns_init(), however, runs before cgroup_init()
in start_kernel() and takes a reference on ve0:
start_kernel()
net_ns_init() /* init/main.c, before cgroup_init() */
init_net.owner_ve = get_ve(&ve0)
css_get(&ve0.css) /* flags == 0, refcnt not set up */
percpu_ref_get(&ve0.css.refcnt)
At that point css.refcnt is all zeroes, so __ref_is_percpu() sees no
__PERCPU_REF_ATOMIC_DEAD bits, decides the counter is in percpu mode and
increments *(unsigned long __percpu *)NULL - that is, whatever happens to
live at the start of the percpu area. On x86 that quietly corrupts a
percpu variable on every boot; under User Mode Linux it faults outright,
which is how it was found.
ve0 is a permanent singleton that is never freed, exactly like the root
css objects that cgroup_init_subsys() marks CSS_NO_REF, so give it that
flag from the start. css_get()/css_put() on ve0 then become no-ops in
both windows, before and after cgroup_init().
Fixes: 6087cf234cc5 ("ve/net: thread owning ve through copy_net_ns")
Feature: ve: ve generic structures
https://virtuozzo.atlassian.net/browse/VSTOR-134732
Signed-off-by: Eva Kurchatova <eva.kurchatova@virtuozzo.com>
Signed-off-by: Konstantin Khorenko <khorenko@virtuozzo.com>
---
kernel/ve/ve.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/kernel/ve/ve.c b/kernel/ve/ve.c
index 0f0e1a424953..750a1b2882a7 100644
--- a/kernel/ve/ve.c
+++ b/kernel/ve/ve.c
@@ -53,6 +53,7 @@ static struct kmem_cache *ve_cachep;
static DEFINE_PER_CPU(struct kstat_lat_pcpu_snap_struct, ve0_lat_stats);
struct ve_struct ve0 = {
+ .css = { .flags = CSS_NO_REF },
.ve_name = "0",
.start_jiffies = INITIAL_JIFFIES,
--
2.47.1
next prev parent reply other threads:[~2026-08-21 16:37 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-21 16:36 [Devel] [PATCH vz10 00/32] Fix the VZ kernel build so that KUnit can run Konstantin Khorenko
2026-08-21 16:36 ` [Devel] [PATCH vz10 01/32] sched/loadavg: fix build with CONFIG_CGROUP_SCHED=n Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:36 ` [Devel] [PATCH vz10 02/32] sched/core: guard cpu_cgrp_subsys.depends_on with CONFIG_CGROUP_CPUACCT Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:36 ` [Devel] [PATCH vz10 03/32] sched: move MAX_CPU_RATE out of CONFIG_CFS_CPULIMIT Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:36 ` [Devel] [PATCH vz10 04/32] sched/cpuacct: guard ve_root_tg() with CONFIG_CFS_CPULIMIT Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:36 ` [Devel] [PATCH vz10 05/32] ve: source Kconfig.openvz from arch/um/Kconfig Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:36 ` [Devel] [PATCH vz10 06/32] ve: select CGROUP_PERF only if PERF_EVENTS Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:36 ` [Devel] [PATCH vz10 07/32] ve: add missing Kconfig selects for CONFIG_VE Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:36 ` [Devel] [PATCH vz10 08/32] mm/oom: build the berserker mode only with CONFIG_MEMCG Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:36 ` [Devel] [PATCH vz10 09/32] proc: build the per-Container oom_score limit lookup " Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:36 ` [Devel] [PATCH vz10 10/32] mm, proc: build the /proc/meminfo virtualization only with CONFIG_VE Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:36 ` [Devel] [PATCH vz10 11/32] mm/vmstat: build the /proc/vmstat " Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:36 ` [Devel] [PATCH vz10 12/32] mm/shmem: build the tmpfs size " Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:36 ` [Devel] [PATCH vz10 13/32] mm/memcg: keep mem_cgroup_per_node::nid available with CONFIG_MEMCG_V1=n Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:37 ` [Devel] [PATCH vz10 14/32] mm/memcontrol: build memory.numa_migrate only with CONFIG_NUMA Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:37 ` [Devel] [PATCH vz10 15/32] ms/percpu: introduce PERCPU_PTR() macro Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:37 ` [Devel] [PATCH vz10 16/32] ms/percpu: cast percpu pointer in PERCPU_PTR() via unsigned long Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:37 ` [Devel] [PATCH vz10 17/32] mm/memcontrol: add missing inline to the mem_cgroup_fill_meminfo() stub Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:37 ` [Devel] [PATCH vz10 18/32] block: guard the cbt_list initialization with CONFIG_BLK_DEV_CBT Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:37 ` [Devel] [PATCH vz10 19/32] ve: include asm/vdso.h on x86 only Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:37 ` [Devel] [PATCH vz10 20/32] ve: compile the per-Container VDSO copies only on x86 Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:37 ` [Devel] [PATCH vz10 21/32] ve: compile the CPUID override propagation " Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:37 ` Konstantin Khorenko [this message]
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] ve: mark ve0.css with CSS_NO_REF Konstantin Khorenko
2026-08-21 16:50 ` [Devel] [PATCH vz10 22/32] " Konstantin Khorenko
2026-08-24 8:50 ` Pavel Tikhomirov
2026-08-21 16:37 ` [Devel] [PATCH vz10 23/32] mm/memory: build the page fault latency accounting for x86 only Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:37 ` [Devel] [PATCH vz10 24/32] sched/core: include cgroup-internal.h only where it is used Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:37 ` [Devel] [PATCH vz10 25/32] kernfs: build the KERNFS_GET_NS ioctl only with CONFIG_NET Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:37 ` [Devel] [PATCH vz10 26/32] fs/fs_context: build the mount option formatting only with CONFIG_VE Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:37 ` [Devel] [PATCH vz10 27/32] net/unix: fix unix_stream_recvmsg() build with CONFIG_BPF_SYSCALL=n Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:37 ` [Devel] [PATCH vz10 28/32] redhat: rh_flags: make the !CONFIG_RHEL_DIFFERENCES stubs inline Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:37 ` [Devel] [PATCH vz10 29/32] ms/pcmcia: cistpl: Constify 'struct bin_attribute' Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:37 ` [Devel] [PATCH vz10 30/32] redhat: rh_waived: add a stub for CONFIG_RHEL_DIFFERENCES=n Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:37 ` [Devel] [PATCH vz10 31/32] ext4: select LIBCRC32C Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
2026-08-21 16:37 ` [Devel] [PATCH vz10 32/32] kunit: add the script dir to sys.path for PYTHONSAFEPATH compatibility Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260821163718.187766-23-khorenko@virtuozzo.com \
--to=khorenko@virtuozzo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox