Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp640504img; Wed, 20 Mar 2019 07:56:56 -0700 (PDT) X-Google-Smtp-Source: APXvYqwphmNijYReFvlOLKp4BPGsjCF9xvMnSow0dmJaeue0+DnNqUvNaKWWt9laHgyxPo6evC0f X-Received: by 2002:aa7:8a95:: with SMTP id a21mr8025996pfc.14.1553093816538; Wed, 20 Mar 2019 07:56:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553093816; cv=none; d=google.com; s=arc-20160816; b=qf8Cg8cTrces+i4KuyGxpUPdfoEHORqX6RkaqBpGK78EuHPYVzi5cXXnaf0f7LBR7M OJN4fGLuuWXTqUyy/+hCK5ZVOBA+zhTohojZeAouLTfD8Qs6VbGF3VywOr02g4qcWbOt CJTjB6sZeHgdo06nXoX6jwUM2M7+/Oj6/E1ixyfzE10WD/JgB2qgCrMqRaKJVmpG29nj z2wuf4a2phWNdcSqJ7IMCgAVrJBB3UJlPsfpL/poKkWg8JkJObZ5FhJf3Hn7LLNy2QFY Yyxo1SouxOl8rMoOeb1fsTb3btEyKh0f968tikI+WTgjjXQuk1/lem3IaevAy75L3v/C nDAQ== 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=k1ksHzqcIFCs0rlhYrsau26vl3ocVueBBoKnHNKxr50=; b=U0KqhPDWTuDdc+4+s+qxpChXd8+w5Rvq5cv7/I+7wq4doVuC8NXR2ZiWXEJfAJg8WS mAMouiS/vZJEI7pwkRusJrPLWl6BPBCWpPz7bUEyKYTQRzRfYqBmWYeh7zShTaGFHbPW lgnlwdIre2Qyxk3bLihHBO7jhYriT/asqrwKoLmjfUECrzvOp0HrX3kv3qwVZ90n0kOv 7GC/Cn132Sh4I2SP6UvOv09XJfpQWvyeWG61Q/G3jQbPA71KKdDYjn/xhG19napEVRN7 u3F3GeZRx6R8kFWJCgcIeizE90uChPJT3MrXaOb002YnPxdTQD10DN//H2TnmKG5vTjU JrLQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=gbUaG2SU; 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 k1si2007939pls.208.2019.03.20.07.56.41; Wed, 20 Mar 2019 07:56:56 -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=gbUaG2SU; 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 S1728332AbfCTOvz (ORCPT + 99 others); Wed, 20 Mar 2019 10:51:55 -0400 Received: from mail-pg1-f202.google.com ([209.85.215.202]:33250 "EHLO mail-pg1-f202.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728367AbfCTOvy (ORCPT ); Wed, 20 Mar 2019 10:51:54 -0400 Received: by mail-pg1-f202.google.com with SMTP id y1so2935677pgo.0 for ; Wed, 20 Mar 2019 07:51:53 -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=k1ksHzqcIFCs0rlhYrsau26vl3ocVueBBoKnHNKxr50=; b=gbUaG2SUmK0LgYPWKNjtqqNqra0Dj2I7PW9z90Jwp3BbFr6Ygh4VDAsBxA5gDOongd +7CxcUNls+IlKo+JGYjfKyQrfYRtO4Z47SxpoLW/8mbPq3NLKcCBVFUfMf1O6lo5lyQS Xjgdf+hI7Y/bA1D0SA8rH8Eu8XxBhdBy5VVMEbbfPWY8xA3Sb5oG0H4SEAubrB034XoX QEsR92P8+ORdJnszt4DIVx7Fa/WP9kGWpGO4+l3UfQFEGOIoLoqxYh83b5fPG2to4T2Y zFPE52PhA9pJC7TqxInYx4207DCj5+fCOTEW3biD/iclPyCXcoUirtevwOL47SHpdgsx zTpA== 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=k1ksHzqcIFCs0rlhYrsau26vl3ocVueBBoKnHNKxr50=; b=Crkw32t90ftuCCaqRP1BhWfCoTVPsIT9KZLVIc1Z+7EgGRsUumf2Ih923OLjBCrUAh 0KcphVr8Bb47tH9Bpy8zlomdXBBEJz9vA1oKPOFy6SVLY7zyuRxqYE/beGx8o9t8e4DH ZgnDwbkEwW1NabMTi0Bf8qmuU/nW01Y1ySWSC3mZPiZLm+LuPwLrQtal4C4M7bxvjl5s MsO+4O3K/e8b6ACvqrZ9PAnVaJsa8xQpXoY2TtzY1Ynd+dv+5XRtWxhejBnjEr2FmdN/ lqIk98zw+CKf2dGyWeMc8gyvGFQf4unFhpqUmbtYMJfb6V3/V3YXBnypywi+LmyY4SFM 7huQ== X-Gm-Message-State: APjAAAVfER8wCR2X6is5QgrbfoVoMOGCw52bW4oOkakmSIzwGuRVXO1b nL7ld42yob9NLm53vqpADwacxYl8rDKyIkHt X-Received: by 2002:a63:2ac2:: with SMTP id q185mr3933097pgq.119.1553093512985; Wed, 20 Mar 2019 07:51:52 -0700 (PDT) Date: Wed, 20 Mar 2019 15:51:17 +0100 In-Reply-To: Message-Id: <3faedcd2495a07e13b8611b2c63779d1d6d2b3f0.1553093421.git.andreyknvl@google.com> Mime-Version: 1.0 References: X-Mailer: git-send-email 2.21.0.225.g810b269d1ac-goog Subject: [PATCH v13 03/20] lib, arm64: untag user pointers in strn*_user From: Andrey Konovalov To: Catalin Marinas , Will Deacon , Mark Rutland , Robin Murphy , Kees Cook , Kate Stewart , Greg Kroah-Hartman , Andrew Morton , Ingo Molnar , "Kirill A . Shutemov" , Shuah Khan , Vincenzo Frascino , Eric Dumazet , "David S. Miller" , Alexei Starovoitov , Daniel Borkmann , Steven Rostedt , Ingo Molnar , Peter Zijlstra , Arnaldo Carvalho de Melo , Alex Deucher , "=?UTF-8?q?Christian=20K=C3=B6nig?=" , "David (ChunMing) Zhou" , Yishai Hadas , Mauro Carvalho Chehab , Jens Wiklander , Alex Williamson , linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, netdev@vger.kernel.org, bpf@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, linux-kernel@vger.kernel.org Cc: Dmitry Vyukov , Kostya Serebryany , Evgeniy Stepanov , Lee Smith , Ramana Radhakrishnan , Jacob Bramley , Ruben Ayrapetyan , Chintan Pandya , Luc Van Oostenryck , Dave Martin , 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. strncpy_from_user and strnlen_user accept user addresses as arguments, and do not go through the same path as copy_from_user and others, so here we need to handle the case of tagged user addresses separately. Untag user pointers passed to these functions. Note, that this patch only temporarily untags the pointers to perform validity checks, but then uses them as is to perform user memory accesses. Signed-off-by: Andrey Konovalov --- lib/strncpy_from_user.c | 3 ++- lib/strnlen_user.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/strncpy_from_user.c b/lib/strncpy_from_user.c index 58eacd41526c..6209bb9507c7 100644 --- a/lib/strncpy_from_user.c +++ b/lib/strncpy_from_user.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -107,7 +108,7 @@ long strncpy_from_user(char *dst, const char __user *src, long count) return 0; max_addr = user_addr_max(); - src_addr = (unsigned long)src; + src_addr = (unsigned long)untagged_addr(src); if (likely(src_addr < max_addr)) { unsigned long max = max_addr - src_addr; long retval; diff --git a/lib/strnlen_user.c b/lib/strnlen_user.c index 1c1a1b0e38a5..8ca3d2ac32ec 100644 --- a/lib/strnlen_user.c +++ b/lib/strnlen_user.c @@ -2,6 +2,7 @@ #include #include #include +#include #include @@ -109,7 +110,7 @@ long strnlen_user(const char __user *str, long count) return 0; max_addr = user_addr_max(); - src_addr = (unsigned long)str; + src_addr = (unsigned long)untagged_addr(str); if (likely(src_addr < max_addr)) { unsigned long max = max_addr - src_addr; long retval; -- 2.21.0.225.g810b269d1ac-goog