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 5961D802A5 for ; Wed, 14 Oct 2026 17:12:38 +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 69EHBJ9v001201; Wed, 14 Oct 2026 20:11:20 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69EHBJ9v001201 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="pwZeTjxg" Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 69EHBHnU001179 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Wed, 14 Oct 2026 20:11:18 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69EHBHnU001179 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-48c54e690c5so3248167f8f.0 for ; Wed, 14 Oct 2026 10:11:18 -0700 (PDT) X-Gm-Message-State: AFq9FYJAcyvQJ2hksgNNtXUcZCoygDVqj5BlKdGr8pD+v3iNrdp7jvGt 4VVGNB7bakrA4iyQ2Ayi8vOYCQ+xj06j4Kadk3Of6XEv9OzJK0ZMS3VKYSJUfJbpgb0p3en7mJr 1vPkJIKCRtmSk7EuW4L8RaUrfxC+urUO/omI3RgevHhU8pMCi7jpOWg== X-Gm-Gg: AYBFou3gDuFctQg2YjTeabNgGQ4FXh+0S/jcRfcJij6KeC4UyHYqodCY3LsMaNOsZ4j tP3PjodGNhql0MMvpocGqzqbNmG975zG1ZUfTf9h9UlhR9MLrwz0YVa+pUVksp92lukaNjNEhcO InP+iKnHvRo4tdq2SIVUKd/gnrJzsqLn6BGoKXUx50gi9j4psszjFCFMYmvQ/0EwrQGY0I4RH5m b9JHyDoHQRu+Ne4yUhyhdxdMrsFFx7WBu2NWCUiWEX7uzXwxIwXESX24BjL1U2CZqyN4veHd4tm MKOXjrwS6zjP/Rt0+AF4nLfrJKizZDXxbIcWrTBmAaaeWkicaat+GNWU4W1ZIFVTFFqXpNgXpeb YijR1I3uH9XQXxDsx X-Received: by 2002:a05:6000:200e:b0:488:8131:c684 with SMTP id ffacd0b85a97d-48dbace9c6bmr30309129f8f.13.1791997877652; Wed, 14 Oct 2026 10:11:17 -0700 (PDT) X-Received: by 2002:a05:6000:200e:b0:488:8131:c684 with SMTP id ffacd0b85a97d-48dbace9c6bmr30309078f8f.13.1791997877054; Wed, 14 Oct 2026 10:11:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1791997877; cv=none; d=google.com; s=arc-20260327; b=FYp0vGTNVjLVt3MAIGLmKYKXJVf6ztiIVKLOmLXCXdKnleL375ZI1lRB7pli7IXR7A FDfa8HAwXvfwuEFmf56vbA/CZBibnnQAiWfvKoOLaLf/FAQEkfj1dofAGCvdlseHhUQK qZHIJkDpLggcitdzoUWegEYTqLSLe/1HCHkzA7bfJDz1qL17RbbQUfc0cHR/99JyHsJc 2LgbjJCTFasGdDtf/+M6ybPbpUq58KogNqXZ6Lmw/C16DU1/SXxSvyfdHo+jVWRcw/GP 1qpaZPoMRlFx6Wl7hn1bQqG9xMThwfpXAO787Z+z1lJzpKV9MXuamD0v3KnFgKTxd8+N QFMA== 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=+nXTTr1WFD5Zg7xv/hpjPs90YSzYxHEGDKS2b/L42ow=; fh=aQfw1i5a4NQPWqzJLDKkrMTvdRoUn/cswL6yDWdmKfA=; b=qDWpdv9yMbYME77QRDZ+cSURW/RYb/agFttWA1aeffdUNEkc8ejswpjXjGnbLJFp3Q mzt93ysuKsNkratKfOkgV49eBWboYpqSCJSS9NXwO0xINHzDL8qpdUf0CgUT+GF3Q8JF ACYlUwokTBEPXqVSJJO2danvrhSJkE37un5M8ivDRxKKhfwvgc0bK7zqovtYw+uYar3M fTW/mBO309QUYHdWmPRNeiYcOOwoX09EKmdd+mEAAiWn8yew4edLEFWS3ZWriy4ePiIx LLKynQFoaY4n+ovMAiE2MqtSB9QhFI21fDk9n9J2uiBUaxr7SxOzYdx6yVQAWgjstAc3 mgeg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=pwZeTjxg; 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-48df1bc73a3si1084451f8f.43.2026.10.14.10.11.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Oct 2026 10:11:17 -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=pwZeTjxg; 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=+nXTTr1WFD5Zg7xv/hpjPs90YSzYxHEGDKS2b/L42ow=; b=pwZeTjxgWh6U/CelGjl ZcyM4Wtc7/pdd322G8JW6OU6+WG9X/VqQaq9xn6GvRXXtckeIUwPzFq1fkmQ6bPBitbTsyIBG24mW kELPpZ11XaZOuavT6NQmuFKAaTZOwrYFwMPQvGGUsP2zOQLbUbVRWeqmslZf+h7NgkXCm3wDgOP/d eN03DIA8KSIWwzk5d8vho2YSY37l6pB+vOahMHJ5i4qE6zS9mvCJzFoT2G7CEuo1PUUxHBOj/330Q te5PbRmO7qYdjQcb3VBY4FAtC6ZBxIKhU+g3Aqj35L2H9RKqx/xoGgJsoTszDU/buSyi6Ei8EXXMj DP1dMeC2cYaij6Q==; 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 1xH2S7-0081J5-1v; Wed, 14 Oct 2026 19:11:15 +0200 From: Konstantin Khorenko Date: Wed, 14 Oct 2026 19:11:06 +0200 MIME-Version: 1.0 Message-Id: <20261014-b4-prep-khorenko-vstor-149847-2-doexec-pinned-memory-v1-3-36f1120f9b57@virtuozzo.com> References: <20261014-b4-prep-khorenko-vstor-149847-2-doexec-pinned-memory-v1-0-36f1120f9b57@virtuozzo.com> In-Reply-To: <20261014-b4-prep-khorenko-vstor-149847-2-doexec-pinned-memory-v1-0-36f1120f9b57@virtuozzo.com> To: Vasileios Almpanis , Andrey Drobyshev , Pavel Tikhomirov X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=4230; i=khorenko@virtuozzo.com; h=from:subject:message-id; bh=Ap4U6rtAgQ40peQAvfp6XyuLAbJWO9DGa82C/Pe9uU4=; b=owEBbQKS/ZANAwAKAVGWCkf5YVwqAcsmYgBqz7ewajpJFHWVasnpiyPdyCNXFEkS0hXQL7XNc urQI/tfYkOJAjMEAAEKAB0WIQRWD23IPcXT0GO9CCxRlgpH+WFcKgUCas+3sAAKCRBRlgpH+WFc KuiVEAC4XN7JnXW/fHxuG2U5AemKxUFoSvmm+CXm+++5qbQRNV7LG/+Pjr6MF4R9obWGPpeIV6P GQpqzIGeVlMcPiqlMSGuvwWHZo8R63xNnSUC5h65/ActV8M2Xk5HKIbfR+2v/9smVefGfTwblUm eeQV59pXtt+9ADc/EVttLZbtZN6Gf2qPOVfESMThD0gT0w3biNTOgIX6eVk6CPyhbdmL+8nm+uB 3+cFalcI0gzDl2tohZ0VBbQFGhxBHD7cjJoCezVAbAbtnM5GhnqmGgJdDfCO9jGf5ss5cU+lJXW y/3X4nvS2rNjbabPdqaS5JWUPqHhz8HDB2VY3gs4dO9nGRgfbbTaRUPs07dODhnPs6t7P/Zh+72 Uo5bGP8sfiizxfOc6mnUTDiRuxPvj0roCY98qsSQ75BN4glb+7bU4hPP8/8x52nUPTZVv0As1zm CcILtVMCrGZCJpg4j7SneaPq8bnn24rKcOYqv345mLz3PqzevJrmltNUNw9VuxbZy6ByhUZry1X PHjUBG0iMMb0HFMf0PQagQJQXlI53aQOqFpl2kDon0LRM4ymCTb1zmyG9dOUwVtgEgD3OKt6GBS oVePRhICmwfofVeuiZICVHPo+LNN90ib9fDAf0S+HDoUqZBS4IATpax9aixb25MzxsFMuG0RS2O GmzxQd8UhUfRETA== 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 3/8] oracle/mm: do not write protect COW mappings when preserving across exec 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 From: Anthony Yznaga A mapping that is pinned for DMA and preserved across exec can incur a COW if write protected. The elevated reference count prevents reuse of the mapped folio. Orabug: 38029049 Suggested-by: Steve Sistare Signed-off-by: Anthony Yznaga Reviewed-by: Harry Yoo (cherry picked from commit f2e56cc70e62fe07efb71a1e1c2360a78cba5aff) Taken from Oracle linux-uek branch uek8/u2. Applied cleanly. This is the fix for the ticket: a FOLL_LONGTERM-pinned anonymous page preserved with MADV_DOEXEC was write-protected and lost PageAnonExclusive in vma_dup(), so the first write in the new image COWed it and the pin kept the old page. The pinned pages now stay exclusive and writable in the new mm, and the old mm keeps its own. The fixes that follow write protect both again and zap the old mm's mappings right after the copy. Fixes: 9e6d16a6c0a1 ("oracle/mm: introduce VM_EXEC_KEEP") https://virtuozzo.atlassian.net/browse/VSTOR-150231 Feature: oracle/mm: MADV_DOEXEC madvise() flag Assisted-by: LLM Signed-off-by: Konstantin Khorenko --- include/linux/rmap.h | 8 ++++---- mm/memory.c | 13 ++++++++++--- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/include/linux/rmap.h b/include/linux/rmap.h index 5dc4cd6e4e2c9..01e46123ab2dc 100644 --- a/include/linux/rmap.h +++ b/include/linux/rmap.h @@ -431,22 +431,22 @@ static __always_inline int __folio_try_dup_anon_rmap(struct folio *folio, } if (!folio_test_large(folio)) { - if (PageAnonExclusive(page)) + if (PageAnonExclusive(page) && !is_exec_keep) ClearPageAnonExclusive(page); atomic_inc(&folio->_mapcount); break; } do { - if (PageAnonExclusive(page)) + if (PageAnonExclusive(page) && !is_exec_keep) ClearPageAnonExclusive(page); atomic_inc(&page->_mapcount); } while (page++, --nr_pages > 0); atomic_add(orig_nr_pages, &folio->_large_mapcount); break; case RMAP_LEVEL_PMD: - if (PageAnonExclusive(page)) { - if (unlikely(maybe_pinned) && likely(!is_exec_keep)) + if (PageAnonExclusive(page) && !is_exec_keep) { + if (unlikely(maybe_pinned)) return -EBUSY; ClearPageAnonExclusive(page); } diff --git a/mm/memory.c b/mm/memory.c index d4821379529bf..a240246762751 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -956,9 +956,15 @@ static __always_inline void __copy_present_ptes(struct vm_area_struct *dst_vma, pte_t pte, unsigned long addr, int nr) { struct mm_struct *src_mm = src_vma->vm_mm; + bool is_exec_keep = !!(dst_vma->vm_flags & VM_EXEC_KEEP); /* If it's a COW mapping, write protect it both processes. */ - if (is_cow_mapping(src_vma->vm_flags) && pte_write(pte)) { + /* + * But don't protect it if PTEs are being copied as part of preserving + * memory across exec since the page may be pinned for DMA and must not + * be COW'd. + */ + if (is_cow_mapping(src_vma->vm_flags) && pte_write(pte) && !is_exec_keep) { wrprotect_ptes(src_mm, addr, src_pte, nr); pte = pte_wrprotect(pte); } @@ -991,6 +997,7 @@ copy_present_ptes(struct vm_area_struct *dst_vma, struct vm_area_struct *src_vma bool any_writable; fpb_t flags = 0; int err, nr; + bool is_exec_keep = !!(dst_vma->vm_flags & VM_EXEC_KEEP); page = vm_normal_page(src_vma, addr, pte); if (unlikely(!page)) @@ -1019,7 +1026,7 @@ copy_present_ptes(struct vm_area_struct *dst_vma, struct vm_area_struct *src_vma return -EAGAIN; } rss[MM_ANONPAGES] += nr; - VM_WARN_ON_FOLIO(PageAnonExclusive(page), folio); + VM_WARN_ON_FOLIO(PageAnonExclusive(page) && !is_exec_keep, folio); } else { folio_dup_file_rmap_ptes(folio, page, nr); rss[mm_counter_file(folio)] += nr; @@ -1047,7 +1054,7 @@ copy_present_ptes(struct vm_area_struct *dst_vma, struct vm_area_struct *src_vma return err ? err : 1; } rss[MM_ANONPAGES]++; - VM_WARN_ON_FOLIO(PageAnonExclusive(page), folio); + VM_WARN_ON_FOLIO(PageAnonExclusive(page) && !is_exec_keep, folio); } else { folio_dup_file_rmap_pte(folio, page); rss[mm_counter_file(folio)]++; -- 2.43.0 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel