We've had some sporradic reports of problems recently where the
ses->server pointers have been NULL. That pointer should only get set to
NULL when cifs_demultiplex_thread exits. That should only happen when
the last reference to it is put. If it gets cleaned up before then,
other structures will hold pointers to it, and we'll get NULL pointer
dereferences.

Unfortunately, there are some places in cifs_demuliplex_thread where
this rule is broken. In certain error conditions, cifsd will exit even
though the reference count hasn't gone to zero yet. This patchset is
intended to close these holes. With it, cifsd should only exit when the
last reference to it is put.

Exiting from the loop early is a serious error that's likely to cause an
oops. I think we ought to consider this patchset for 2.6.36 and maybe
for stable.

Thoughts?

Jeff Layton (3):
  cifs: prevent cifsd from exiting prematurely
  cifs: eliminate some more premature cifsd exits
  cifs: prevent possible memory corruption in cifs_demultiplex_thread

 fs/cifs/cifsproto.h |    3 +-
 fs/cifs/connect.c   |   58 +++++++++++++++++---------------------------------
 fs/cifs/netmisc.c   |   22 +++++++++++--------
 3 files changed, 35 insertions(+), 48 deletions(-)

--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to