From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.openvz.org (unknown [69.168.225.77]) by lore.virtuozzo.com (Postfix) with ESMTPS id 8BE5F8015A for ; Wed, 9 Sep 2026 12:16:36 +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 689CFPkX019393; Wed, 9 Sep 2026 15:15:25 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 689CFPkX019393 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="IG2QZ8O+" 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 689CF97V019355 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Wed, 9 Sep 2026 15:15:09 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 689CF97V019355 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-482f763db88so3307214f8f.2 for ; Wed, 09 Sep 2026 05:15:09 -0700 (PDT) X-Forwarded-Encrypted: i=2; AKwUvBzoWSJq3Erfm9n+nj2nJAzuSS0RX0qY7SJcDtIlpNTuJQoThWd1SDpUNsyXuZdtPKiZX0Bd8A==@openvz.org X-Gm-Message-State: AFuF++l7kAICrwuG40lbuysw8L9IH5e/LcvVIhRQ7u6F8rlc1BMaNJu/ LI+oLEJUUPIAPPH2aYwNpiNcLYn7wFgp3QzOfFvENxRUn0d1t8UZBf0QRiv2wIo7amTHjuGLfLR Sgmo+G7sTFzLaq3G5cZEzfumFokxWSldfOhbJk0rq+sUNAY7bpnMYwA== X-Gm-Gg: AYBFou0zyaqBr2IcTWzB7W1nCFfhMK56vMVgo+dDA6jr5DZ82/P5Pzaf0vWX0JEtDwE RaGNaTDonwUVX9c8sniX5XRHTJopm/LBAwfE/fNDCU/lIm1/bdoLBeygvrI1aw8sroTJwTHluzu BU3529j8WcDr0pMBSWejMo/gSmSMLYqRykvfebk/2f8OlSXVxCnOB913b2FOOUa43rlxfB9ia1Q VAtDXeso2R9Hkb7/t4VHNg7rZyjKGG60JcQj6JOkWXJOd+kCDKmv/nZAUHrzRj9IWdeNn2v9Dh9 HfYNqmhBeC36+ZURccC2/GzazNBdaqRrmehINaBhK20AFa8FGQsxi74n5mk/T5m7eWNxxMAjYjZ uf2oGJRcJcLSiP4uGQ8axrPZFVa2g X-Received: by 2002:a05:6000:2004:b0:485:8a47:5b90 with SMTP id ffacd0b85a97d-485c2402ef7mr1135729f8f.45.1788956109056; Wed, 09 Sep 2026 05:15:09 -0700 (PDT) X-Received: by 2002:a05:6000:2004:b0:485:8a47:5b90 with SMTP id ffacd0b85a97d-485c2402ef7mr1135688f8f.45.1788956108450; Wed, 09 Sep 2026 05:15:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1788956108; cv=none; d=google.com; s=arc-20260327; b=WFOx1DTQkBF98sFxxkzB/3BvHdY0834iRl2aU81bGmfiK6KpC4OtwFTao9iSZ5kMfS cqN/A1/eHZT+W4NoXtt7lze+bWLThJXv/Cb9TFPsTm1lQSJLYoAGIrC3VOblocX6WU+H dSER5ECrnZkxE8VOgzC52kEjnDuNNGfD1a7en6eSOP1ybSlCWpBSIpaDNxYcEurltgUb HZuHmUvTjQ2pm7Yfk+QWU/6hlxuQJaqUP22LaWUY8o+ubfUZFI9Ev9O+i6c8bRcCWD6j aySKd6Hp52Ido7oDDwrBZRztCQ99rvilHRw+j5vbkb3QCgB5604HtLz8JhVrk/kqbblS baIA== 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=B+NzU4skdlft+p2RUa5/Tk4Nz9b0t8AeGGNBVCwgAs8=; fh=4dppuILCfGifWHfxjIIA1BWoKQtGs1EMopxlFiqV6no=; b=XDDNNCEid0RoF9uTGwMnuVH4rtT+jxGsEQBFLoz5ZtNtuRs3E/MChaW0SndIuo8dCO Ef2Sir9M29aRkvFqLScOIm5IPfFvz5fBrtQI4H7vU4Z8VF5qWs2MIAnuAEVnlX528l5B t4gvEmTIM4XuuPy1geyWInrtzbDnmoxK9GGGOATimjdBMNZVNtK6ps3G45h4vE1RYsjs v0GP7lW9LvVpGj8TsZ2hHi7gqGC8MHT7P7EXGuSXN2FHR+flG2DUflab/6vf/R1kQozP S8mJBjPFfFV/15YIjb9aIFIBB+JPpjEgaiFdweuT2Iy8s6Lu8YBi3JteM6GO0Fk2Vxmi 4Wlw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=IG2QZ8O+; 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-48588137541si33584227f8f.39.2026.09.09.05.15.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Sep 2026 05:15:08 -0700 (PDT) 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=IG2QZ8O+; 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=B+NzU4skdlft+p2RUa5/Tk4Nz9b0t8AeGGNBVCwgAs8=; b=IG2QZ8O+tsmM/c7Mw7G zlhQjHvdDCRvKa57b+acCkruM3fdtnEVBVb2TuoXGaTWEkSz6h0oOBHtRwMhtrGCumkPOT/7VXWjm og2RhjWb/Ah6TjlMmQBNsJzzDW3vvpZ5EBzrLlJVnm7W+LinaodBdFZztOFKxYdoyFe8Rbw6yDvXi jQSZzFpJ3ZjJiBlhxRfkmDBZEeRjCdBSJSQuJiUG0C3jzTLkFakUkvpm0cRiANybpspWmuF6Rv2E1 2BPZumlBxdqdCgdlJ15DH8C3lk4rIDSehzYhJvofCdwqMlAgPedKapx0SAmCcL9VyPuwxEdO/O0qa IzrbTnar4qwt+0Q==; Received: from [130.117.225.5] (helo=dev012.aci.vzint.dev) by relay.virtuozzo.com with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1x4HAC-002Qzu-07; Wed, 09 Sep 2026 14:15:07 +0200 From: Vladimir Riabchun Date: Wed, 09 Sep 2026 12:14:18 +0000 MIME-Version: 1.0 Message-Id: <20260909-ve-selftest-improv-v2-2-aad0a25d6569@virtuozzo.com> References: <20260909-ve-selftest-improv-v2-0-aad0a25d6569@virtuozzo.com> In-Reply-To: <20260909-ve-selftest-improv-v2-0-aad0a25d6569@virtuozzo.com> To: Konstantin Khorenko X-Mailer: b4 0.16.0 X-OZ-Fwd: true Cc: devel@openvz.org Subject: [Devel] [PATCH VZ10 v2 2/3] selftests/ve: Add more 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 Some more read/write helpers may be useful. Also, add a helper to execute functions in child process with switched namespaces and cgroup. https://virtuozzo.atlassian.net/browse/VSTOR-144504 Feature: ve selftests Signed-off-by: Vladimir Riabchun --- tools/testing/selftests/ve/ve_selftest.h | 85 +++++++++++++++++++++++++++++--- 1 file changed, 78 insertions(+), 7 deletions(-) diff --git a/tools/testing/selftests/ve/ve_selftest.h b/tools/testing/selftests/ve/ve_selftest.h index ee960f7db0b4..e88293a39d34 100644 --- a/tools/testing/selftests/ve/ve_selftest.h +++ b/tools/testing/selftests/ve/ve_selftest.h @@ -168,6 +168,14 @@ static inline int write_file_at(int dirfd, const char *path, const char *val) return (ret == (int)len) ? 0 : -1; } +static inline int write_u64_at(int dirfd, const char *path, unsigned long long val) +{ + char s[32]; + + snprintf(s, sizeof(s), "%llu", val); + return write_file_at(dirfd, path, s); +} + static inline int read_file_at(int dirfd, const char *path, char *buf, size_t buflen) { @@ -198,14 +206,9 @@ static inline int read_u64_at(int dirfd, const char *path, unsigned long long *out) { char buf[32] = {0}, *end; - int fd, ret; - - fd = openat(dirfd, path, O_RDONLY); - if (fd < 0) - return -1; + int ret; - ret = read(fd, buf, sizeof(buf) - 1); - close(fd); + ret = read_file_at(dirfd, path, buf, sizeof(buf)); if (ret <= 0) return -1; @@ -216,6 +219,25 @@ static inline int read_u64_at(int dirfd, const char *path, return 0; } +static inline int read_s32_at(int dirfd, const char *path, + int *out) +{ + char buf[32] = {0}, *end; + long tmp; + int ret; + + ret = read_file_at(dirfd, path, buf, sizeof(buf)); + if (ret <= 0) + return -1; + + errno = 0; + tmp = strtol(buf, &end, 10); + if (errno || end == buf || tmp < INT_MIN || tmp > INT_MAX) + return -1; + *out = tmp; + return 0; +} + /* A fresh, private cgroup2 mount, returned as an fd to use with *at() calls. */ static inline int mount_cg2_fd(void) { @@ -259,6 +281,55 @@ static inline int enter_cgroup(int cgv2_fd, int ctid) return ret; } +/* + * Run function in VE cgroup and new namespaces. + * + * Namespaces are provided via unshare_flags. + * CLONE_NEWVE flag is set by this function. + * Return values: + * - 0 if function returns zero + * - -1 if function returns negative value + * - 1 if function returns positive value + * - 2 if setup fails + */ +static inline int run_in_ve(int cgv2_fd, int ctid, struct namespace_ctx *ctx, + int flags, int (*fn)(void *), void *arg) +{ + int status; + pid_t pid; + + pid = fork(); + if (pid < 0) { + fprintf(stderr, "%s: fork failed\n", __func__); + return 2; + } + if (pid == 0) { + int ret; + + if (enter_cgroup(cgv2_fd, ctid) < 0) { + fprintf(stderr, "%s: enter_cgroup failed\n", __func__); + _exit(254); + } + if (enter_namespaces(ctx, flags) < 0) + _exit(254); + + ret = fn(arg); + if (ret < 0) + ret = 1; + else if (ret > 0) + ret = 255; + _exit(ret); + } + if (waitpid(pid, &status, 0) < 0 || !WIFEXITED(status) || WEXITSTATUS(status) == 254) + return 2; + if (WEXITSTATUS(status) == 255) + return 1; + if (WEXITSTATUS(status)) + return -1; + return 0; + +} + /* * Create a fresh VE cgroup at the first free id at or after @from and unhide * its ve.* control files. Return the new id, or -1. -- 2.47.1 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel