CIFS: Do not reconnect TCP session in add_credits()
authorPavel Shilovsky <pshilov@microsoft.com>
Sat, 19 Jan 2019 01:25:36 +0000 (17:25 -0800)
committerSteve French <stfrench@microsoft.com>
Thu, 24 Jan 2019 20:50:57 +0000 (14:50 -0600)
commitef68e831840c40c7d01b328b3c0f5d8c4796c232
tree063f809b38252b893f71bcc101d115048b049b91
parentb0b2cac7e244629e1a84a26d7eabb885fed7ff68
CIFS: Do not reconnect TCP session in add_credits()

When executing add_credits() we currently call cifs_reconnect()
if the number of credits is zero and there are no requests in
flight. In this case we may call cifs_reconnect() recursively
twice and cause memory corruption given the following sequence
of functions:

mid1.callback() -> add_credits() -> cifs_reconnect() ->
-> mid2.callback() -> add_credits() -> cifs_reconnect().

Fix this by avoiding to call cifs_reconnect() in add_credits()
and checking for zero credits in the demultiplex thread.

Cc: <stable@vger.kernel.org>
Signed-off-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/connect.c
fs/cifs/smb2ops.c