Received: by 2002:a05:6358:489b:b0:bb:da1:e618 with SMTP id x27csp1945647rwn; Fri, 16 Sep 2022 03:23:18 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7NNVm3PW3Qm6c1dkgEY78T1Q7AznifdbSmEKY74Go8CEqD2BZ1SpcFLG8IL+6XbHfMpvgB X-Received: by 2002:a63:c3:0:b0:439:72d7:7e1f with SMTP id 186-20020a6300c3000000b0043972d77e1fmr3850255pga.524.1663323798123; Fri, 16 Sep 2022 03:23:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663323798; cv=none; d=google.com; s=arc-20160816; b=KbuMCCDdX/FbNj/yVc2ugWqxdKvGVpOEjKvvX7uXYDbqsda7zY82NdGHvaBLPaZArn +N9TFwa9Wdb9Op8LUL22DIxEknUg0Dj0oVWdhV9KtYIGm6+drcUzBWpjXC395QzPc5fz TJJduIBjkd90bepUBUwrh4FMCdZtgAdxLKKptXYiC9o9Ju0cCGE0sgyCmPtB8TobL1yD +RW0zN7SZMF5C98C4pQRS2et3BtzOmW4ejZJxYsVrI6fv1+ZTrEHaXDPFwOF4PpmN4W4 txSCWRuWSnKSmRkCi3tMDZWCRId/WsiMEO+zf+JksHhp5A88SjbeDY+QKsvqYy9xwshV wofQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=XgMPW4ZLrBZcdLPXdW6PTxiC2Rm9SiDAGwWR0xBvfpY=; b=H/bzVR+R0tw5CmAZ6cjZltYYHHzqlc61nEqjoLetHMA8aQ/pDhOMVv0DpxtrkW1jm4 +rCQHyrGnH6B12L+gT0imSEKHhs62LQYuhkG+u5DlF5PQtl3dcXKtNPNupzhYbNPuDTZ 5YNWH/Qy3zA+oXcQkYYPoW7nhLbWILd22fK98K3wQy8hmGykoNH6J3xcrWZtm43vyDzO YaApjT2n/nt4OutMZH2KdVg0Ch9zhRjyXvaD9U+jk80vTXDE/Sq+IAdVFNxNGeLrDaGC I6NDuhMM+6BrcU/DrCGzEvjk6BIlUyTPV4ptgXWydxCyueSXRd/Gm6NAP36KY+7+IM2X W32w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=blm7I0R0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e3-20020a170902ef4300b00176cbe4c8e5si21849211plx.579.2022.09.16.03.23.06; Fri, 16 Sep 2022 03:23:18 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=blm7I0R0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231345AbiIPKLP (ORCPT + 99 others); Fri, 16 Sep 2022 06:11:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33024 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231210AbiIPKKM (ORCPT ); Fri, 16 Sep 2022 06:10:12 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3C673AB4E9; Fri, 16 Sep 2022 03:08:55 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id B4CE3629E2; Fri, 16 Sep 2022 10:08:54 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C24A3C433C1; Fri, 16 Sep 2022 10:08:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1663322934; bh=8INgkWtGw2iHL2E4EkyqZi3z6ZL6dVvdoW7k5Kw3w04=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=blm7I0R000Xs6kogsWnDD77S7/pOKxPOHGOrQtAwAVKE1la1n6YcDmcI3nsgBBIaS DdokItyYzDhnEZCBEIlChPNL07KqbNnN1FLvAyFEEq0gliB4pZHxDuW5JpI+TljfSw Tp0kT5Tml0y0qnf658hWOpAYvZoQvw1rvxS2smdw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jann Horn Subject: [PATCH 4.19 09/11] mm: Fix TLB flush for not-first PFNMAP mappings in unmap_region() Date: Fri, 16 Sep 2022 12:08:05 +0200 Message-Id: <20220916100443.118799924@linuxfoundation.org> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20220916100442.662955946@linuxfoundation.org> References: <20220916100442.662955946@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jann Horn This is a stable-specific patch. I botched the stable-specific rewrite of commit b67fbebd4cf98 ("mmu_gather: Force tlb-flush VM_PFNMAP vmas"): As Hugh pointed out, unmap_region() actually operates on a list of VMAs, and the variable "vma" merely points to the first VMA in that list. So if we want to check whether any of the VMAs we're operating on is PFNMAP or MIXEDMAP, we have to iterate through the list and check each VMA. Signed-off-by: Jann Horn Signed-off-by: Greg Kroah-Hartman --- mm/mmap.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) --- a/mm/mmap.c +++ b/mm/mmap.c @@ -2567,6 +2567,7 @@ static void unmap_region(struct mm_struc { struct vm_area_struct *next = prev ? prev->vm_next : mm->mmap; struct mmu_gather tlb; + struct vm_area_struct *cur_vma; lru_add_drain(); tlb_gather_mmu(&tlb, mm, start, end); @@ -2581,8 +2582,12 @@ static void unmap_region(struct mm_struc * concurrent flush in this region has to be coming through the rmap, * and we synchronize against that using the rmap lock. */ - if ((vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP)) != 0) - tlb_flush_mmu(&tlb); + for (cur_vma = vma; cur_vma; cur_vma = cur_vma->vm_next) { + if ((cur_vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP)) != 0) { + tlb_flush_mmu(&tlb); + break; + } + } free_pgtables(&tlb, vma, prev ? prev->vm_end : FIRST_USER_ADDRESS, next ? next->vm_start : USER_PGTABLES_CEILING);