Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5ee0e962 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'for-next' of git://git.samba.org/sfrench/cifs-2.6

Pull cifs fixes from Steve French:
 "Three small cifs fixes.  One fixes a hang under stress, and the other
  two are security related"

* 'for-next' of git://git.samba.org/sfrench/cifs-2.6:
  cifs: fix MUST SecurityFlags filtering
  Complete oplock break jobs before closing file handle
  cifs: use memzero_explicit to clear stack buffer
parents 5659c0e4 7a1ceba0
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -606,9 +606,11 @@ cifs_security_flags_handle_must_flags(unsigned int *flags)
		*flags = CIFSSEC_MUST_NTLMV2;
		*flags = CIFSSEC_MUST_NTLMV2;
	else if ((*flags & CIFSSEC_MUST_NTLM) == CIFSSEC_MUST_NTLM)
	else if ((*flags & CIFSSEC_MUST_NTLM) == CIFSSEC_MUST_NTLM)
		*flags = CIFSSEC_MUST_NTLM;
		*flags = CIFSSEC_MUST_NTLM;
	else if ((*flags & CIFSSEC_MUST_LANMAN) == CIFSSEC_MUST_LANMAN)
	else if (CIFSSEC_MUST_LANMAN &&
		 (*flags & CIFSSEC_MUST_LANMAN) == CIFSSEC_MUST_LANMAN)
		*flags = CIFSSEC_MUST_LANMAN;
		*flags = CIFSSEC_MUST_LANMAN;
	else if ((*flags & CIFSSEC_MUST_PLNTXT) == CIFSSEC_MUST_PLNTXT)
	else if (CIFSSEC_MUST_PLNTXT &&
		 (*flags & CIFSSEC_MUST_PLNTXT) == CIFSSEC_MUST_PLNTXT)
		*flags = CIFSSEC_MUST_PLNTXT;
		*flags = CIFSSEC_MUST_PLNTXT;


	*flags |= signflags;
	*flags |= signflags;
+5 −1
Original line number Original line Diff line number Diff line
@@ -366,6 +366,7 @@ void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
	struct cifsLockInfo *li, *tmp;
	struct cifsLockInfo *li, *tmp;
	struct cifs_fid fid;
	struct cifs_fid fid;
	struct cifs_pending_open open;
	struct cifs_pending_open open;
	bool oplock_break_cancelled;


	spin_lock(&cifs_file_list_lock);
	spin_lock(&cifs_file_list_lock);
	if (--cifs_file->count > 0) {
	if (--cifs_file->count > 0) {
@@ -397,7 +398,7 @@ void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
	}
	}
	spin_unlock(&cifs_file_list_lock);
	spin_unlock(&cifs_file_list_lock);


	cancel_work_sync(&cifs_file->oplock_break);
	oplock_break_cancelled = cancel_work_sync(&cifs_file->oplock_break);


	if (!tcon->need_reconnect && !cifs_file->invalidHandle) {
	if (!tcon->need_reconnect && !cifs_file->invalidHandle) {
		struct TCP_Server_Info *server = tcon->ses->server;
		struct TCP_Server_Info *server = tcon->ses->server;
@@ -409,6 +410,9 @@ void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
		_free_xid(xid);
		_free_xid(xid);
	}
	}


	if (oplock_break_cancelled)
		cifs_done_oplock_break(cifsi);

	cifs_del_pending_open(&open);
	cifs_del_pending_open(&open);


	/*
	/*
+1 −1
Original line number Original line Diff line number Diff line
@@ -221,7 +221,7 @@ E_md4hash(const unsigned char *passwd, unsigned char *p16,
	}
	}


	rc = mdfour(p16, (unsigned char *) wpwd, len * sizeof(__le16));
	rc = mdfour(p16, (unsigned char *) wpwd, len * sizeof(__le16));
	memset(wpwd, 0, 129 * sizeof(__le16));
	memzero_explicit(wpwd, sizeof(wpwd));


	return rc;
	return rc;
}
}