From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 414F934B662; Wed, 5 Nov 2025 16:54:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762361694; cv=none; b=O0TfdinASDTxC4IvP7NlkfhHty3zX+thEMDt3JzQVj7ZiMshddPh+V5j6pegKjRBJUO/e0Ma477b+c91KJv97BSc1Er8pR2y4eG29wlxFf88il9t7zNav++SARF20X0gw+1QffwzKcJSE5mcljZqViq2BoB9kJDPvZJa6M56XGs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762361694; c=relaxed/simple; bh=fAStZ1VGox28sSBTaeIOxtIwVEbCulrkhuzHCrifXdg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LLiOl4TxerrNVPqWMMdOMeE69nUeRr0DoqFDS3mjEK9PFVRLAsGXic+fXFaSvJGRxF2eANly07tOdULbbr2cMYgd7ILdwD2sJ9523dKTPn0pFwQlypv8eBZJOGSaPfahLrO61GKDWbIFdpfxW8+69NttAdhRx/s5bSeqRDqnVS4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=H1ZQoNee; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="H1ZQoNee" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EA7DEC4CEF5; Wed, 5 Nov 2025 16:54:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1762361694; bh=fAStZ1VGox28sSBTaeIOxtIwVEbCulrkhuzHCrifXdg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=H1ZQoNeer59mVzfoI5KLKHzzxHa7RVoi1N+nfH/nDbfadRbWm6PFG7kOFMd6iyqLI 7H+916dmGFXfy5VyJXkcYm9zTcCLCxIQlU4gtcwlqQ5Xow6WhtHSDSTI+20x6Q4czn 0EXMPiP6/4Q5yIFa7zujGvLpxo83IQiPTwmYR6qrD2bB6J6rWEFj6G9w5+OOQlG8ys RJHV1c39R9eZ1Y2PeahRRX8MXzbQoh4KKGFP1QVuIWCEJ71x1zE7KZp90uvpfRBs0b Zv34GCj8O4VXFw2GeJXy58m1EShYcWB3IQ1QrgQCMfopPVlP/1moDppmRmmVjxjq+Q JNxhTnVIA3viw== From: Jeff Layton Date: Wed, 05 Nov 2025 11:53:59 -0500 Subject: [PATCH v5 13/17] filelock: lift the ban on directory leases in generic_setlease Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20251105-dir-deleg-ro-v5-13-7ebc168a88ac@kernel.org> References: <20251105-dir-deleg-ro-v5-0-7ebc168a88ac@kernel.org> In-Reply-To: <20251105-dir-deleg-ro-v5-0-7ebc168a88ac@kernel.org> To: Miklos Szeredi , Alexander Viro , Christian Brauner , Jan Kara , Chuck Lever , Alexander Aring , Trond Myklebust , Anna Schumaker , Steve French , Paulo Alcantara , Ronnie Sahlberg , Shyam Prasad N , Tom Talpey , Bharath SM , Greg Kroah-Hartman , "Rafael J. Wysocki" , Danilo Krummrich , David Howells , Tyler Hicks , NeilBrown , Olga Kornievskaia , Dai Ngo , Amir Goldstein , Namjae Jeon , Steve French , Sergey Senozhatsky , Carlos Maiolino , Kuniyuki Iwashima , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-nfs@vger.kernel.org, linux-cifs@vger.kernel.org, samba-technical@lists.samba.org, netfs@lists.linux.dev, ecryptfs@vger.kernel.org, linux-unionfs@vger.kernel.org, linux-xfs@vger.kernel.org, netdev@vger.kernel.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1772; i=jlayton@kernel.org; h=from:subject:message-id; bh=fAStZ1VGox28sSBTaeIOxtIwVEbCulrkhuzHCrifXdg=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBpC4EtCPJ/HbYX2CLLwDMaCwhbx/1zHseY6+3ib DlLJ5T5GwiJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaQuBLQAKCRAADmhBGVaC FRDdEACkON+zuK06pcKuiFx+1l8HFqDDgfS3n6gmhCsYA8lWTPOj9Gwf3XZ/RgUD6nLZudz81DZ MogCxZdlBSslI/6x6qJ6px9OqEXW0OWIQBqdecEpY6e+xfWX+6uYRy9Q2MXZM0IDWGEAQ/ys3zH Lp/NDfOsCKqZnqxgx4xRZyd9n7FTFdhhA2GxHEaUn+ThsykJqUt0NifKUcUbWiUbCKfsc9ek91O 0VTpN8nK+yePmnk8/fZjvQTYdOTBsDeCsCKLKepcDMNZeH5uUK67QmAw4boJuWgkdH/l7fH4jm3 5JdbsoU2v757mOk6EpTKCZ3BNF/JgO6rrC1/DOcRVDdbuEUuzNDAxWwXewpffQFKuWqRV0RLSlN fd842uYZBdDj9vIFDVsIqEmJdrrtZ7oT4JnRZf90MA7k+KlofnwwLhvpiXLLaEvogydpsRjZ/gh 8D+fn3iODh9rXM0v/2xCpLt9+TVJc7aUG9sLuvHa793aKs0igRwKm8MUjv00PBukFWWa484d0V9 kaINWBPpr1HLLvBPesJ82ef0fL+E6U0B4g1L1FPDCuVJYtb9654jBqz1XbRU8f6A8+D8xkn6aEx gKh8SkuIy+xw039564DHh1AcTIEMLRSdiKjsWfbgWAp0O4HIM5h4WXR7/lq7Ko3xnKsM20+y3Uu 7fHM8ADhhPZTXBA== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 With the addition of the try_break_lease calls in directory changing operations, allow generic_setlease to hand them out. Write leases on directories are never allowed however, so continue to reject them. For now, there is no API for requesting delegations from userland, so ensure that userland is prevented from acquiring a lease on a directory. Reviewed-by: Jan Kara Reviewed-by: NeilBrown Signed-off-by: Jeff Layton --- fs/locks.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/fs/locks.c b/fs/locks.c index f5b210a2dc34c70ac36e972436c62482bbe32ca6..dd290a87f58eb5d522f03fa99d612fbad84dacf3 100644 --- a/fs/locks.c +++ b/fs/locks.c @@ -1935,14 +1935,19 @@ static int generic_delete_lease(struct file *filp, void *owner) int generic_setlease(struct file *filp, int arg, struct file_lease **flp, void **priv) { - if (!S_ISREG(file_inode(filp)->i_mode)) + struct inode *inode = file_inode(filp); + + if (!S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode)) return -EINVAL; switch (arg) { case F_UNLCK: return generic_delete_lease(filp, *priv); - case F_RDLCK: case F_WRLCK: + if (S_ISDIR(inode->i_mode)) + return -EINVAL; + fallthrough; + case F_RDLCK: if (!(*flp)->fl_lmops->lm_break) { WARN_ON_ONCE(1); return -ENOLCK; @@ -2071,6 +2076,9 @@ static int do_fcntl_add_lease(unsigned int fd, struct file *filp, int arg) */ int fcntl_setlease(unsigned int fd, struct file *filp, int arg) { + if (S_ISDIR(file_inode(filp)->i_mode)) + return -EINVAL; + if (arg == F_UNLCK) return vfs_setlease(filp, F_UNLCK, NULL, (void **)&filp); return do_fcntl_add_lease(fd, filp, arg); -- 2.51.1