Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp847522pxb; Thu, 19 Aug 2021 12:47:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzgoiucdZn9z4NTK5w02EcwvUFV59hJ4sYB2kwE9YaOZFIy9oR7sokCZAATNi7RCv85F2Yv X-Received: by 2002:a17:906:1789:: with SMTP id t9mr17618164eje.61.1629402431637; Thu, 19 Aug 2021 12:47:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1629402431; cv=none; d=google.com; s=arc-20160816; b=z6f1Ao/GxjczQMwATbQwhZ3AyBGRgJwE5oZ5ROylareFRFrdayq3YNWdXR6E+5hRNF jrMEsHurPfAJrQwYvLe77KRJs55dGLehnM/ARnP9K517fYZexHEFo6oHqPzqIBmAgJc5 FtFRZSEFvlkZfd+NICDP6WxrG+Emg12lIzhjsPggCD9YFrgsJ7GroxDN7cNhqeWD7xdg jBFeO5Fo4X+NeP6IT5KDUrmfvJEptnGMdCimYPp52RiZIGMrrpQqBQ4NqD8fvGH4uSTp kvMQi5wzzRYBAiccWgMHD8rR9BBTCZEVlIIj5WJQUNU3LOd0zv0uy3LcABc6ysk3KlY/ 0Icw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=JHGCqTXkarbKxG5+YktM4Z+cMzywabkx4H8cpyRRiOI=; b=1EvBiFp7kYiWOqx3EF4EbwG9nrwLx4EV2mBOQHGXJQHwB6sw4RWr1FROPnyjvxukoE OvkO2wmestZ3lpyVkUlxPaz0QfnzUs6u95ZcX6WW5VbI2WVd+4aCZhINTiMmJ7xoTcgP 2gFWAuluJfWGpU1jgLl+Gdv9LDtFmaA15M0V3UQb86jgkF656stJVQiiMhmx9klvCUi/ NbNeoHpe6PptGDtiyBpsFtKly+vOneLlAHBicRskvSg73ReiH7r5XUqMm1g3cFgftSuo MbDSS5GyewQCK+oco7s7fPEkFP6xYyULeY5gHZ+Q2YTHGR/aP1uragrg95Il9SZPqWDL UciQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=cAtGFUxm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y11si4261151edc.104.2021.08.19.12.46.48; Thu, 19 Aug 2021 12:47:11 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=cAtGFUxm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235710AbhHSTnI (ORCPT + 99 others); Thu, 19 Aug 2021 15:43:08 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:39397 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235273AbhHSTnA (ORCPT ); Thu, 19 Aug 2021 15:43:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1629402143; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JHGCqTXkarbKxG5+YktM4Z+cMzywabkx4H8cpyRRiOI=; b=cAtGFUxmhlwTXqe75xuR8FvHTrReqScdhPE2Nv32uOHwVmjvZu4glLJISo+Gi67UPYTykJ 6zZaFtJuWCnMU8sKWALDB2rJPOWCO4vLH4S5iD6jFFufBe+IRDkVCTHT8mGfzM6wE18YiR JDmOHQoLn6WVDyj5EZqOjE2/N4Vbe9s= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-13-o6DlWruKMgapSc1YlPBVhw-1; Thu, 19 Aug 2021 15:41:16 -0400 X-MC-Unique: o6DlWruKMgapSc1YlPBVhw-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 4E862760C0; Thu, 19 Aug 2021 19:41:15 +0000 (UTC) Received: from max.com (unknown [10.40.194.206]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4DE6E5278E; Thu, 19 Aug 2021 19:41:12 +0000 (UTC) From: Andreas Gruenbacher To: Linus Torvalds , Alexander Viro , Christoph Hellwig , "Darrick J. Wong" Cc: Jan Kara , Matthew Wilcox , cluster-devel@redhat.com, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ocfs2-devel@oss.oracle.com, Andreas Gruenbacher Subject: [PATCH v6 01/19] iov_iter: Fix iov_iter_get_pages{,_alloc} page fault return value Date: Thu, 19 Aug 2021 21:40:44 +0200 Message-Id: <20210819194102.1491495-2-agruenba@redhat.com> In-Reply-To: <20210819194102.1491495-1-agruenba@redhat.com> References: <20210819194102.1491495-1-agruenba@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Both iov_iter_get_pages and iov_iter_get_pages_alloc return the number of bytes of the iovec they could get the pages for. When they cannot get any pages, they're supposed to return 0, but when the start of the iovec isn't page aligned, the calculation goes wrong and they return a negative value. Fix both functions. In addition, change iov_iter_get_pages_alloc to return NULL in that case to prevent resource leaks. Signed-off-by: Andreas Gruenbacher --- lib/iov_iter.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/iov_iter.c b/lib/iov_iter.c index e23123ae3a13..25dfc48536d7 100644 --- a/lib/iov_iter.c +++ b/lib/iov_iter.c @@ -1484,7 +1484,7 @@ ssize_t iov_iter_get_pages(struct iov_iter *i, res = get_user_pages_fast(addr, n, iov_iter_rw(i) != WRITE ? FOLL_WRITE : 0, pages); - if (unlikely(res < 0)) + if (unlikely(res <= 0)) return res; return (res == n ? len : res * PAGE_SIZE) - *start; } @@ -1608,8 +1608,9 @@ ssize_t iov_iter_get_pages_alloc(struct iov_iter *i, return -ENOMEM; res = get_user_pages_fast(addr, n, iov_iter_rw(i) != WRITE ? FOLL_WRITE : 0, p); - if (unlikely(res < 0)) { + if (unlikely(res <= 0)) { kvfree(p); + *pages = NULL; return res; } *pages = p; -- 2.26.3