From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.openvz.org (mail.openvz.org [69.168.225.77]) by lore.virtuozzo.com (Postfix) with ESMTPS id 04C3E810EB for ; Tue, 3 Nov 2026 09:26:22 +0000 (UTC) Received: from mail.openvz.org (localhost [127.0.0.1]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 6A39P4R7003334; Tue, 3 Nov 2026 12:25:05 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 6A39P4R7003334 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="xGISmkNn" Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 6A39OpXD003297 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Tue, 3 Nov 2026 12:24:52 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 6A39OpXD003297 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-48dfa054f26so3153974f8f.2 for ; Tue, 03 Nov 2026 01:24:52 -0800 (PST) X-Forwarded-Encrypted: i=2; AKwUvBzamObPH3fEEjG8pQAW69JjDe45f8YtD1yGOPmXfyoZCAIrr/hOammSMa0CK5L1lv0pYUi4wg==@openvz.org X-Gm-Message-State: APuU4Z9N8VIlJXoheSgWZcxSqy1hBTwfF9KqLi6g/F+Txc46ZI2VKRn0 d2DXCps5g1s7xDcW4Woo5itPok0/QbdtAm9rWrYamlaFIqGQye0rSFDIXm8ZOn3TzZrGN1GB5wz buWTXYNHn6yp0Ywr1IerGhoZDGB+lQN9k3xdux6oQDWCYFbG3SD3jTQ== X-Gm-Gg: AYBFou1qFblHS193s78wZJLNF/OKvkWhq+SVNivs1jDMTKy71m3GIoMQ1sIsok4pzzk +b0JX3C8bH3i9PrwFt2DXGM5Z2X6uFo6RUhS9Y3J7If/gwbJxCYYiENZQxvgmPORHdfU/DYeKBr NzE5ldMHlXBIQwE8pyl7OwA1RdNxtYmqP0Pf45HuKjUMdi36We5GJckYsgfXUwVtCK+hvxXn9bG pTHtRm2SNJweUWYpwr5D3HJKcSKJ1UJLqkOdmFbBIJVuiTaNuQfIIw8hxQBkT+CSxVWzyiQasTu 9lDUm0glTG9UQ44Hd5S2fU7fgmETGDVj3ApIbTrFC9ceHYme6fOc/t9vWk7yq+WFezUpU2J6O2s zeY+WzAWzX6Sw6Rvh7b/Pj8XALqzv X-Received: by 2002:a05:6000:4710:b0:48e:eb5:4976 with SMTP id ffacd0b85a97d-48e6e306dedmr26802402f8f.53.1793697891475; Tue, 03 Nov 2026 01:24:51 -0800 (PST) X-Received: by 2002:a05:6000:4710:b0:48e:eb5:4976 with SMTP id ffacd0b85a97d-48e6e306dedmr26802361f8f.53.1793697890953; Tue, 03 Nov 2026 01:24:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1793697890; cv=none; d=google.com; s=arc-20260327; b=sEtC89MHRdDNpIlge02/WnOtgTajCT9Nww5ieVYFuK2La5lrydC6bTLOHXGGNgL+5t dW8KzSibmIAUE4mf8kD0S6oPXt+H5m4V5WaT+rCGI14+VbVfh5wSWKyHfDK6UbIt3Upk 7XMvjb34FvVO7+SnRDfI3pQHi/du4/Ys1pxsv40bhVVC/oXFHVTmV0JyaLfC00cbf0DC ADbKtU5zBsjiq7Xj0neEY6vDpZqP6la9243+ofgYZ+a/WKvfc9mN7GOFf/hWQ/OaEqD2 LuVSq1+xhGnchyY063Lx3V0QiRK30SszH67q1DLhCW6uavC1UF+qjNqEdfG3Mb+sUQFz /BAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:dkim-signature; bh=qZg+L0dkPtW28F8IEDKqIwcw18YUUSGI/12wNX6i7nc=; fh=5hQRK+XZF8m8FADH0g5yAiDkSoTAVGTSxnnvVVATGZQ=; b=YI78jXXG0gB+l+R36TCBrlIAuKvL2IaDEg7LA6aB2ZWTDyR9kv7r1+2VLrhYCwvaoG krJMM8Lzwm2/vGNWtqCRmbpRWOUDDmBHb4o98tzJvhZFFxT9xa/Tm8WAPZlId6h53kT0 QoXC4kuUDaoKNo0/pg3cUuglyt9znUpM2Xq96GBU5Lr/33mj2HoDzTU/7rI37bkAukB7 UynU53yS2QvUxYnnpmtBgimcSjxB/PzdoyulfAWov63BLFMVIceUdQowzrEdg8pr9zr5 Lr2I2po2VduK4wsiYiHMJQfs98hKF8fwlYVUPyPhi1FCrfMoI6oVamWK/GrXnoowpSy6 TJdg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=xGISmkNn; spf=pass (google.com: domain of vladimir.riabchun@virtuozzo.com designates 130.117.225.111 as permitted sender) smtp.mailfrom=vladimir.riabchun@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: from relay.virtuozzo.com (relay.virtuozzo.com. [130.117.225.111]) by mx.google.com with ESMTPS id ffacd0b85a97d-48e719f6323si22710450f8f.0.2026.11.03.01.24.50 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Nov 2026 01:24:50 -0800 (PST) Received-SPF: pass (google.com: domain of vladimir.riabchun@virtuozzo.com designates 130.117.225.111 as permitted sender) client-ip=130.117.225.111; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=xGISmkNn; spf=pass (google.com: domain of vladimir.riabchun@virtuozzo.com designates 130.117.225.111 as permitted sender) smtp.mailfrom=vladimir.riabchun@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=virtuozzo.com; s=relay; h=Message-Id:Content-Type:MIME-Version:Subject:Date :From; bh=qZg+L0dkPtW28F8IEDKqIwcw18YUUSGI/12wNX6i7nc=; b=xGISmkNn5T+PSfxTxlG DM/NX3F0kwVetEZZVwo0lRdaQyyhVY0WEBBjLAEprX4QycHjZn/Qq/psH7c+KbS+9HAYqLyzoimDD f6BGfW2CzdFTjlh4l2JfS/KVPDxPdxD56TwMWJjfFBzeGGUB2pIeTjUH8o/oyA8dabpNRWcvMvjoq gp77IugifMhDlaAafvkXZ1ko5TEnpgYp6qbPUEeu2S2KU0/kioWBOfXcxfty65sxyAgoipzJSnPBJ FOmYFWRf0Oe5dOR7SRVPDEo7CQG/v8d4o1WFrRbiw6BQFT4fM73Mb5zCfbEGl9AyzN8fyhB0gxuLF xANYEF0qJcDNDWw==; Received: from ch-demo-asa.virtuozzo.com ([130.117.225.8] helo=192.168.1.87) by relay.virtuozzo.com with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1xOAhD-00A8S5-24; Tue, 03 Nov 2026 10:24:41 +0100 From: Vladimir Riabchun Date: Tue, 03 Nov 2026 10:24:38 +0100 MIME-Version: 1.0 Message-Id: <20261103-ovl-use-orig-ve-v3-2-add042cdd087@virtuozzo.com> References: <20261103-ovl-use-orig-ve-v3-0-add042cdd087@virtuozzo.com> In-Reply-To: <20261103-ovl-use-orig-ve-v3-0-add042cdd087@virtuozzo.com> To: ptikhomirov@virtuozzo.com, Konstantin Khorenko X-Mailer: b4 0.16.0 X-OZ-Fwd: true Cc: devel@openvz.org Subject: [Devel] [PATCH hci-8.1 v3 2/5] ve: Introduce override_ve/revert_ve helpers X-BeenThere: devel@openvz.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: OpenVZ development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: devel-bounces@openvz.org Errors-To: devel-bounces@openvz.org These helpers mirror override_creds/revert_creds and are supposed to be used together in cases when VE creds may be stored and later used by the different VE task. To keep task_ve consistent for other users, introduce a separate task->overrided_ve field. Nobody should race on it since its updates are supposed to go with override_creds, and non-current processes shouldn't do this. https://virtuozzo.atlassian.net/browse/VSTOR-142405 Signed-off-by: Vladimir Riabchun --- include/linux/sched.h | 1 + include/linux/ve.h | 24 ++++++++++++++++++++++++ kernel/capability.c | 6 ++++-- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/include/linux/sched.h b/include/linux/sched.h index 10545e470d3d..7f4e6b1fde38 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1065,6 +1065,7 @@ struct task_struct { #ifdef CONFIG_VE struct ve_struct *task_ve; struct ve_namespace *ve_ns; + struct ve_struct *overrided_ve; /* NULL when no overrides */ #endif #ifdef CONFIG_PREEMPT_RT struct netdev_xmit net_xmit; diff --git a/include/linux/ve.h b/include/linux/ve.h index 717567775f58..c07484b4eee2 100644 --- a/include/linux/ve.h +++ b/include/linux/ve.h @@ -295,6 +295,23 @@ static inline struct vdso_image *ve_get_vdso_64(struct ve_struct *ve) return ve->vdso_64; } +static inline struct ve_struct *override_ve(struct ve_struct *new_ve) +{ + struct ve_struct *old_ve = current->overrided_ve; + + /* CT tasks are not supposed to switch VE context, this is a breach */ + if (WARN_ON(new_ve != get_exec_env() && !ve_is_super(get_exec_env()))) + return ERR_PTR(-EPERM); + + current->overrided_ve = new_ve; + return old_ve; +} + +static inline void revert_ve(struct ve_struct *orig_ve) +{ + current->overrided_ve = orig_ve; +} + #else /* CONFIG_VE */ #include #include @@ -405,6 +422,13 @@ static inline struct vdso_image *ve_get_vdso_64(struct ve_struct *ve) } #endif /* CONFIG_X86 */ +static inline struct ve_struct *override_ve(struct ve_struct *new_ve) +{ + return NULL; +} + +static inline void revert_ve(struct ve_struct *orig_ve) {} + #endif /* CONFIG_VE */ struct seq_file; diff --git a/kernel/capability.c b/kernel/capability.c index 34716847c6b8..6de4dcba2283 100644 --- a/kernel/capability.c +++ b/kernel/capability.c @@ -389,10 +389,11 @@ EXPORT_SYMBOL(ns_capable); bool ve_capable(int cap) { struct cred *cred; + struct ve_struct *ve = current->overrided_ve ?: get_exec_env(); bool ret; rcu_read_lock(); - cred = get_exec_env()->init_cred; + cred = ve->init_cred; if (cred == NULL) /* ve isn't running */ cred = ve0.init_cred; @@ -406,10 +407,11 @@ bool ve_capable(int cap) bool ve_capable_noaudit(int cap) { struct cred *cred; + struct ve_struct *ve = current->overrided_ve ?: get_exec_env(); bool ret; rcu_read_lock(); - cred = get_exec_env()->init_cred; + cred = ve->init_cred; if (cred == NULL) /* ve isn't running */ cred = ve0.init_cred; -- 2.52.0 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel