Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp10794313imu; Thu, 6 Dec 2018 06:56:40 -0800 (PST) X-Google-Smtp-Source: AFSGD/XTtymhSURvnOaIuHME6ateVVKNLwZ7qHDjRImUvHYo/w3rdb3Cyb5tYzkfRbAqWi0/8AvT X-Received: by 2002:a17:902:b48b:: with SMTP id y11mr27495465plr.200.1544108200582; Thu, 06 Dec 2018 06:56:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544108200; cv=none; d=google.com; s=arc-20160816; b=ChhwFebZRmCU+7k2i0YMemh7bq2lQAGaEVd2+vZdJ/YI+U10hq2P05zOM4yi1UnQZJ r8ZnzjSFcr2r0k9o/w+ZbV02v2BY3G6zDMJDT6rw9OwKakbubKQ/I2td6SDW8UycGNuW FxR1p9mYqNqVX8gWXLQdhi7ty6GRGXzlfTua69E1woeGOBHQtKOEuW2iidryUwLoc83u h8zTvNnKUHNuubE2Q53tB5vnTF5EXM5Od1koGXCI2DzXBMHkTBcxxmWhBVEuCZ0BLsZ+ qFLnjs1pVMCOcza7iUKFXJvkRJccF48NwdhBoMYIrtWsl7DvauOjUdtg2GRVplre/MA/ lnlw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=fq3ONXYzOlvck2BFdkzXsTmXNqWLwh/L+A5eZxs/Lbs=; b=a0Q0r6AmDBpgXQE2jZ1i9gMY1zbSPMmUKzsBI8Is+gRuKHPvXaaMKDj7UmZQJQ6q7F 1XeNSgUqWjUVBa5mG9ihcavfImReEl5xIXTx6BgNnjeLXUStYjB1ta50qya6dYCgNBap 9cGLv2PXZl2+rq9pP0zfHM7JmQw9V98hGR6NOIVvR8aKLk/SREFwCGiA95bfyRjH1jWE BQuhu0UxHhHkp/yQ+vO2uj8PZkLHd5yuFuzUr7obIAKfUXMdG8SjWI46Pno/UU5AxWJ0 USTKWd+axf84f4FyNpYGld7G4s4zjX+BDphLGt8Y/mwgmim5fGovJhoHG0YBKK05m9mX h2eQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="rpo0/fwE"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a28si389307pgl.530.2018.12.06.06.56.23; Thu, 06 Dec 2018 06:56:40 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="rpo0/fwE"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730745AbeLFOnt (ORCPT + 99 others); Thu, 6 Dec 2018 09:43:49 -0500 Received: from mail.kernel.org ([198.145.29.99]:48252 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730270AbeLFOno (ORCPT ); Thu, 6 Dec 2018 09:43:44 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 5FAB420661; Thu, 6 Dec 2018 14:43:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1544107423; bh=GZ934Ioc4i3NP9GMoOMP5kb20stv8ZY33+NfQqMwpdE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rpo0/fwEIIDBvK3StjTmsQAiQnx5e/km+UZDTuC/HqG/OB/2PvaGbY4Xf/4kW858n Ten9v30YAlWJtgS+V587NSoLOh0rjuWuNQWv/GsQbmsZ0Cg76UieS4awACHsCwdVrz 0VOAr2QVjA+aBRqIPt9yd+iLRR9i2jYMhVsAaX+o= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Andrea Arcangeli , Mike Rapoport , Hugh Dickins , Mike Kravetz , Jann Horn , Peter Xu , "Dr. David Alan Gilbert" , Andrew Morton , Linus Torvalds Subject: [PATCH 4.14 22/55] userfaultfd: use ENOENT instead of EFAULT if the atomic copy user fails Date: Thu, 6 Dec 2018 15:38:56 +0100 Message-Id: <20181206143002.952207928@linuxfoundation.org> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20181206143001.749982936@linuxfoundation.org> References: <20181206143001.749982936@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Andrea Arcangeli commit 9e368259ad988356c4c95150fafd1a06af095d98 upstream. Patch series "userfaultfd shmem updates". Jann found two bugs in the userfaultfd shmem MAP_SHARED backend: the lack of the VM_MAYWRITE check and the lack of i_size checks. Then looking into the above we also fixed the MAP_PRIVATE case. Hugh by source review also found a data loss source if UFFDIO_COPY is used on shmem MAP_SHARED PROT_READ mappings (the production usages incidentally run with PROT_READ|PROT_WRITE, so the data loss couldn't happen in those production usages like with QEMU). The whole patchset is marked for stable. We verified QEMU postcopy live migration with guest running on shmem MAP_PRIVATE run as well as before after the fix of shmem MAP_PRIVATE. Regardless if it's shmem or hugetlbfs or MAP_PRIVATE or MAP_SHARED, QEMU unconditionally invokes a punch hole if the guest mapping is filebacked and a MADV_DONTNEED too (needed to get rid of the MAP_PRIVATE COWs and for the anon backend). This patch (of 5): We internally used EFAULT to communicate with the caller, switch to ENOENT, so EFAULT can be used as a non internal retval. Link: http://lkml.kernel.org/r/20181126173452.26955-2-aarcange@redhat.com Fixes: 4c27fe4c4c84 ("userfaultfd: shmem: add shmem_mcopy_atomic_pte for userfaultfd support") Signed-off-by: Andrea Arcangeli Reviewed-by: Mike Rapoport Reviewed-by: Hugh Dickins Cc: Mike Kravetz Cc: Jann Horn Cc: Peter Xu Cc: "Dr. David Alan Gilbert" Cc: Cc: stable@vger.kernel.org Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- mm/hugetlb.c | 2 +- mm/shmem.c | 2 +- mm/userfaultfd.c | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -4037,7 +4037,7 @@ int hugetlb_mcopy_atomic_pte(struct mm_s /* fallback to copy_from_user outside mmap_sem */ if (unlikely(ret)) { - ret = -EFAULT; + ret = -ENOENT; *pagep = page; /* don't free the page */ goto out; --- a/mm/shmem.c +++ b/mm/shmem.c @@ -2266,7 +2266,7 @@ static int shmem_mfill_atomic_pte(struct *pagep = page; shmem_inode_unacct_blocks(inode, 1); /* don't free the page */ - return -EFAULT; + return -ENOENT; } } else { /* mfill_zeropage_atomic */ clear_highpage(page); --- a/mm/userfaultfd.c +++ b/mm/userfaultfd.c @@ -49,7 +49,7 @@ static int mcopy_atomic_pte(struct mm_st /* fallback to copy_from_user outside mmap_sem */ if (unlikely(ret)) { - ret = -EFAULT; + ret = -ENOENT; *pagep = page; /* don't free the page */ goto out; @@ -275,7 +275,7 @@ retry: cond_resched(); - if (unlikely(err == -EFAULT)) { + if (unlikely(err == -ENOENT)) { up_read(&dst_mm->mmap_sem); BUG_ON(!page); @@ -521,7 +521,7 @@ retry: src_addr, &page, zeropage); cond_resched(); - if (unlikely(err == -EFAULT)) { + if (unlikely(err == -ENOENT)) { void *page_kaddr; up_read(&dst_mm->mmap_sem);