Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp5885608ybi; Wed, 12 Jun 2019 10:06:12 -0700 (PDT) X-Google-Smtp-Source: APXvYqyFhCflvLuYqBGL+69a0JxEuwTuBdIIzXm8ewGChbtYha3t9lK0+gvXdROpWXkllKNwvtNL X-Received: by 2002:a62:d44f:: with SMTP id u15mr2629803pfl.33.1560359172039; Wed, 12 Jun 2019 10:06:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560359172; cv=none; d=google.com; s=arc-20160816; b=SziYjDEXp2wfKvtq3tLPgvrdETm/vYiSNxchwj/+nJ0pV9LQ+gqxeRmsQoJoUlewNd MMqcjsNoh1apbFAvDvk0Q0rbzEC+mUgc6hjJqNYDQ5ykQl4FcPqfs7vRFBuaDSpGtwj9 gdZVJ8gMSSL+EXDnb65FYPE/XMoPwBQMG8/zfbqgMlFKXeIb0MRjR+HdAfL7T+Xb8AiE j8DnxuN+hFE4L1fAy0BMFRGgDTWUZtsLDOLS3igJypNlv9Duojxh2GZ1B4DuE84zs3xK ipZq95C3aloivCCsfNigpxsTQ8mFIPySm+RZOaV4FhyXGNfLUGT4nkj9r69f4vRqOQtQ YR2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:from:subject:references :mime-version:message-id:in-reply-to:date:dkim-signature; bh=0pRrtQh1WGSItgbOKTKHJXYw3ig9cf9ovTOOwQBNCxo=; b=pQ9XuCd7Q6mU0CZcDimWb3WOWe++IzN8ya1ILMv0dbbNUTpt+dBCl1OVGIDBPeFBA3 JTbGl/vyEzTs5cqxEJs2PbUDoJHRngOKeC7KDKNYI5LBNn5PY4ZTtTQFmbhJhtoBl+YM Vw5SGjQxhO6SWR1rNKoLUzRUP9hNnvMEn4Hg0gvATb+2hzXCN1ty/FxZGfg9lzm//AOm MhRyFKk1QKuAdobmRfOwDwLq4D5SRiqMdpowXEgnSfh31Kzs2H1C+5Iu0omoWmWgJh82 CKjjzDuNrRs08A5mSBp8vCzuPzpTsNl/edtUs/lv839W1bz2HTSyZx5G2SSAT7IQQrxj MmRQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=IoAMjSO8; 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; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p3si191438plo.170.2019.06.12.10.05.56; Wed, 12 Jun 2019 10:06:12 -0700 (PDT) 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=@google.com header.s=20161025 header.b=IoAMjSO8; 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; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2438601AbfFLLpB (ORCPT + 99 others); Wed, 12 Jun 2019 07:45:01 -0400 Received: from mail-vs1-f74.google.com ([209.85.217.74]:45635 "EHLO mail-vs1-f74.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2438454AbfFLLoD (ORCPT ); Wed, 12 Jun 2019 07:44:03 -0400 Received: by mail-vs1-f74.google.com with SMTP id r17so1924521vsl.12 for ; Wed, 12 Jun 2019 04:44:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=0pRrtQh1WGSItgbOKTKHJXYw3ig9cf9ovTOOwQBNCxo=; b=IoAMjSO8LpV9sQ4rhyGuwSi9qAWnWdJKm92qjIFlDfIzZK27lRdtbBpUTTqSsHKQqq mk4pY6s02uPltexkWHMnxfPS6E14WpHQTBtMuXD5ciPLmKwQYfFZ7D/irHKINjpULcIC qesPb2LJHGU1U+hg3Lnr8sbHR2PLa6XJRSA+MwutfJ1QD1fm8gchvdk4JFKcehQpLj7U rwlJqHzorntg7c/BDSuoHH78gq9KnzX7dlAs2pxjWc6C1dDkPCqTKTM+gMG73nj/ByrG HBTS6w/3UTjUct6MrDb5Sf2LP5/PYv9l52cM1MNahSes/06CDdeCzTIAFl18VFOFWLlP HuBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=0pRrtQh1WGSItgbOKTKHJXYw3ig9cf9ovTOOwQBNCxo=; b=o73CiLC86QfSb+pSEqbw9TQA/20TTe550bnqY2o2UAWoWZ85KPVl/SmGPrLF4eQeJQ G75TWvLHZFKUdsrrd9o4od1kqunbMej6n7N4pcbxeX4P/sFyLAzfzTxasJMnzyE25pqL e93YngHYsALJSDzDW+xEDSzlB+iMC6OqYoF7guF94Y0N0Blt2gaZ6F80b5S2n4bEQTTn DKfmBpUbdKdMbJJtPmHvDp2tnFbognYl1qzXccuP7Nau43MoG1i6TNcH2KFvgoqP2I5n nyyWWHU/kU8hElMfQRjK726YqE01lviBowfdVWfrtU+JolQNFB79JTi77U8KCMagecYv LE5w== X-Gm-Message-State: APjAAAWmKGdP2BxvZEPlMjNnT16Sm4OxBpHj/d5AvFgCKgIMzEuPWdww MsPpOIVHk/NK5PvnqhNAn5HOLrc0ystARDDX X-Received: by 2002:a9f:25e9:: with SMTP id 96mr28666032uaf.95.1560339842024; Wed, 12 Jun 2019 04:44:02 -0700 (PDT) Date: Wed, 12 Jun 2019 13:43:25 +0200 In-Reply-To: Message-Id: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.22.0.rc2.383.gf4fbbf30c2-goog Subject: [PATCH v17 08/15] userfaultfd, arm64: untag user pointers From: Andrey Konovalov To: linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-rdma@vger.kernel.org, linux-media@vger.kernel.org, kvm@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: Catalin Marinas , Vincenzo Frascino , Will Deacon , Mark Rutland , Andrew Morton , Greg Kroah-Hartman , Kees Cook , Yishai Hadas , Felix Kuehling , Alexander Deucher , Christian Koenig , Mauro Carvalho Chehab , Jens Wiklander , Alex Williamson , Leon Romanovsky , Luc Van Oostenryck , Dave Martin , Khalid Aziz , enh , Jason Gunthorpe , Christoph Hellwig , Dmitry Vyukov , Kostya Serebryany , Evgeniy Stepanov , Lee Smith , Ramana Radhakrishnan , Jacob Bramley , Ruben Ayrapetyan , Robin Murphy , Kevin Brodsky , Szabolcs Nagy , Andrey Konovalov Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch is a part of a series that extends arm64 kernel ABI to allow to pass tagged user pointers (with the top byte set to something else other than 0x00) as syscall arguments. userfaultfd code use provided user pointers for vma lookups, which can only by done with untagged pointers. Untag user pointers in validate_range(). Reviewed-by: Catalin Marinas Reviewed-by: Kees Cook Signed-off-by: Andrey Konovalov --- fs/userfaultfd.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c index 3b30301c90ec..24d68c3b5ee2 100644 --- a/fs/userfaultfd.c +++ b/fs/userfaultfd.c @@ -1263,21 +1263,23 @@ static __always_inline void wake_userfault(struct userfaultfd_ctx *ctx, } static __always_inline int validate_range(struct mm_struct *mm, - __u64 start, __u64 len) + __u64 *start, __u64 len) { __u64 task_size = mm->task_size; - if (start & ~PAGE_MASK) + *start = untagged_addr(*start); + + if (*start & ~PAGE_MASK) return -EINVAL; if (len & ~PAGE_MASK) return -EINVAL; if (!len) return -EINVAL; - if (start < mmap_min_addr) + if (*start < mmap_min_addr) return -EINVAL; - if (start >= task_size) + if (*start >= task_size) return -EINVAL; - if (len > task_size - start) + if (len > task_size - *start) return -EINVAL; return 0; } @@ -1327,7 +1329,7 @@ static int userfaultfd_register(struct userfaultfd_ctx *ctx, goto out; } - ret = validate_range(mm, uffdio_register.range.start, + ret = validate_range(mm, &uffdio_register.range.start, uffdio_register.range.len); if (ret) goto out; @@ -1516,7 +1518,7 @@ static int userfaultfd_unregister(struct userfaultfd_ctx *ctx, if (copy_from_user(&uffdio_unregister, buf, sizeof(uffdio_unregister))) goto out; - ret = validate_range(mm, uffdio_unregister.start, + ret = validate_range(mm, &uffdio_unregister.start, uffdio_unregister.len); if (ret) goto out; @@ -1667,7 +1669,7 @@ static int userfaultfd_wake(struct userfaultfd_ctx *ctx, if (copy_from_user(&uffdio_wake, buf, sizeof(uffdio_wake))) goto out; - ret = validate_range(ctx->mm, uffdio_wake.start, uffdio_wake.len); + ret = validate_range(ctx->mm, &uffdio_wake.start, uffdio_wake.len); if (ret) goto out; @@ -1707,7 +1709,7 @@ static int userfaultfd_copy(struct userfaultfd_ctx *ctx, sizeof(uffdio_copy)-sizeof(__s64))) goto out; - ret = validate_range(ctx->mm, uffdio_copy.dst, uffdio_copy.len); + ret = validate_range(ctx->mm, &uffdio_copy.dst, uffdio_copy.len); if (ret) goto out; /* @@ -1763,7 +1765,7 @@ static int userfaultfd_zeropage(struct userfaultfd_ctx *ctx, sizeof(uffdio_zeropage)-sizeof(__s64))) goto out; - ret = validate_range(ctx->mm, uffdio_zeropage.range.start, + ret = validate_range(ctx->mm, &uffdio_zeropage.range.start, uffdio_zeropage.range.len); if (ret) goto out; -- 2.22.0.rc2.383.gf4fbbf30c2-goog