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 E9E5C8017D for ; Wed, 21 Oct 2026 16:58:46 +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 69LGvUMt022988; Wed, 21 Oct 2026 19:57:31 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69LGvUMt022988 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="mvjqG1HR" Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 69LGvMIR022941 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Wed, 21 Oct 2026 19:57:23 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69LGvMIR022941 Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-48af4046a3bso852892f8f.2 for ; Wed, 21 Oct 2026 09:57:23 -0700 (PDT) X-Gm-Message-State: AFq9FYKzG1igaKov2EMGS19dC1dWaX/cPH4HfSU+6zINQtXs0wm614l2 CHK3m49au2+JpuA1U3DGsNCD2ARz0weY6bT/fe89pZWouuWySKY/uW2MVkSl/1SUMwb6Y52S05q Q/XvrwCDyzxj6VSOUiJLH5ktQLzcpYT2fDby0LLA7jknk5J3ZOOgxzg== X-Gm-Gg: AYBFou3jVuYYpc+wOyGzfpGyyzELhd+QXCLcXgulZYsF4n0UOckSku1Cj6l9zTvB0+V 0ZL7McuhV0Lu3TZdjCYP76+ejGbRmB/3eGsaPD2b+wikQn90GO48Z9tzA3/QjVwogmiW9kydBfv 5Wl4bqW4Xqm0qG1v9JaZrC2iKLKEdvTvJZ3WlZMPCjKfRR/3U6r4+Ge9KRkIpT8TBOfs7gDqdZG B2VoWoTmeaIsdreNRZ1BtOJnZerxCUkSGBuYtDd/2hf5VqUYBstANYuQIA0hE6573b9+CM4dy3W x0a+0f1UxGm/KB5jmRdySgesOnfpza4RdY1EvCx8WP5iYiOV2be7fkg67D8mkBKhG//AHGi6C6q AuCODw6GitATjY32a X-Received: by 2002:a5d:5f55:0:b0:48e:c84:5be6 with SMTP id ffacd0b85a97d-48e264a1b69mr6115986f8f.14.1792601842735; Wed, 21 Oct 2026 09:57:22 -0700 (PDT) X-Received: by 2002:a5d:5f55:0:b0:48e:c84:5be6 with SMTP id ffacd0b85a97d-48e264a1b69mr6115920f8f.14.1792601842224; Wed, 21 Oct 2026 09:57:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1792601842; cv=none; d=google.com; s=arc-20260327; b=YdbGjuAz5YXhjcUlbPTMFKG5RDeM3fftxaJKarPLZy8hoEICwcv/EWO9zjVh1J/msd ec47z59HCR8Ag+sGjXBhpeuUqkuMYc/z4yHZ2hEnRqcWOxC4+U43MJ99mswkOj0oAlW6 NCj5enrClKkHQR7W0WbxadlTYo/YghaQjkQqv9y+FZfJMJsjzzvrGOrPYYlca2JbHBcK kyZzkrmGLM+2NyEaGbVUv4BhjnHcP0EU5CHVcvK2XfKx2IN8ZzPhnGD3oixdiDn1rb4A dGV6kj9nZxp19YDt8GKjBysm1biLAVt0EzO5Vjb61YFQHRZDO8hgkcyxwb72ZjT4GYvp +A7w== 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=gQXSuESkW4iaO1leeT6a8yOvZGJxWlj1A8I/rda/O80=; fh=ORqO450YHYjnAvQVnHrQRoSXc/Ljts4WdUx12SqEe+w=; b=luBI2ze+WEys9PsU0pTYNJPyN0xVWLE3ppzsCoMpQ9ys6QklHxu2s/YJc5zwGNHT3F hnPCU1kNAEBIVtTNwNglnKZ9JlZsP0cuC3IxAFOek52AwYycMAiyxVvYK+MnlbeuIfrJ WbRZrSs7PCIcL5BOl/IzDBo324LFA3bG8koaUdaT51O5Vv7bcPzibhZkb69KdPdRXUNa b2GVxMLILjY8HUBg1B975u4vo1Gr3Oda53F27V5jmkIb8fZFUJrnfMAZwP+fIWKzXlAd iquCKxFmaaZz+1msW+QRFF3wGyEsgZNqRHYU9NM5+qGFjOlMCyVrG9gad9BK81STYXHB rRGg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=mvjqG1HR; spf=pass (google.com: domain of khorenko@virtuozzo.com designates 130.117.225.111 as permitted sender) smtp.mailfrom=khorenko@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-48e25845f43si5947167f8f.127.2026.10.21.09.57.21 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Oct 2026 09:57:21 -0700 (PDT) Received-SPF: pass (google.com: domain of khorenko@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=mvjqG1HR; spf=pass (google.com: domain of khorenko@virtuozzo.com designates 130.117.225.111 as permitted sender) smtp.mailfrom=khorenko@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=gQXSuESkW4iaO1leeT6a8yOvZGJxWlj1A8I/rda/O80=; b=mvjqG1HRKqoAsspXiBq DP+a34Dd06ErWU8pl1yb07k0KOhOoHU9YCA4AeoLcMgpqN55atMONl0Ajv5tm72YL+ex/oBi9iNz7 hZRIQa9jKMs1RxKVX66LIDZguIxYkEb8S0RSATyy4QXdu6RDsZTjMOBOTUnzJhE3Ey4EAe60m3rYL +cUkKekv+ArtlhIcPigtDaZjGR0PP1bhbxpHzx1mWMubYpswszFme5hB+wshysRvBKi9/GCFUuY5P SB+vUwxf5oxreenHA51+PQaJtERT+JZYXGzqbpWHinPCqoIBdV5e0kaxZUz3GMvZFkk9OFmsl2x5v dWwAmPA4lZtSkcQ==; Received: from ch-demo-asa.virtuozzo.com ([130.117.225.8] helo=f0.sw.ru) by relay.virtuozzo.com with esmtp (Exim 4.96) (envelope-from ) id 1xJZZJ-008y7H-2q; Wed, 21 Oct 2026 18:57:20 +0200 From: Konstantin Khorenko Date: Wed, 21 Oct 2026 18:57:17 +0200 MIME-Version: 1.0 Message-Id: <20261021-b4-prep-khorenko-vstor-149847-5-doexec-selftests-v2-4-97dbb5c6e0ab@virtuozzo.com> References: <20261021-b4-prep-khorenko-vstor-149847-5-doexec-selftests-v2-0-97dbb5c6e0ab@virtuozzo.com> In-Reply-To: <20261021-b4-prep-khorenko-vstor-149847-5-doexec-selftests-v2-0-97dbb5c6e0ab@virtuozzo.com> To: Andrey Drobyshev , Pavel Tikhomirov , Vasileios Almpanis X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2223; i=khorenko@virtuozzo.com; h=from:subject:message-id; bh=rSIzjrW3OdMV6vm/x8qnJLoAAI/JkMYcz3ZIfzw71/E=; b=owEBbQKS/ZANAwAKAVGWCkf5YVwqAcsmYgBq2O7uh/cflOLXlS4eH4J5ajMPqHH6fzpZb6P5z HLTznviQmCJAjMEAAEKAB0WIQRWD23IPcXT0GO9CCxRlgpH+WFcKgUCatju7gAKCRBRlgpH+WFc KhPJD/4vpHHts8K+Sd0JzMvdb752DtY6pK25UK6kxv8RPX8HN8UIYl669K1Lgix8JQYQxCPVTTi MDyW1KljMIq+kejelUPE74fMQYCt8hxbaAkOButVgtDH63QQjXsMD+Tsodbp0cmBE+GTkycqWWf 19cJVVuLhKHGFBHTgPXgL9rRPDUDL/gjsaAmquglW97bVnQchwnjcLq7FEfQUvkpksbJ9BhPaJw kAW5u1E742pSjSd88A6Vz9hR4uIRjSQ2kdDTrUIbHqCvlIwcXL3S40PGbJyxKCj8DYg9mOqc7iR 1FKdYnCDOplM6RbVRQv8cckhNZwEGGRT6/ZWvfkvGFUn8in1F/BHsKKhaE5vzrfUzORTaOq6fmk 8R+ezYR+UpKBZydlNhBVglbZi1lUFGtIRQJAJNtnxtj55VnPFJzJZbxqfOBkto7vlMTGRz11AV5 3v72K6luBvPHT1nDY4ryhYv2u50t9EXhVN82xQYR+z03pkMfGQVY9aNUKY6xP9WjynlwGAVFay0 uW7Sefui6+8uDPuYvMPHEQAXTy80iUW5vBNOfls3Ie+iAKqfGCPrjHrlYwqw3xBf7RixXOwXaMz K9qe5gCV+/ViY9UslPMtXAVa22KHzvsw8GyI3kO3xqGUqhrs+kMqnkYflxCfdo/MpHy1+fHIsW7 Gd0w3k5dmpcaI1g== X-Developer-Key: i=khorenko@virtuozzo.com; a=openpgp; fpr=560F6DC83DC5D3D063BD082C51960A47F9615C2A X-OZ-Fwd: true Cc: devel@openvz.org Subject: [Devel] [PATCH hci-8.1 v2 4/9] selftests/mm: check that MADV_DOEXEC refuses an exec from a vfork() child 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 A vfork() parent shares the mm with the child and would be woken in exec_mmap() before the preserved ranges are copied, so the exec is refused with EBUSY. Check the errno in the child and that the parent's marked memory is intact afterwards. https://virtuozzo.atlassian.net/browse/VSTOR-150234 Feature: oracle/mm: MADV_DOEXEC madvise() flag Assisted-by: LLM Signed-off-by: Konstantin Khorenko --- tools/testing/selftests/mm/doexec.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tools/testing/selftests/mm/doexec.c b/tools/testing/selftests/mm/doexec.c index fbba87c7033ef..a77ebd5f99cd4 100644 --- a/tools/testing/selftests/mm/doexec.c +++ b/tools/testing/selftests/mm/doexec.c @@ -1851,6 +1851,33 @@ struct more_case { int (*fn)(void); }; +/* A vfork() parent shares the mm and survives the exec: refused. */ +static int vfork_exec(void) +{ + size_t size = sysconf(_SC_PAGESIZE); + char *ram = preserved_ram(size); + char addr_arg[32], size_arg[32]; + char *args[] = { "doexec", "--check", addr_arg, size_arg, "1", NULL }; + enum { REFUSED = 10 }; + pid_t pid; + + if (!ram) + return unsupported(); + snprintf(addr_arg, sizeof(addr_arg), "%llu", + (unsigned long long)(uintptr_t)ram); + snprintf(size_arg, sizeof(size_arg), "%zu", size); + pid = vfork(); + if (!pid) { + execv("/proc/self/exe", args); + _exit(errno == EBUSY ? REFUSED : KSFT_FAIL); + } + if (pid < 0) + return KSFT_FAIL; + if (wait_child(pid) != REFUSED) + return fail("preserving exec from a vfork() child not refused"); + return check_bytes(ram, size, 0x31) ? KSFT_FAIL : KSFT_PASS; +} + static const struct more_case more_cases[] = { { "madv_doexec_flag sysctl matches MADV_DOEXEC", sysctl_flag }, { "shared, file, executable and stack mappings refused", refused_mappings }, @@ -1870,6 +1897,7 @@ static const struct more_case more_cases[] = { { "1 GB sparse range: preserved", sparse_exec }, { "swapped out pages: preserved", swapped_exec }, { "half of a THP: preserved", thp_half_exec }, + { "vfork() child: preserving exec refused", vfork_exec }, }; int main(int argc, char **argv) -- 2.43.0 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel