From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.7 required=3.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 41C72C07E95 for ; Wed, 7 Jul 2021 07:01:11 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 90C4B619D2 for ; Wed, 7 Jul 2021 07:01:10 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 90C4B619D2 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=sina.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 54B406B0036; Wed, 7 Jul 2021 03:01:10 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4D42F6B005D; Wed, 7 Jul 2021 03:01:10 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 375AE6B006C; Wed, 7 Jul 2021 03:01:10 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0220.hostedemail.com [216.40.44.220]) by kanga.kvack.org (Postfix) with ESMTP id 00ADE6B0036 for ; Wed, 7 Jul 2021 03:01:09 -0400 (EDT) Received: from smtpin25.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id 3621510FAC for ; Wed, 7 Jul 2021 07:01:09 +0000 (UTC) X-FDA: 78334895058.25.D2B98C9 Received: from mail3-164.sinamail.sina.com.cn (mail3-164.sinamail.sina.com.cn [202.108.3.164]) by imf18.hostedemail.com (Postfix) with SMTP id 91D1A40020AF for ; Wed, 7 Jul 2021 07:01:07 +0000 (UTC) Received: from unknown (HELO localhost.localdomain)([1.24.238.68]) by sina.com (172.16.97.35) with ESMTP id 60E5512F00000404; Wed, 7 Jul 2021 15:01:05 +0800 (CST) X-Sender: hdanton@sina.com X-Auth-ID: hdanton@sina.com X-SMAIL-MID: 30185315073520 From: Hillf Danton To: Kaiyang Zhao Cc: linux-mm@kvack.org Subject: Re: [PATCH] Shared page tables during fork Date: Wed, 7 Jul 2021 15:00:59 +0800 Message-Id: <20210707070059.2131-1-hdanton@sina.com> In-Reply-To: <20210701134618.18376-1-zhao776@purdue.edu> References: <20210701134618.18376-1-zhao776@purdue.edu> MIME-Version: 1.0 Authentication-Results: imf18.hostedemail.com; dkim=none; spf=pass (imf18.hostedemail.com: domain of hdanton@sina.com designates 202.108.3.164 as permitted sender) smtp.mailfrom=hdanton@sina.com; dmarc=none X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 91D1A40020AF X-Stat-Signature: k7btkatby8845wk3s73kgz77s68zj8he X-HE-Tag: 1625641267-720937 Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000043, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Thu, 1 Jul 2021 09:46:18 -0400 Kaiyang Zhao wrot= e: >+ >+int __tfork_pte_alloc(struct mm_struct *mm, pmd_t *pmd) >+{ >+ pgtable_t new =3D pte_alloc_one(mm); >+ >+ if (!new) >+ return -ENOMEM; >+ smp_wmb(); /* Could be smp_wmb__xxx(before|after)_spin_lock */ Adding a comment pointing to the matching smp_rmb() helps more. >+ >+ mm_inc_nr_ptes(mm); >+ //kyz: won't check if the pte table already exists >+ pmd_populate(mm, pmd, new); >+ new =3D NULL; >+ if (new) >+ pte_free(mm, new); >+ return 0; >+} >+ >+ > int __pte_alloc(struct mm_struct *mm, pmd_t *pmd) > { > spinlock_t *ptl; >@@ -928,6 +1052,45 @@ copy_present_page(struct vm_area_struct *dst_vma, = struct vm_area_struct *src_vma > return 0; > } > >+static inline unsigned long >+copy_one_pte_tfork(struct mm_struct *dst_mm, >+ pte_t *dst_pte, pte_t *src_pte, struct vm_area_struct *vma, >+ unsigned long addr, int *rss) >+{ >+ unsigned long vm_flags =3D vma->vm_flags; >+ pte_t pte =3D *src_pte; >+ struct page *page; >+ >+ /* >+ * If it's a COW mapping >+ * only protect in the child (the faulting process) >+ */ >+ if (is_cow_mapping(vm_flags) && pte_write(pte)) { >+ pte =3D pte_wrprotect(pte); Is it likely a loophole to leak the parent's info to the child? >+ } >+ >+ /* >+ * If it's a shared mapping, mark it clean in >+ * the child >+ */ >+ if (vm_flags & VM_SHARED) >+ pte =3D pte_mkclean(pte); >+ pte =3D pte_mkold(pte);