Received: by 2002:a05:6520:1682:b0:147:d1a0:b502 with SMTP id ck2csp5596631lkb; Mon, 11 Oct 2021 09:39:08 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw5CA0AFeBeTzGs3DDfRfFvEunZ/eKtuXKacOuAU/qXjjkNSdi3qC/9d9pNAZn9LqzC+P0M X-Received: by 2002:a17:90b:17cc:: with SMTP id me12mr31347196pjb.147.1633970347657; Mon, 11 Oct 2021 09:39:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633970347; cv=none; d=google.com; s=arc-20160816; b=iR8rU+x40cVLnNbZAeYqytuDHeZ1m3S9PRNuvfgDWZeOYnDJKpiQY4/ysJm1rkVH2Y ywcBkH/AAbmu8hsi/keKNabq7QqYyzpHjnpbxcFXSQV/+dBG0bW6GB2d9e4ZDfm2/xEE iEHV550Tv3ehcAbetu0wargsIHoc53BvPygPAbzWpHHydgo/70bAhMwMuD76sMqDAHcT ySUzg6zaycrVnMXGp0mgqYZ9GYslZSjFqvz36x9KEzZ+BaEqFVbj8yzu3LxEELI1/FeJ VQT529wSCiOSt4ztPu8GjV1dsnCbrjOTARHotp8IWcCb9je+eqM/sUyBOo0CCEls8BUi eH3A== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=vdQQCEniHL1xygkjP4Iz+rOvTA6IAfnSUqbAplt/yEA=; b=UCwzKVkt7eKQNOEI8JAKmKriTJ6SGzGuwHT6zvrjtkfhq7f/aKhQ7emIPV/C43FZOI Cgz6id0dIRLzrkdO5lnlYE/PcMDPZp3jszPxeQQpUE5/yjFSuFFfzNGEmCxztj03KClM TuesukWVZmOzQOTVyc7Y7BmiAFUkUfu/RCBCbiJd3Fsb3W0alsgmB6M+zUTY5NYupTsO 4navsYmeXHMUvslAEfGe5sNI9k73QE6eOAI1vVy2I2JJDzcAWlGcdkfYXa1Sds7pletz dqeR5hRCJpFjR6PUQ+W1xyP0c6DwmM3N7W3jPr2oiPQTFaO4ahngdfoKnxzvKizoRRSu b26w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=slgUfDjF; 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=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id q18si6780903pfk.48.2021.10.11.09.38.55; Mon, 11 Oct 2021 09:39:07 -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=@linuxfoundation.org header.s=korg header.b=slgUfDjF; 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=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244101AbhJKORN (ORCPT + 99 others); Mon, 11 Oct 2021 10:17:13 -0400 Received: from mail.kernel.org ([198.145.29.99]:34948 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243377AbhJKOOn (ORCPT ); Mon, 11 Oct 2021 10:14:43 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 8489A61177; Mon, 11 Oct 2021 14:04:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1633961094; bh=0MDKaSEaNK55zglKbOL+auRaeQ7qIQHTinkUGZ0UK0E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=slgUfDjFVgcx3Ez0+MHCx+/tupSe+jFMO8DefYtL89rNGivyCzWr4dcF6ORkITzh6 p68ubngFXS6IDiOOcFWZNzwXU9MA09kqidkDVSGjiwFo05Xa22x/4i/SsKOwje5VfO awaxSv7tgX8BUulOStpVMAqKClj3mhQqNhwr2iyo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Trond Myklebust , Chuck Lever Subject: [PATCH 4.19 06/28] nfsd4: Handle the NFSv4 READDIR dircount hint being zero Date: Mon, 11 Oct 2021 15:46:56 +0200 Message-Id: <20211011134640.916263507@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211011134640.711218469@linuxfoundation.org> References: <20211011134640.711218469@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Trond Myklebust commit f2e717d655040d632c9015f19aa4275f8b16e7f2 upstream. RFC3530 notes that the 'dircount' field may be zero, in which case the recommendation is to ignore it, and only enforce the 'maxcount' field. In RFC5661, this recommendation to ignore a zero valued field becomes a requirement. Fixes: aee377644146 ("nfsd4: fix rd_dircount enforcement") Cc: Signed-off-by: Trond Myklebust Signed-off-by: Chuck Lever Signed-off-by: Greg Kroah-Hartman --- fs/nfsd/nfs4xdr.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -3124,15 +3124,18 @@ nfsd4_encode_dirent(void *ccdv, const ch goto fail; cd->rd_maxcount -= entry_bytes; /* - * RFC 3530 14.2.24 describes rd_dircount as only a "hint", so - * let's always let through the first entry, at least: + * RFC 3530 14.2.24 describes rd_dircount as only a "hint", and + * notes that it could be zero. If it is zero, then the server + * should enforce only the rd_maxcount value. */ - if (!cd->rd_dircount) - goto fail; - name_and_cookie = 4 + 4 * XDR_QUADLEN(namlen) + 8; - if (name_and_cookie > cd->rd_dircount && cd->cookie_offset) - goto fail; - cd->rd_dircount -= min(cd->rd_dircount, name_and_cookie); + if (cd->rd_dircount) { + name_and_cookie = 4 + 4 * XDR_QUADLEN(namlen) + 8; + if (name_and_cookie > cd->rd_dircount && cd->cookie_offset) + goto fail; + cd->rd_dircount -= min(cd->rd_dircount, name_and_cookie); + if (!cd->rd_dircount) + cd->rd_maxcount = 0; + } cd->cookie_offset = cookie_offset; skip_entry: