Received: by 2002:a5b:505:0:0:0:0:0 with SMTP id o5csp2084631ybp; Thu, 10 Oct 2019 01:55:32 -0700 (PDT) X-Google-Smtp-Source: APXvYqxDwo7zt81/o7ubTveKQVaTW9rerqdHldbQtyGdNV//gEs73dq9KuxtlK+CgCL7JGpIQD7x X-Received: by 2002:a05:6402:21d6:: with SMTP id bi22mr6918362edb.19.1570697732451; Thu, 10 Oct 2019 01:55:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570697732; cv=none; d=google.com; s=arc-20160816; b=LGaJ5UfQky3XtllooDCKul+lRGaPTXxONPTINH3lbrWqtc1q/WRm+C71wLTH0FLhLG 76NMAckHbNgi1bgWSjo3gMoYrsIibs9uk2olsSSNaqQQHGmKBvJ6k3A42bE6Wz0eEzOe wsNMUI9duY+5ylxI6eHkYjyP1MqsjAKU5LtA82YB/ri4nT1AbzUQaBCW0gO5tyzT+i0t 5xjU5A6/Zs7S6P+TXReLZtGnnhP7rFl+416RRVk9pfSWtlskHL2WzY/7uWBoRRgAlheL gQDFkFw4eu9H81v5AZSjW3rGILcyuYEAoT6rwfsmmGkb+b0bi6xHJYeKSlTaqowPasTu xjyg== 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=uIfyX4McFbmqU7EmunDsfhiGWpZvgs+YIsy4KmEyLCQ=; b=kTJb5UZVbGn1tXQSuyFZgBagE+quAbL4dKgy2hy2w8EAAVef24U7EXAysu0eVS2e8d ABa9yVEaKRtOxjKKWWy+nC+a4RP87CXfJx5ti3lFqJnOhEQjxwVzwdVXx5apvMXBqeqg aG1+xwG/TOhJW7kbqQ2hL76OrqsbhACYP7wzfKgP4A9qRK0afB0uExygJ45cCj+FJ8Xv w+PJgcSUnLIawVFVr4RpCCLC6KEjDggKoVcmRO2aUvJh8ZJ503rF2MILkxkIpzos+XGC hoKUQHHk573lPHHYEBJmGLzNq9EYeYd6KO07CcebrQiEIvd29v/JTyZryYTN1MXvMinF xDKQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=xxeVppcb; 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 l54si3323541edb.206.2019.10.10.01.55.09; Thu, 10 Oct 2019 01:55:32 -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=@kernel.org header.s=default header.b=xxeVppcb; 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 S2389639AbfJJIwC (ORCPT + 99 others); Thu, 10 Oct 2019 04:52:02 -0400 Received: from mail.kernel.org ([198.145.29.99]:59750 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390191AbfJJIwA (ORCPT ); Thu, 10 Oct 2019 04:52:00 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.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 DBA2E20B7C; Thu, 10 Oct 2019 08:51:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1570697520; bh=AlzBdA8/4AmqnMFPRJWpA+uiooPBTPN0m2UkF6AWhYU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=xxeVppcbskxWJVIGsc87yc+QyVA750LNoMtdKiiKJLxcTmbr2jJY7V6K6tajzUCWL XuotgzzjG1Uzmz7AqVHSAgzuiir9ZZ9uYzUsNpJ6hpVIz0I8xjfiLa4JlAgeM0gLiy ZIT8PbjXlvK4/BwWZQP7GGBSjr/m6V8Bku6s8bsI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Eric Sandeen , Linus Torvalds Subject: [PATCH 4.14 56/61] vfs: Fix EOVERFLOW testing in put_compat_statfs64 Date: Thu, 10 Oct 2019 10:37:21 +0200 Message-Id: <20191010083524.568303106@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191010083449.500442342@linuxfoundation.org> References: <20191010083449.500442342@linuxfoundation.org> User-Agent: quilt/0.66 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 From: Eric Sandeen commit cc3a7bfe62b947b423fcb2cfe89fcba92bf48fa3 upstream. Today, put_compat_statfs64() disallows nearly any field value over 2^32 if f_bsize is only 32 bits, but that makes no sense. compat_statfs64 is there for the explicit purpose of providing 64-bit fields for f_files, f_ffree, etc. And f_bsize is always only 32 bits. As a result, 32-bit userspace gets -EOVERFLOW for i.e. large file counts even with -D_FILE_OFFSET_BITS=64 set. In reality, only f_bsize and f_frsize can legitimately overflow (fields like f_type and f_namelen should never be large), so test only those fields. This bug was discussed at length some time ago, and this is the proposal Al suggested at https://lkml.org/lkml/2018/8/6/640. It seemed to get dropped amid the discussion of other related changes, but this part seems obviously correct on its own, so I've picked it up and sent it, for expediency. Fixes: 64d2ab32efe3 ("vfs: fix put_compat_statfs64() does not handle errors") Signed-off-by: Eric Sandeen Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- fs/statfs.c | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) --- a/fs/statfs.c +++ b/fs/statfs.c @@ -304,19 +304,10 @@ COMPAT_SYSCALL_DEFINE2(fstatfs, unsigned static int put_compat_statfs64(struct compat_statfs64 __user *ubuf, struct kstatfs *kbuf) { struct compat_statfs64 buf; - if (sizeof(ubuf->f_bsize) == 4) { - if ((kbuf->f_type | kbuf->f_bsize | kbuf->f_namelen | - kbuf->f_frsize | kbuf->f_flags) & 0xffffffff00000000ULL) - return -EOVERFLOW; - /* f_files and f_ffree may be -1; it's okay - * to stuff that into 32 bits */ - if (kbuf->f_files != 0xffffffffffffffffULL - && (kbuf->f_files & 0xffffffff00000000ULL)) - return -EOVERFLOW; - if (kbuf->f_ffree != 0xffffffffffffffffULL - && (kbuf->f_ffree & 0xffffffff00000000ULL)) - return -EOVERFLOW; - } + + if ((kbuf->f_bsize | kbuf->f_frsize) & 0xffffffff00000000ULL) + return -EOVERFLOW; + memset(&buf, 0, sizeof(struct compat_statfs64)); buf.f_type = kbuf->f_type; buf.f_bsize = kbuf->f_bsize;