RE: [PATCH] cifs: Accept validate negotiate if server return NT_STATUS_NOT_SUPPORTED

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

 



> -----Original Message-----
> From: linux-cifs-owner@xxxxxxxxxxxxxxx <linux-cifs-owner@xxxxxxxxxxxxxxx> On
> Behalf Of Namjae Jeon
> Sent: Monday, January 21, 2019 4:47 PM
> To: smfrench@xxxxxxxxx; linux-cifs@xxxxxxxxxxxxxxx
> Cc: namjae.jeon@xxxxxxxxxxx; Namjae Jeon <linkinjeon@xxxxxxxxx>
> Subject: [PATCH] cifs: Accept validate negotiate if server return
> NT_STATUS_NOT_SUPPORTED
> 
> Old windows version or Netapp SMB server will return
> NT_STATUS_NOT_SUPPORTED since they do not allow or implement
> FSCTL_VALIDATE_NEGOTIATE_INFO. The client should accept the response
> provided it's properly signed.

The value of any error in the validate negotiate response is only important if
it's STATUS_ACCESS DENIED. Any other signed error is acceptable, so your test
shouldn't be so specific.

The blog reference you point to is just a blog and it's almost 8 years old. I recommend
you read the full spec:

Sending validate negotiate (part of Tree Connect processing):
https://msdn.microsoft.com/en-us/library/cc246687.aspx

Processing validate negotiate response:
https://msdn.microsoft.com/en-us/library/hh880630.aspx

Apparently this also applies to the libcli-smb2 component, based on the Bugzilla?


> 
> See
> https://blogs.msdn.microsoft.com/openspecification/2012/06/28/smb3-secure-dialect-negotiation/
> 
> Samba client had already handled it.
> https://bugzilla.samba.org/attachment.cgi?id=13285&action=edit
> 
> Signed-off-by: Namjae Jeon <linkinjeon@xxxxxxxxx>
> ---
>  fs/cifs/smb2pdu.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
> index 0af87bd..c9e6def 100644
> --- a/fs/cifs/smb2pdu.c
> +++ b/fs/cifs/smb2pdu.c
> @@ -986,8 +986,14 @@ int smb3_validate_negotiate(const unsigned int xid,
> struct cifs_tcon *tcon)
>  	rc = SMB2_ioctl(xid, tcon, NO_FILE_ID, NO_FILE_ID,
>  		FSCTL_VALIDATE_NEGOTIATE_INFO, true /* is_fsctl */,
>  		(char *)pneg_inbuf, inbuflen, (char **)&pneg_rsp, &rsplen);
> -
> -	if (rc != 0) {
> +	if (rc == -EOPNOTSUPP) {
> +		/*
> +		 * Old Windows versions or Netapp SMB server can return
> +		 * not supported error. Client should accept it.
> +		 */
> +		cifs_dbg(VFS, "Accept validate negotiate: not supported
> error\n");
> +		return 0;
> +	} else if (rc != 0) {
>  		cifs_dbg(VFS, "validate protocol negotiate failed: %d\n", rc);
>  		rc = -EIO;
>  		goto out_free_inbuf;
> --
> 2.7.0





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

  Powered by Linux