From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: ARC-Seal: i=1; a=rsa-sha256; t=1522169873; cv=none; d=google.com; s=arc-20160816; b=vkQuOt4rF/trkbXlW0T1UtLa/6OaQAo4f5kgiQoSWmrg80ygEg3Sv2qTwGn4PSWe0M 4RfwtV59w9qQ7pY925BStVix81HUVSDpqWSKFknkKidlvDkY+2+iqIyfAyOs3BFwQ0F1 CvLHPHp5MjxopANfYp8KUPzevuT8U60q0xYgf8L9l8Bzx2fJAGx9HhaHcX4Kh8o27TH0 7hgxK3mn7XYxydv6DksH8uoia9fR1AXMAVPoSxm2zgQH6qr6ybWuyKiuL7Et+VycvPdx qeodNrtSw6YVce2ZMQthLPp3NDDlQw65QJy1i7ckS0cLGiDR3hvvEhp+kauKOPOQqiwc IWXw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=cacUgNErAiacdTm28Hw85KMBEjc9e53EfkZQ5WfCyjc=; b=zxOUobFXFrDWqX5VCecnvcqhrSX7HNYUoVcPcTZDYSNF+eADgZmTBPIxs6PketUEAA YMjx80oihv6Jl5t5P3xMAV4V3WxdNBs4jdlGNxSh1Q1t+NtEs1WkRIBTACYJyyyKayEV qbOT8MsWhYpPLEYJxLZ0N4ZaBzQqWfauifGPsCzFs1W8hql3AvwIioEf74lRYoThXVbq tIYXJ0OwRmFHLCNVRrfqNj2ipf1vosbPcS3ZJ1a+vD+hUgbVefRgdCxFCMaMpoM8SH9s 2W9pJBh58isdXpRx0QNCo6RRC0oOCcz5BF1KjamT+8gvf5a4Yurf7KIezuKTRacHAMMf 6lXA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=TEg6GMmY; spf=pass (google.com: domain of andreyknvl@google.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=andreyknvl@google.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=TEg6GMmY; spf=pass (google.com: domain of andreyknvl@google.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=andreyknvl@google.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com X-Google-Smtp-Source: AIpwx48/QtGfl4IRtqr4mAXPt9oSOb47MZa+Ey39W0BnqqXfqnZ7EpSWaMB+jlXhxDcmsxCAtafe2w== From: Andrey Konovalov To: Catalin Marinas , Will Deacon , Jonathan Corbet , Mark Rutland , Robin Murphy , Al Viro , Andrey Konovalov , James Morse , Kees Cook , Bart Van Assche , Kate Stewart , Greg Kroah-Hartman , Thomas Gleixner , Philippe Ombredanne , Andrew Morton , Ingo Molnar , "Kirill A . Shutemov" , Dan Williams , "Aneesh Kumar K . V" , Zi Yan , linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: Dmitry Vyukov , Kostya Serebryany , Evgeniy Stepanov , Lee Smith , Ramana Radhakrishnan , Jacob Bramley , Ruben Ayrapetyan Subject: [RFC PATCH v2 4/6] mm, arm64: untag user addresses in mm/gup.c Date: Tue, 27 Mar 2018 18:57:40 +0200 Message-Id: X-Mailer: git-send-email 2.17.0.rc0.231.g781580f067-goog In-Reply-To: References: In-Reply-To: References: X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: =?utf-8?q?1596110797384518600?= X-GMAIL-MSGID: =?utf-8?q?1596110797384518600?= X-Mailing-List: linux-kernel@vger.kernel.org List-ID: mm/gup.c provides a kernel interface that accepts user addresses and manipulates user pages directly (for example get_user_pages, that is used by the futex syscall). Here we also need to handle the case of tagged user pointers. Untag addresses passed to this interface. Signed-off-by: Andrey Konovalov --- mm/gup.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/mm/gup.c b/mm/gup.c index 6afae32571ca..9c4afcf50dfa 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -386,6 +386,8 @@ struct page *follow_page_mask(struct vm_area_struct *vma, struct page *page; struct mm_struct *mm = vma->vm_mm; + address = untagged_addr(address); + *page_mask = 0; /* make this handle hugepd */ @@ -647,6 +649,8 @@ static long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, if (!nr_pages) return 0; + start = untagged_addr(start); + VM_BUG_ON(!!pages != !!(gup_flags & FOLL_GET)); /* @@ -801,6 +805,8 @@ int fixup_user_fault(struct task_struct *tsk, struct mm_struct *mm, struct vm_area_struct *vma; int ret, major = 0; + address = untagged_addr(address); + if (unlocked) fault_flags |= FAULT_FLAG_ALLOW_RETRY; @@ -854,6 +860,8 @@ static __always_inline long __get_user_pages_locked(struct task_struct *tsk, long ret, pages_done; bool lock_dropped; + start = untagged_addr(start); + if (locked) { /* if VM_FAULT_RETRY can be returned, vmas become invalid */ BUG_ON(vmas); @@ -1749,6 +1757,8 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write, unsigned long flags; int nr = 0; + start = untagged_addr(start); + start &= PAGE_MASK; addr = start; len = (unsigned long) nr_pages << PAGE_SHIFT; @@ -1801,6 +1811,8 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write, unsigned long addr, len, end; int nr = 0, ret = 0; + start = untagged_addr(start); + start &= PAGE_MASK; addr = start; len = (unsigned long) nr_pages << PAGE_SHIFT; -- 2.17.0.rc0.231.g781580f067-goog