Patch "nfs: Fix oops in nfs_netfs_init_request() when copying to cache" has been added to the 6.12-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    nfs: Fix oops in nfs_netfs_init_request() when copying to cache

to the 6.12-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     nfs-fix-oops-in-nfs_netfs_init_request-when-copying-.patch
and it can be found in the queue-6.12 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 5717881a402aafc332fa6c0707f3cfce611a6f93
Author: David Howells <dhowells@xxxxxxxxxx>
Date:   Fri Dec 13 13:50:04 2024 +0000

    nfs: Fix oops in nfs_netfs_init_request() when copying to cache
    
    [ Upstream commit 86ad1a58f6a9453f49e06ef957a40a8dac00a13f ]
    
    When netfslib wants to copy some data that has just been read on behalf of
    nfs, it creates a new write request and calls nfs_netfs_init_request() to
    initialise it, but with a NULL file pointer.  This causes
    nfs_file_open_context() to oops - however, we don't actually need the nfs
    context as we're only going to write to the cache.
    
    Fix this by just returning if we aren't given a file pointer and emit a
    warning if the request was for something other than copy-to-cache.
    
    Further, fix nfs_netfs_free_request() so that it doesn't try to free the
    context if the pointer is NULL.
    
    Fixes: ee4cdf7ba857 ("netfs: Speed up buffered reading")
    Reported-by: Max Kellermann <max.kellermann@xxxxxxxxx>
    Closes: https://lore.kernel.org/r/CAKPOu+9DyMbKLhyJb7aMLDTb=Fh0T8Teb9sjuf_pze+XWT1VaQ@xxxxxxxxxxxxxx/
    Signed-off-by: David Howells <dhowells@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20241213135013.2964079-5-dhowells@xxxxxxxxxx
    cc: Trond Myklebust <trondmy@xxxxxxxxxx>
    cc: Anna Schumaker <anna@xxxxxxxxxx>
    cc: Dave Wysochanski <dwysocha@xxxxxxxxxx>
    cc: Jeff Layton <jlayton@xxxxxxxxxx>
    cc: linux-nfs@xxxxxxxxxxxxxxx
    cc: netfs@xxxxxxxxxxxxxxx
    cc: linux-fsdevel@xxxxxxxxxxxxxxx
    Signed-off-by: Christian Brauner <brauner@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/nfs/fscache.c b/fs/nfs/fscache.c
index 810269ee0a50..d49e4ce27999 100644
--- a/fs/nfs/fscache.c
+++ b/fs/nfs/fscache.c
@@ -263,6 +263,12 @@ int nfs_netfs_readahead(struct readahead_control *ractl)
 static atomic_t nfs_netfs_debug_id;
 static int nfs_netfs_init_request(struct netfs_io_request *rreq, struct file *file)
 {
+	if (!file) {
+		if (WARN_ON_ONCE(rreq->origin != NETFS_PGPRIV2_COPY_TO_CACHE))
+			return -EIO;
+		return 0;
+	}
+
 	rreq->netfs_priv = get_nfs_open_context(nfs_file_open_context(file));
 	rreq->debug_id = atomic_inc_return(&nfs_netfs_debug_id);
 	/* [DEPRECATED] Use PG_private_2 to mark folio being written to the cache. */
@@ -274,7 +280,8 @@ static int nfs_netfs_init_request(struct netfs_io_request *rreq, struct file *fi
 
 static void nfs_netfs_free_request(struct netfs_io_request *rreq)
 {
-	put_nfs_open_context(rreq->netfs_priv);
+	if (rreq->netfs_priv)
+		put_nfs_open_context(rreq->netfs_priv);
 }
 
 static struct nfs_netfs_io_data *nfs_netfs_alloc(struct netfs_io_subrequest *sreq)




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux