diff mbox

[0/1] cifs: do not leak EDEADLK to dgetents64

Message ID 20210825073043.1630555-1-lsahlber@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ronnie Sahlberg Aug. 25, 2021, 7:30 a.m. UTC
Steve, List

Please find a patch that stops us from leaking EDEADLK (not enough credits)
to userspace when we do not have enough credits due to a pending reconnect.
This can be triggered for example if the server responds with
STATUS_USER_SESSION_DELETED during the Create part of the Create/QueryDir
that starts a directory scan.


Easiest way to reproduce this is patching up scrambla to inject this error
every 3 directory scans:
diff mbox

Patch

diff --git a/server/server.py b/server/server.py
index 7fd113b..47d0b7f 100644
--- a/server/server.py
+++ b/server/server.py
@@ -26,6 +26,7 @@  from smb2.filesystem_info import *
 from smb2.dir_info import *
 from smb2.ntlmssp import *
 
+
 class File(object):
 
     def __init__(self, path, flags, at, **kwargs):
@@ -81,6 +82,7 @@  class Server(object):
     dialect = 0
     
     def __init__(self, s, **kwargs):
+        self.errc = 0
         self._s = s
         self._sesid = 1
         self._treeid = 1
@@ -348,6 +350,16 @@  class Server(object):
         #
         # Create/Open
         #
+        #print('PDU', pdu)
+        if pdu['desired_access'] == 0x81:
+            print('YEAH')
+            self.errc = self.errc + 1
+            if self.errc == 3:
+                print('Generate error')
+                self.errc = 0
+                self._compound_error = Status.INVALID_PARAMETER
+                return (Status.USER_SESSION_DELETED,
+                        ErrorResponse.encode({'error_data' : bytes(1)}))
         if not hdr['tree_id'] in self.trees:
             self._compound_error = Status.INVALID_PARAMETER
             return (self._compound_error,