Search squid archive

Re: [ext] Re: ftp related crash in squid-6.0.0-20220905-r9358e99f9

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 6/19/23 16:44, Ralf Hildebrandt wrote:
I hope I got it all cut&pasted

This information was very useful, thank you!


storedWholeReply_ = "ftpReadTransferDone code 226 or 250"

I suspect that the current Client::markParsedVirginReplyAsWhole() assumptions about received-vs-stored response data do not match our FTP code (in this particular use case). It is not clear to me whether Ftp::Gateway code is not storing any response headers at all this case (a bug) OR it is calling that method prematurely, before storing response headers (a different bug). Either way, FwdState gets a "complete" but empty Store entry, which is not supposed to happen (because every Store entry has HTTP response headers or equivalent), and Squid asserts.

Unfortunately, I do not remember enough about FTP code to quickly triage this further. I recommend filing a bug report with Squid bugzilla in hope that somebody will volunteer a bug fix (or, at least, a workaround).


Thank you,

Alex.


     frame 3
#3  0x000055555570e9c2 in FwdState::completed (this=this@entry=0x55556c0a4748) at FwdState.cc:299
299            assert(!storedWholeReply_);

     print this
$1 = (FwdState * const) 0x55556c0a4748

$2 = {
   <Lock> = {
     _vptr.Lock = 0x555555b6c3b8 <vtable for FwdState+88>,
     count_ = 2
   },
   <PeerSelectionInitiator> = {
     <CbdataParent> = {
       _vptr.CbdataParent = 0x555555b6c378 <vtable for FwdState+24>
     },
     members of PeerSelectionInitiator:
     subscribed = false
   },
   members of FwdState:
   entry = 0x55555e31aaf0,
   request = 0x55562827ab90,
   al = {
     p_ = 0x5555b6ecaec0
   },
   self = {
     p_ = 0x55556c0a4748
   },
   err = 0x0,
   clientConn = {
     p_ = 0x5555dafd6ea0
   },
   start_t = 1687188676,
   n_tries = 1,
   flags = {
     connected_okay = true,
     dont_retry = false,
     forward_completed = true,
     destinationsFound = true
   },
   transportWait = {
     <JobWaitBase> = {
       job_ = {
         cbc = 0x0,
         lock = 0x0
       },
       callback_ = {
         p_ = 0x0
       }
     },
     members of JobWait<HappyConnOpener>:
     typedJob_ = {
       cbc = 0x55566ccd1888,
       lock = 0x55566ccd1888
     }
   },
   encryptionWait = {
     <JobWaitBase> = {
       job_ = {
         cbc = 0x0,
         lock = 0x0
       },
       callback_ = {
         p_ = 0x0
       }
     },
     members of JobWait<Security::PeerConnector>:
     typedJob_ = {
       cbc = 0x0,
       lock = 0x0
     }
   },
   peerWait = {
     <JobWaitBase> = {
       job_ = {
         cbc = 0x0,
         lock = 0x0
       },
       callback_ = {
         p_ = 0x0
       }
     },
     members of JobWait<Http::Tunneler>:
     typedJob_ = {
       cbc = 0x0,
       lock = 0x0
     }
   },
   waitingForDispatched = false,
   destinations = {
     p_ = 0x555654304b50
   },
   serverConn = {
     p_ = 0x0
   },
   destinationReceipt = {
     connection_ = {
       p_ = 0x0
     },
     position_ = 18446744073709551615
   },
   closeHandler = {
     p_ = 0x0
   },
   pconnRace = FwdState::raceImpossible,
   storedWholeReply_ = 0x555555a94350 "ftpReadTransferDone code 226 or 250"
}

print *entry

$3 = {
   <hash_link> = {
     key = 0x55556bfa3d50,
     next = 0x5555b6b68468
   },
   <Packable> = {
     _vptr.Packable = 0x555555b6ec50 <vtable for StoreEntry+16>
   },
   members of StoreEntry:
   mem_obj = 0x55559cd62ca0,
   repl = {
     data = 0x0
   },
   timestamp = -1,
   lastref = 1687188676,
   expires = -1,
   lastModified_ = -1,
   swap_file_sz = 0,
   refcount = 1,
   flags = 1216,
   swap_filen = -1,
   swap_dirn = -1,
   mem_status = NOT_IN_MEMORY,
   ping_status = PING_DONE,
   store_status = STORE_PENDING,
   swap_status = SWAPOUT_NONE,
   cachedESITree = {
     p_ = 0x0
   },
   lock_count = 3,
   shareableWhenPrivate = false,
   deferredProducer = {
     p_ = 0x0
   }
}

print *entry->mem_obj

$4 = {
   appliedUpdates = false,
   method = {
     theMethod = Http::METHOD_GET,
     theImage = {
       id = {
         value = 99694914
       },
       store_ = {
         p_ = 0x555555cb57d0
       },
       off_ = 0,
       len_ = 0
     }
   },
   data_hdr = {
     inmem_hi = 0,
     nodes = {
       head = 0x0,
       elements = 0
     }
   },
   inmem_lo = 0,
   clients = {
     head = 0x55555acdbe30,
     tail = 0x55555acdbe30
   },
   nclients = 1,
   swapout = {
     queue_offset = 0,
     sio = {
       p_ = 0x0
     },
     decision = MemObject::SwapOut::swNeedsCheck
   },
   xitTable = {
     index = -1,
     io = Store::ioUndecided
   },
   memCache = {
     index = -1,
     offset = 0,
     io = Store::ioUndecided
   },
   request = {
     p_ = 0x55562827ab90
   },
   start_ping = {
     tv_sec = 0,
     tv_usec = 0
   },
   ping_reply_callback = 0x0,
   ircb_data = 0x0,
   abortCallback = {
     p_ = 0x5556543f35b0
   },
   repl = {
     data = 0x0
   },
   id = 105121620,
   object_sz = -1,
   swap_hdr_sz = 0,
   vary_headers = {
     id = {
       value = 99694915
     },
     store_ = {
       p_ = 0x555555cb57d0
     },
     off_ = 0,
     len_ = 0
   },
   reply_ = {
     p_ = 0x55563217e040
   },
   updatedReply_ = {
     p_ = 0x0
   },
   storeId_ = {
     size_ = 40,
     len_ = 35,
     buf_ = 0x5555df5d7a50 "ftp://ftp.nimblestorage.com/upload/";
   },
   logUri_ = {
     size_ = 40,
     len_ = 35,
     buf_ = 0x5555e78446a0 "ftp://ftp.nimblestorage.com/upload/";
   },
   deferredReads = {
     deferredReads = {
       head = {
         p_ = 0x0
       },
       tail = {
         p_ = 0x0
       },
       length = 0
     }
   }
}

frame 10
#10 0x00005555558816f6 in Ftp::Gateway::handleControlReply (this=0x5555662702c8) at FtpGateway.cc:1176
1176	    FTP_SM_FUNCS[state] (this);

print this
$5 = (Ftp::Gateway * const) 0x5555662702c8

print *this
$6 = {
   <Ftp::Client> = {
     <Client> = {
       <Adaptation::Initiator> = {
         <AsyncJob> = {
           <CbdataParent> = {
             _vptr.CbdataParent = 0x555555b78ec8 <vtable for Ftp::Gateway+520>
           },
           members of AsyncJob:
           id = {
             value = 201681648
           },
           stopReason = 0x0,
           typeName = 0x555555a9355f "FtpStateData",
           inCall = {
             p_ = 0x5555ff888600
           },
           started_ = true,
           swanSang_ = false
         },
         members of Adaptation::Initiator:
         _vptr.Initiator = 0x555555b78cd8 <vtable for Ftp::Gateway+24>
       },
       <BodyProducer> = {
         members of BodyProducer:
         _vptr.BodyProducer = 0x555555b78e18 <vtable for Ftp::Gateway+344>
       },
       <BodyConsumer> = {
         members of BodyConsumer:
         _vptr.BodyConsumer = 0x555555b78e50 <vtable for Ftp::Gateway+400>
       },
       members of Client:
       completed = true,
       currentOffset = 0,
       responseBodyBuffer = 0x0,
       entry = 0x55555e31aaf0,
       fwd = {
         p_ = 0x55556c0a4748
       },
       request = {
         p_ = 0x55562827ab90
       },
       requestBodySource = {
         p_ = 0x0
       },
       requestSender = {
         p_ = 0x0
       },
       virginBodyDestination = {
         p_ = 0x0
       },
       adaptedHeadSource = {
         cbc = 0x0,
         lock = 0x0
       },
       adaptedBodySource = {
         p_ = 0x0
       },
       adaptationAccessCheckPending = false,
       startedAdaptation = false,
       receivedWholeAdaptedReply = false,
       receivedWholeRequestBody = false,
       doneWithFwd = 0x555555a92a12 "completeForwarding()",
       theVirginReply = 0x0,
       theFinalReply = 0x0
     },
     members of Ftp::Client:
     ctrl = {
       <Ftp::Channel> = {
         conn = {
           p_ = 0x0
         },
         listenConn = {
           p_ = 0x0
         },
         closer = {
           p_ = 0x0
         }
       },
       members of Ftp::CtrlChannel:
       buf = 0x5556084e8f30 "221 Goodbye.\r\nsend OK.\r\ntory listing.\r\n226 Directory send OK.\r\n####\r\n220-Welcome to the HPE NimbleStorage FTP Server.\r\n220-\r\n220-Please prepend files to be uploaded with your case number\r\n220-so that "...,
       size = 4096,
       offset = 0,
       message = 0x5555b1cb8b80,
       last_command = 0x5555a99543f0 "QUIT\r\n",
       last_reply = 0x5555bb4e65a0 "Goodbye.",
       replycode = 221
     },
     data = {
       <Ftp::Channel> = {
         conn = {
           p_ = 0x0
         },
         listenConn = {
           p_ = 0x0
         },
         closer = {
           p_ = 0x0
         }
       },
       members of Ftp::DataChannel:
       readBuf = 0x55555e493418,
       host = 0x5555bb42a4e0 "198.54.168.47",
       port = 6892,
       read_pending = false
     },
     ftp_state_t = Ftp::Client::BEGIN,
     state = 18,
     old_request = 0x0,
     old_reply = 0x0,
     dataConnWait = {
       <JobWaitBase> = {
         job_ = {
           cbc = 0x0,
           lock = 0x0
         },
         callback_ = {
           p_ = 0x0
         }
       },
       members of JobWait<Comm::ConnOpener>:
       typedJob_ = {
         cbc = 0x55557d0ec1b8,
         lock = 0x55557d0ec1b8
       }
     },
     shortenReadTimeout = false
   },
   members of Ftp::Gateway:
   user = "anonymous", '\000' <repeats 8182 times>,
   password = "Squid@", '\000' <repeats 8185 times>,
   password_url = 0,
   reply_hdr = 0x0,
   reply_hdr_state = 0,
   clean_url = {
     size_ = 0,
     len_ = 0,
     buf_ = 0x0
   },
   title_url = {
     size_ = 40,
     len_ = 35,
     buf_ = 0x5555d58c86b0 "ftp://ftp.nimblestorage.com/upload/";
   },
   base_href = {
     size_ = 40,
     len_ = 36,
     buf_ = 0x55559dd8c4f0 "ftp://ftp.nimblestorage.com/upload//";
   },
   conn_att = 0,
   login_att = 0,
   mdtm = -1,
   theSize = -1,
   pathcomps = 0x0,
   filepath = 0x0,
   dirpath = 0x5555e4136d90 "upload",
   restart_offset = 0,
   proxy_host = 0x0,
   list_width = 0,
   cwd_message = {
     size_ = 40,
     len_ = 36,
     buf_ = 0x5555c4d14f00 "\n250 Directory successfully changed."
   },
   old_filepath = 0x0,
   typecode = 0 '\000',
   listing = {
     <Packable> = {
       _vptr.Packable = 0x555555b6cab0 <vtable for MemBuf+16>
     },
     members of MemBuf:
     buf = 0x5555cc7050c0 "",
     size = 0,
     max_capacity = 2097152000,
     capacity = 2048,
     stolen = 0
   },
   flags = {
     pasv_supported = true,
     epsv_all_sent = false,
     pasv_only = false,
     pasv_failed = false,
     authenticated = false,
     tried_auth_anonymous = true,
     tried_auth_nopass = false,
     isdir = true,
     skip_whitespace = false,
     rest_supported = true,
     http_header_sent = false,
     tried_nlst = false,
     need_base_href = false,
     dir_slash = false,
     root_dir = false,
     no_dotdot = false,
     binary = false,
     try_slash_hack = false,
     put = false,
     put_mkdir = false,
     listformat_unknown = false,
     listing = true,
     completed_forwarding = true
   }
}


_______________________________________________
squid-users mailing list
squid-users@xxxxxxxxxxxxxxxxxxxxx
http://lists.squid-cache.org/listinfo/squid-users



[Index of Archives]     [Linux Audio Users]     [Samba]     [Big List of Linux Books]     [Linux USB]     [Yosemite News]

  Powered by Linux