| From d2c5eb57b6da10f335c30356f9696bd667601e6a Mon Sep 17 00:00:00 2001 |
| From: David Howells <dhowells@redhat.com> |
| Date: Thu, 18 Jul 2024 20:55:20 +0100 |
| Subject: cifs: Fix missing error code set |
| |
| From: David Howells <dhowells@redhat.com> |
| |
| commit d2c5eb57b6da10f335c30356f9696bd667601e6a upstream. |
| |
| In cifs_strict_readv(), the default rc (-EACCES) is accidentally cleared by |
| a successful return from netfs_start_io_direct(), such that if |
| cifs_find_lock_conflict() fails, we don't return an error. |
| |
| Fix this by resetting the default error code. |
| |
| Fixes: 14b1cd25346b ("cifs: Fix locking in cifs_strict_readv()") |
| Cc: stable@vger.kernel.org |
| Signed-off-by: David Howells <dhowells@redhat.com> |
| Reviewed-by: Paulo Alcantara (Red Hat) <pc@manguebit.com> |
| cc: Jeff Layton <jlayton@kernel.org> |
| cc: linux-cifs@vger.kernel.org |
| cc: netfs@lists.linux.dev |
| cc: linux-fsdevel@vger.kernel.org |
| Signed-off-by: Steve French <stfrench@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| fs/smb/client/file.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| diff --git a/fs/smb/client/file.c b/fs/smb/client/file.c |
| index 1374635e89fa..6178c6d8097d 100644 |
| --- a/fs/smb/client/file.c |
| +++ b/fs/smb/client/file.c |
| @@ -2877,6 +2877,7 @@ cifs_strict_readv(struct kiocb *iocb, struct iov_iter *to) |
| rc = netfs_start_io_direct(inode); |
| if (rc < 0) |
| goto out; |
| + rc = -EACCES; |
| down_read(&cinode->lock_sem); |
| if (!cifs_find_lock_conflict( |
| cfile, iocb->ki_pos, iov_iter_count(to), |
| @@ -2889,6 +2890,7 @@ cifs_strict_readv(struct kiocb *iocb, struct iov_iter *to) |
| rc = netfs_start_io_read(inode); |
| if (rc < 0) |
| goto out; |
| + rc = -EACCES; |
| down_read(&cinode->lock_sem); |
| if (!cifs_find_lock_conflict( |
| cfile, iocb->ki_pos, iov_iter_count(to), |
| -- |
| 2.45.2 |
| |