Re: [REGRESSION 6.1.70] system calls with CIFS mounts failing with "Resource temporarily unavailable"

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

 



Hi,

On 15/01/24 7:52 pm, Mohamed Abuelfotoh, Hazem wrote:
It looks like both 5.15.146 and 5.10.206 are impacted by this regression as they both have the
bad commit 33eae65c6f (smb: client: fix OOB in SMB2_query_info_init()). We tried to
apply the proposed fix eb3e28c1e89b ("smb3: Replace smb2pdu 1-element
arrays with flex-arrays”) but there are a lot of dependencies required to do the backport.
Is it possible to consider the simple fix that Paulo proposed as a solution for 5.10 and 5.15.
We were lucky with 5.4 as it doesn’t have the bad commit because of merge conflict reported
in https://lore.kernel.org/all/2023122857-doubling-crazed-27f4@gregkh/T/#m3aa009c332999268f71361237ace6ded9110f0d0


I think we are also seeing the same error on running xfstests with cifs.

[root@vm xfstests-dev]# ./check -g quick -s smb3
TEST_DEV=//<SERVER_IP>/TEST is mounted but not a type cifs filesystem

This is with 5.15.147 stable kernel.

I started seeing this since 5.15.146 and on bisection it points to the same commit:

commit bfd18c0f570e ("smb: client: fix OOB in SMB2_query_info_init()"), reverting that commit fixed the issue and also when I applied the below diff provided in this thread, the tests run fine.

[root@vm xfstests-dev]# ./check -g quick -s smb3 cifs/001
SECTION       -- smb3
FSTYP         -- cifs
PLATFORM -- Linux/x86_64 vm 5.15.147-master.el9.v5.x86_64 #1 SMP Mon Jan 15 22:39:33 PST 2024
MKFS_OPTIONS  -- //<SERVER_IP>/SCRATCH
MOUNT_OPTIONS -- -ousername=root,password=PASSWORD,noperm,mfsymlinks,actimeo=0 //<SERVER_IP>/SCRATCH /mnt/scratch

cifs/001 1s ...  1s
generic/001 16s ...

Thanks,
Harshit

diff --git a/fs/smb/client/smb2pdu.c b/fs/smb/client/smb2pdu.c
	index 05ff8a457a3d..aed5067661de 100644
	--- a/fs/smb/client/smb2pdu.c
	+++ b/fs/smb/client/smb2pdu.c
	@@ -3556,7 +3556,7 @@ SMB2_query_info_init(struct cifs_tcon *tcon, struct TCP_Server_Info *server,
	
	 	iov[0].iov_base = (char *)req;
	 	/* 1 for Buffer */
	-	iov[0].iov_len = len;
	+	iov[0].iov_len = len - 1;
	 	return 0;
	 }

Hazem





[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux