Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp8954635ybi; Tue, 23 Jul 2019 18:49:53 -0700 (PDT) X-Google-Smtp-Source: APXvYqx5xArYcuAXJ3QfNLAl1pDcx6Q2SY/qb5WfmL9JB69rtKBMANDt820uxKGCyDTOIDHgHDE6 X-Received: by 2002:a05:6a00:c7:: with SMTP id e7mr8674742pfj.52.1563932993259; Tue, 23 Jul 2019 18:49:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563932993; cv=none; d=google.com; s=arc-20160816; b=aiECoyKajwaKWctWetcdwi2gqyNamidVCGImsw9IyvzoRN1rCJERY28yPp2fbGl+AH i7b1zLQZ8iep7X1CJoUF2nKEJwL7uDcn+UkRlI+VXgIa7VNa8hnTKgsWcnN8TBOnLmpP jtWfDegg4GYDaMZvuqfcpkNsCCBtAubhgVYg4lHNoJbMS9xgyXxLScBHoVCyTJA4iIUx EguQo0YRWQ80xvJYYbmkN9trB1WJ/i2sNdR523Jz4wzv3kXH8p9c00ETeopwuP4NJOoH M0gZihlPb4mTqbjN6ri1WSMPN9XJuH9BBryD1t832jrAAweRCZ/FEH+L3u28veSJQ4Qd qZJQ== 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=JFgaWDMGqAls6G489iThigfOi0kr7eFjggN3NFe6qBQ=; b=zOVqNGrvjs+XgusO6DoyWW5Y5SXdtSVWNdoBJxrC4ti76S/q1Pje/GKCgUt0f6WLIk IbyNjwmKHqSWU6FT+73N92lEBGFnOrlnmnlSEycbHSa71X050UV8k49Q8Ljh5QzcOrPI MubGOlLpTBBvVgVxVsuIhuG7xryaLG769KN6SoJqIALb1a6TzbcLrVgpyzqnt/QY3z8h vVJtYK682hM4sslcLgqHebt15JA9W1NdGC5LTh6Tm4Z1lcS+HPW0i+Q4BsdLyOpMswG5 JhZugjsNZNP14fRfrSDZEzdCBIE+pcW3UOXae4BWY7zOflRtgyhACXCbCHk5twB/VJv1 rdvg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="bdR5/fk0"; 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 az12si11497614plb.5.2019.07.23.18.49.37; Tue, 23 Jul 2019 18:49:53 -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="bdR5/fk0"; 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 S2391286AbfGWR7Z (ORCPT + 99 others); Tue, 23 Jul 2019 13:59:25 -0400 Received: from mail-yb1-f202.google.com ([209.85.219.202]:39683 "EHLO mail-yb1-f202.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2391249AbfGWR7Q (ORCPT ); Tue, 23 Jul 2019 13:59:16 -0400 Received: by mail-yb1-f202.google.com with SMTP id 199so33628608ybe.6 for ; Tue, 23 Jul 2019 10:59:16 -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=JFgaWDMGqAls6G489iThigfOi0kr7eFjggN3NFe6qBQ=; b=bdR5/fk0JGKoW7w0SFkFyWDsbkS1I0veDFpzyivmTwHIiT1ZA97yr7ZNBj0H2AShr3 pJNPC/lixw/WX323ImP4bsjq93mjJZOu3XmkpNpFXgCiVzkeEYaOnJlxDz/E8gDEr+0Z 7c+WyXnemQpO1dfLw6iPwN48OpAMyrI2pHKz9BmhLCsXRKcJ8hMZ0q56McGVdIPQVUpC wU6S0XoQlY0qPAb6VoXtHP5wFmiEaCJNy21C3scQNSBD97gIywyYsw0LYzCg0A9GdhDR +widw+4UdtR8VyNJh7brTEfaRq+BSrao4/hRns/7LOx28RgrtCz6SeEtUQ8FFyTY31id 9AMg== 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=JFgaWDMGqAls6G489iThigfOi0kr7eFjggN3NFe6qBQ=; b=Ll4csGL358TV4pq0xG2uEuWsS3LiDuHPr0kXLvIIYzp5aCNhdhOa6s4SjlvvHIQGxq M1E8srtnUdMjEZ/6tSGMlLGHlYVFDWDPcBQihhJosJIF8l00JljEEJWcK0CHZXzUN5qB /LZALqJ2Vm55Jp0SPKueQtkMSJtsoLFswdeoQwMJBBtIE32Wo+jdpx0/dy/wtilgWtoI c9McFjJo88bNj9dtG8N3zvRvDTuTcozsA/hOG/VlpDJ9TpxiQ2jtwperP8POMpePK5dW INIFyXKgK56VCIs3zvVHdEAz9Z6FuVpHZ27bUTgyNSj9qfPrNrmny+4qJ5ZpWQgF0L33 WazA== X-Gm-Message-State: APjAAAVNCrXhNiQ+3qDQtiuuUO2wMmg6jlygYTs3qryEmyYCSF008Jki kXrvF45dqw06Sthlf+lqyXR8ybuiXpz27pSn X-Received: by 2002:a81:9c0b:: with SMTP id m11mr45173898ywa.3.1563904755656; Tue, 23 Jul 2019 10:59:15 -0700 (PDT) Date: Tue, 23 Jul 2019 19:58:40 +0200 In-Reply-To: Message-Id: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.22.0.709.g102302147b-goog Subject: [PATCH v19 03/15] lib: untag user pointers in strn*_user 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 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. Reviewed-by: Vincenzo Frascino Reviewed-by: Khalid Aziz Acked-by: Kees Cook Reviewed-by: Catalin Marinas 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 023ba9f3b99f..dccb95af6003 100644 --- a/lib/strncpy_from_user.c +++ b/lib/strncpy_from_user.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -108,7 +109,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 7f2db3fe311f..28ff554a1be8 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.22.0.709.g102302147b-goog