Commit ab3459d8 authored by Steve French's avatar Steve French
Browse files

smb3: print warning once if posix context returned on open



SMB3.1.1 POSIX Context processing is not complete yet - so print warning
(once) if server returns it on open.

Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
Reviewed-by: default avatarAurelien Aptel <aaptel@suse.com>
parent 2391ca41
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -1939,6 +1939,16 @@ parse_query_id_ctxt(struct create_context *cc, struct smb2_file_all_info *buf)
	buf->IndexNumber = pdisk_id->DiskFileId;
}

static void
parse_posix_ctxt(struct create_context *cc, struct smb_posix_info *pposix_inf)
{
	/* struct smb_posix_info *ppinf = (struct smb_posix_info *)cc; */

	/* TODO: Need to add parsing for the context and return */
	printk_once(KERN_WARNING
		    "SMB3 3.11 POSIX response context not completed yet\n");
}

void
smb2_parse_contexts(struct TCP_Server_Info *server,
		       struct smb2_create_rsp *rsp,
@@ -1950,6 +1960,9 @@ smb2_parse_contexts(struct TCP_Server_Info *server,
	unsigned int next;
	unsigned int remaining;
	char *name;
	const char smb3_create_tag_posix[] = {0x93, 0xAD, 0x25, 0x50, 0x9C,
					0xB4, 0x11, 0xE7, 0xB4, 0x23, 0x83,
					0xDE, 0x96, 0x8B, 0xCD, 0x7C};

	*oplock = 0;
	data_offset = (char *)rsp + le32_to_cpu(rsp->CreateContextsOffset);
@@ -1969,6 +1982,15 @@ smb2_parse_contexts(struct TCP_Server_Info *server,
		else if (buf && (le16_to_cpu(cc->NameLength) == 4) &&
		    strncmp(name, SMB2_CREATE_QUERY_ON_DISK_ID, 4) == 0)
			parse_query_id_ctxt(cc, buf);
		else if ((le16_to_cpu(cc->NameLength) == 16)) {
			if (memcmp(name, smb3_create_tag_posix, 16) == 0)
				parse_posix_ctxt(cc, NULL);
		}
		/* else {
			cifs_dbg(FYI, "Context not matched with len %d\n",
				le16_to_cpu(cc->NameLength));
			cifs_dump_mem("Cctxt name: ", name, 4);
		} */

		next = le32_to_cpu(cc->Next);
		if (!next)
+8 −0
Original line number Diff line number Diff line
@@ -1595,4 +1595,12 @@ struct smb2_file_network_open_info {

extern char smb2_padding[7];

/* equivalent of the contents of SMB3.1.1 POSIX open context response */
struct smb_posix_info {
	__le32 nlink;
	__le32 reparse_tag;
	__le32 mode;
	kuid_t	uid;
	kuid_t	gid;
};
#endif				/* _SMB2PDU_H */