Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[XrdCl] does not always try full list of offered authentication methods #14

Closed
apeters1971 opened this issue May 8, 2013 · 15 comments
Closed

Comments

@apeters1971
Copy link
Contributor

If the XRootD server offers several authentication methods and the authentication fails during the handshake, the new XrdCl does not continue to try alternative authentication methods.

[2013-05-08 22:28:19 +0200][Debug  ][File              ] [0xdc41610@root://localhost//proc/user/?mgm.cmd=cd&mgm.path=/eos/dev/raiddp/&mgm.option=s&eos.ruid=0&eos.rgid=0] Sending an open command
[2013-05-08 22:28:19 +0200][Debug  ][PostMaster        ] [localhost:1094] Found 1 address(es): [::127.0.0.1]:1094
[2013-05-08 22:28:19 +0200][Debug  ][AsyncSock         ] [localhost:1094 #0.0] Attempting connection to [::127.0.0.1]:1094
[2013-05-08 22:28:19 +0200][Debug  ][Poller            ] Adding socket 0xcbbd330 to the poller
[2013-05-08 22:28:19 +0200][Debug  ][AsyncSock         ] [localhost:1094 #0.0] Async connection call returned
[2013-05-08 22:28:19 +0200][Debug  ][XRootDTransport   ] [localhost:1094 #0.0] Sending out the initial hand shake + kXR_protocol
[2013-05-08 22:28:19 +0200][Debug  ][XRootDTransport   ] [localhost:1094 #0.0] Got the server hand shake response (type: manager [], protocol version 297)
[2013-05-08 22:28:19 +0200][Debug  ][XRootDTransport   ] [localhost:1094 #0.0] kXR_protocol successful (type: manager [], protocol version 297)
[2013-05-08 22:28:19 +0200][Debug  ][XRootDTransport   ] [localhost:1094 #0.0] Sending out kXR_login request, username: root
[2013-05-08 22:28:19 +0200][Debug  ][XRootDTransport   ] [localhost:1094 #0.0] Logged in
[2013-05-08 22:28:19 +0200][Debug  ][XRootDTransport   ] [localhost:1094 #0.0] Authentication is required: &P=krb5,host/eosdevsrv1.cern.ch@CERN.CH,fwd&P=gsi,v:10300,c:ssl,ca:1d879c6c.0&P=unix&P=sss,0.13:/etc/eos.keytab
[2013-05-08 22:28:19 +0200][Debug  ][XRootDTransport   ] [localhost:1094 #0.0] Sending authentication data
sec_Client: protocol request for host localhost token='&P=krb5,host/eosdevsrv1.cern.ch@CERN.CH,fwd&P=gsi,v:10300,c:ssl,ca:1d879c6c.0&P=unix&P=sss,0.13:/etc/eos.keytab'
sec_PM: Using krb5 protocol, args='host/eosdevsrv1.cern.ch@CERN.CH,fwd'
[2013-05-08 22:28:19 +0200][Debug  ][XRootDTransport   ] [localhost:1094 #0.0] Trying to authenticate using krb5
Seckrb5: getCredentials
Seckrb5: FILE:/tmp/krb5cc_0_MVRZoE
Seckrb5: init context
Seckrb5: cc cache default
Seckrb5: context lock
Seckrb5: context locked
Seckrb5: Returned 3093 bytes of creds; p=host/eosdevsrv1.cern.ch@CERN.CH
[2013-05-08 22:28:19 +0200][Debug  ][XRootDTransport   ] [localhost:1094 #0.0] Sending more authentication data for krb5
Seckrb5: getCredentials
Seckrb5: FILE:/tmp/krb5cc_0_MVRZoE
Seckrb5: init context
Seckrb5: cc cache default
Seckrb5: context lock
Seckrb5: context locked
Seckrb5: get_krbFwdCreds: err getting forwarded ticket;Key version is not available
[2013-05-08 22:28:19 +0200][Debug  ][XRootDTransport   ] [localhost:1094 #0.0] Auth protocol handler for krb5 refuses to give us more credentials Seckrb5: Unable to get forwarded credentials; Key version is not available (p=host/eosdevsrv1.cern.ch@CERN.CH).
[2013-05-08 22:28:19 +0200][Error  ][AsyncSock         ] [localhost:1094 #0.0] Socket error while handshaking: [FATAL] Auth failed
[2013-05-08 22:28:19 +0200][Debug  ][AsyncSock         ] [localhost:1094 #0.0] Closing the socket
[2013-05-08 22:28:19 +0200][Debug  ][Poller            ] <[::127.0.0.1]:48212><--><[::127.0.0.1]:1094> Removing socket from the poller
[2013-05-08 22:28:19 +0200][Error  ][PostMaster        ] [localhost:1094 #0] Unable to recover: [FATAL] Auth failed.
[2013-05-08 22:28:19 +0200][Error  ][XRootD            ] [localhost:1094] Impossible to send message . Trying to recover.
[2013-05-08 22:28:19 +0200][Error  ][XRootD            ] [localhost:1094] Handling error while processing : [FATAL] Auth failed.
[2013-05-08 22:28:19 +0200][Debug  ][File              ] [0xdc41610@root://localhost//proc/user/?mgm.cmd=cd&mgm.path=/eos/dev/raiddp/&mgm.option=s&eos.ruid=0&eos.rgid=0] Open has returned with status [FATAL] Auth failed
[2013-05-08 22:28:19 +0200][Debug  ][File              ] [0xdc41610@root://localhost//proc/user/?mgm.cmd=cd&mgm.path=/eos/dev/raiddp/&mgm.option=s&eos.ruid=0&eos.rgid=0] Error while opening at localhost:1094: [FATAL] Auth failed
@bbockelm
Copy link
Contributor

bbockelm commented May 8, 2013

I don't know if it's related - but CMS has found it is very important to return to redirector in the case of an auth failure. This was added late to the older client and is really a hard requirement for how we use the system.

@ljanyst
Copy link
Contributor

ljanyst commented May 8, 2013

That's the issue with the XRootD protocol/security API. Once you have some credentials client-side for a given protocol and send kXR_auth, the protocol doesn't allow you to change your mind and use different method, even if the credentials are actually not accepted by the server.

@ljanyst
Copy link
Contributor

ljanyst commented May 8, 2013

The old client behaves the same.

@ljanyst
Copy link
Contributor

ljanyst commented May 8, 2013

@bbockelm are you saying that in the new client this feature doesn't work?

@ljanyst
Copy link
Contributor

ljanyst commented May 8, 2013

@apeters1971 you have to say kdestroy if you want gsi

@ljanyst
Copy link
Contributor

ljanyst commented May 9, 2013

@abh3 we should think about fixing it. I don't think it requires a change to the protocol, just the security API.

@gganis
Copy link
Member

gganis commented May 10, 2013

Lukasz, I am not sure to understand: the old client IS retrying all the protocols offered by the server: it just loops over the list send over by the server, and, in case of failure, destroys the old credential buffer before creating a new one. Why do you say is not? Or are you referring to something different?

@bbockelm
Copy link
Contributor

@ljanyst - I haven't verified the behavior in the new client versus old - just pointing out it is an important requirement/request to keep in mind.

@ghost ghost assigned ljanyst May 10, 2013
@ljanyst
Copy link
Contributor

ljanyst commented May 10, 2013

@gganis huh, you're right, but I recall having a problem with this. I will have a look again when I get back to Geneva.

@ljanyst
Copy link
Contributor

ljanyst commented May 10, 2013

@bbockelm this has been implemented in the new client as well

@ljanyst
Copy link
Contributor

ljanyst commented May 14, 2013

The issue in the new client is now fixed:
3739bd6

However, I see memory leaks in the authentication subroutines, both with the old and the new client:

==11941== 
==11941== HEAP SUMMARY:
==11941==     in use at exit: 143,160 bytes in 3,732 blocks
==11941==   total heap usage: 5,771 allocs, 2,039 frees, 708,462 bytes allocated
==11941== 
==11941== 1 bytes in 1 blocks are definitely lost in loss record 7 of 675
==11941==    at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11941==    by 0x5A97D81: strdup (strdup.c:43)
==11941==    by 0xC60118A: XrdSecProtocolsss::Load_Client(XrdOucErrInfo*, char const*) (XrdSecProtocolsss.cc:412)
==11941==    by 0xA82640D: ???
==11941==    by 0xA826D23: ???
==11941==    by 0xA825C74: ???
==11941==    by 0x4E6FEA5: XrdCl::XRootDTransport::GetCredentials(XrdSecBuffer*&, XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1314)
==11941==    by 0x4E70D0F: XrdCl::XRootDTransport::DoAuthentication(XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1243)
==11941==    by 0x4E71105: XrdCl::XRootDTransport::HandShakeMain(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:338)
==11941==    by 0x4E712AA: XrdCl::XRootDTransport::HandShake(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:247)
==11941==    by 0x4EB12A9: XrdCl::AsyncSocketHandler::OnReadWhileHandshaking() (XrdClAsyncSocketHandler.cc:573)
==11941==    by 0x4E675F1: (anonymous namespace)::SocketCallBack::Event(XrdSys::IOEvents::Channel*, void*, int) (XrdClPollerBuiltIn.cc:75)
==11941== 
==11941== 16 bytes in 1 blocks are definitely lost in loss record 31 of 675
==11941==    at 0x4C2B1C7: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11941==    by 0xC80B58C: XrdCryptoLite_New_bf32(char) (XrdCryptoLite_bf32.cc:172)
==11941==    by 0xC80B22D: XrdCryptoLite::Create(int&, char const*, char) (XrdCryptoLite.cc:55)
==11941==    by 0xC601588: XrdSecProtocolsss::Load_Crypto(XrdOucErrInfo*, char) (XrdSecProtocolsss.cc:473)
==11941==    by 0xC601738: XrdSecProtocolsss::Init_Client(XrdOucErrInfo*, char const*) (XrdSecProtocolsss.cc:311)
==11941==    by 0xC60278C: XrdSecProtocolsssObject (XrdSecProtocolsss.cc:896)
==11941==    by 0xA826AF9: ???
==11941==    by 0xA825C74: ???
==11941==    by 0x4E6FEA5: XrdCl::XRootDTransport::GetCredentials(XrdSecBuffer*&, XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1314)
==11941==    by 0x4E70D0F: XrdCl::XRootDTransport::DoAuthentication(XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1243)
==11941==    by 0x4E71105: XrdCl::XRootDTransport::HandShakeMain(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:338)
==11941==    by 0x4E712AA: XrdCl::XRootDTransport::HandShake(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:247)
==11941== 
==11941== 24 bytes in 1 blocks are definitely lost in loss record 540 of 675
==11941==    at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11941==    by 0xAC72D0B: ??? (in /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3)
==11941==    by 0xAC6D3A0: krb5_cc_resolve (in /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3)
==11941==    by 0xAA31BC6: XrdSecProtocolkrb5::Init(XrdOucErrInfo*, char*, char*) (XrdSecProtocolkrb5.cc:556)
==11941==    by 0xAA33CFA: XrdSecProtocolkrb5Init (XrdSecProtocolkrb5.cc:890)
==11941==    by 0xA82640D: ???
==11941==    by 0xA826D23: ???
==11941==    by 0xA825C74: ???
==11941==    by 0x4E6FEA5: XrdCl::XRootDTransport::GetCredentials(XrdSecBuffer*&, XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1314)
==11941==    by 0x4E70B09: XrdCl::XRootDTransport::DoAuthentication(XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1162)
==11941==    by 0x4E7115D: XrdCl::XRootDTransport::HandShakeMain(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:325)
==11941==    by 0x4E712AA: XrdCl::XRootDTransport::HandShake(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:247)
==11941== 
==11941== 24 bytes in 1 blocks are definitely lost in loss record 541 of 675
==11941==    at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11941==    by 0xAC72D0B: ??? (in /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3)
==11941==    by 0xAC6D3A0: krb5_cc_resolve (in /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3)
==11941==    by 0xAA3230B: XrdSecProtocolkrb5::getCredentials(XrdSecBuffer*, XrdOucErrInfo*) (XrdSecProtocolkrb5.cc:254)
==11941==    by 0x4E6FEF5: XrdCl::XRootDTransport::GetCredentials(XrdSecBuffer*&, XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1329)
==11941==    by 0x4E70B09: XrdCl::XRootDTransport::DoAuthentication(XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1162)
==11941==    by 0x4E7115D: XrdCl::XRootDTransport::HandShakeMain(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:325)
==11941==    by 0x4E712AA: XrdCl::XRootDTransport::HandShake(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:247)
==11941==    by 0x4EB12A9: XrdCl::AsyncSocketHandler::OnReadWhileHandshaking() (XrdClAsyncSocketHandler.cc:573)
==11941==    by 0x4E675F1: (anonymous namespace)::SocketCallBack::Event(XrdSys::IOEvents::Channel*, void*, int) (XrdClPollerBuiltIn.cc:75)
==11941==    by 0x5DF37A3: XrdSys::IOEvents::Poller::CbkXeq(XrdSys::IOEvents::Channel*, int, int, char const*) (XrdSysIOEvents.cc:683)
==11941==    by 0x5DF4894: XrdSys::IOEvents::PollE::Dispatch(XrdSys::IOEvents::Channel*, unsigned int) (XrdSysIOEventsPollE.icc:247)
==11941== 
==11941== 33 bytes in 1 blocks are definitely lost in loss record 562 of 675
==11941==    at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11941==    by 0x5A97D81: strdup (strdup.c:43)
==11941==    by 0xAA32DBA: XrdSecProtocolkrb5::getCredentials(XrdSecBuffer*, XrdOucErrInfo*) (XrdSecProtocolkrb5.cc:239)
==11941==    by 0x4E6FEF5: XrdCl::XRootDTransport::GetCredentials(XrdSecBuffer*&, XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1329)
==11941==    by 0x4E70B09: XrdCl::XRootDTransport::DoAuthentication(XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1162)
==11941==    by 0x4E7115D: XrdCl::XRootDTransport::HandShakeMain(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:325)
==11941==    by 0x4E712AA: XrdCl::XRootDTransport::HandShake(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:247)
==11941==    by 0x4EB12A9: XrdCl::AsyncSocketHandler::OnReadWhileHandshaking() (XrdClAsyncSocketHandler.cc:573)
==11941==    by 0x4E675F1: (anonymous namespace)::SocketCallBack::Event(XrdSys::IOEvents::Channel*, void*, int) (XrdClPollerBuiltIn.cc:75)
==11941==    by 0x5DF37A3: XrdSys::IOEvents::Poller::CbkXeq(XrdSys::IOEvents::Channel*, int, int, char const*) (XrdSysIOEvents.cc:683)
==11941==    by 0x5DF4894: XrdSys::IOEvents::PollE::Dispatch(XrdSys::IOEvents::Channel*, unsigned int) (XrdSysIOEventsPollE.icc:247)
==11941==    by 0x5DF4A41: XrdSys::IOEvents::PollE::Begin(XrdSysSemaphore*, int&, char const**) (XrdSysIOEventsPollE.icc:209)
==11941== 
==11941== 72 (40 direct, 32 indirect) bytes in 1 blocks are definitely lost in loss record 580 of 675
==11941==    at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11941==    by 0xAC71AF7: ??? (in /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3)
==11941==    by 0xAC72A0D: ??? (in /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3)
==11941==    by 0xAA31FD9: XrdSecProtocolkrb5::get_krbFwdCreds(char*, _krb5_data*) (XrdSecProtocolkrb5.cc:714)
==11941==    by 0xAA323A0: XrdSecProtocolkrb5::getCredentials(XrdSecBuffer*, XrdOucErrInfo*) (XrdSecProtocolkrb5.cc:283)
==11941==    by 0x4E70E1F: XrdCl::XRootDTransport::DoAuthentication(XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1193)
==11941==    by 0x4E71105: XrdCl::XRootDTransport::HandShakeMain(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:338)
==11941==    by 0x4E712AA: XrdCl::XRootDTransport::HandShake(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:247)
==11941==    by 0x4EB12A9: XrdCl::AsyncSocketHandler::OnReadWhileHandshaking() (XrdClAsyncSocketHandler.cc:573)
==11941==    by 0x4E675F1: (anonymous namespace)::SocketCallBack::Event(XrdSys::IOEvents::Channel*, void*, int) (XrdClPollerBuiltIn.cc:75)
==11941==    by 0x5DF37A3: XrdSys::IOEvents::Poller::CbkXeq(XrdSys::IOEvents::Channel*, int, int, char const*) (XrdSysIOEvents.cc:683)
==11941==    by 0x5DF4894: XrdSys::IOEvents::PollE::Dispatch(XrdSys::IOEvents::Channel*, unsigned int) (XrdSysIOEventsPollE.icc:247)
==11941== 
==11941== 104 (40 direct, 64 indirect) bytes in 1 blocks are definitely lost in loss record 587 of 675
==11941==    at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11941==    by 0xAC91D5F: ??? (in /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3)
==11941==    by 0xAA31CCA: XrdSecProtocolkrb5::get_krbCreds(char*, _krb5_creds**) (XrdSecProtocolkrb5.cc:672)
==11941==    by 0xAA327D1: XrdSecProtocolkrb5::getCredentials(XrdSecBuffer*, XrdOucErrInfo*) (XrdSecProtocolkrb5.cc:315)
==11941==    by 0x4E6FEF5: XrdCl::XRootDTransport::GetCredentials(XrdSecBuffer*&, XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1329)
==11941==    by 0x4E70B09: XrdCl::XRootDTransport::DoAuthentication(XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1162)
==11941==    by 0x4E7115D: XrdCl::XRootDTransport::HandShakeMain(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:325)
==11941==    by 0x4E712AA: XrdCl::XRootDTransport::HandShake(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:247)
==11941==    by 0x4EB12A9: XrdCl::AsyncSocketHandler::OnReadWhileHandshaking() (XrdClAsyncSocketHandler.cc:573)
==11941==    by 0x4E675F1: (anonymous namespace)::SocketCallBack::Event(XrdSys::IOEvents::Channel*, void*, int) (XrdClPollerBuiltIn.cc:75)
==11941==    by 0x5DF37A3: XrdSys::IOEvents::Poller::CbkXeq(XrdSys::IOEvents::Channel*, int, int, char const*) (XrdSysIOEvents.cc:683)
==11941==    by 0x5DF4894: XrdSys::IOEvents::PollE::Dispatch(XrdSys::IOEvents::Channel*, unsigned int) (XrdSysIOEventsPollE.icc:247)
==11941== 
==11941== 104 (40 direct, 64 indirect) bytes in 1 blocks are definitely lost in loss record 588 of 675
==11941==    at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11941==    by 0xAC91D5F: ??? (in /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3)
==11941==    by 0xAA3202F: XrdSecProtocolkrb5::get_krbFwdCreds(char*, _krb5_data*) (XrdSecProtocolkrb5.cc:721)
==11941==    by 0xAA323A0: XrdSecProtocolkrb5::getCredentials(XrdSecBuffer*, XrdOucErrInfo*) (XrdSecProtocolkrb5.cc:283)
==11941==    by 0x4E70E1F: XrdCl::XRootDTransport::DoAuthentication(XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1193)
==11941==    by 0x4E71105: XrdCl::XRootDTransport::HandShakeMain(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:338)
==11941==    by 0x4E712AA: XrdCl::XRootDTransport::HandShake(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:247)
==11941==    by 0x4EB12A9: XrdCl::AsyncSocketHandler::OnReadWhileHandshaking() (XrdClAsyncSocketHandler.cc:573)
==11941==    by 0x4E675F1: (anonymous namespace)::SocketCallBack::Event(XrdSys::IOEvents::Channel*, void*, int) (XrdClPollerBuiltIn.cc:75)
==11941==    by 0x5DF37A3: XrdSys::IOEvents::Poller::CbkXeq(XrdSys::IOEvents::Channel*, int, int, char const*) (XrdSysIOEvents.cc:683)
==11941==    by 0x5DF4894: XrdSys::IOEvents::PollE::Dispatch(XrdSys::IOEvents::Channel*, unsigned int) (XrdSysIOEventsPollE.icc:247)
==11941==    by 0x5DF4A41: XrdSys::IOEvents::PollE::Begin(XrdSysSemaphore*, int&, char const**) (XrdSysIOEventsPollE.icc:209)
==11941== 
==11941== 164 (40 direct, 124 indirect) bytes in 1 blocks are definitely lost in loss record 594 of 675
==11941==    at 0x4C2B1C7: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11941==    by 0xA8260BF: ???
==11941==    by 0xA826446: ???
==11941==    by 0xA826D23: ???
==11941==    by 0xA825C74: ???
==11941==    by 0x4E6FEA5: XrdCl::XRootDTransport::GetCredentials(XrdSecBuffer*&, XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1314)
==11941==    by 0x4E70B09: XrdCl::XRootDTransport::DoAuthentication(XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1162)
==11941==    by 0x4E7115D: XrdCl::XRootDTransport::HandShakeMain(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:325)
==11941==    by 0x4E712AA: XrdCl::XRootDTransport::HandShake(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:247)
==11941==    by 0x4EB12A9: XrdCl::AsyncSocketHandler::OnReadWhileHandshaking() (XrdClAsyncSocketHandler.cc:573)
==11941==    by 0x4E675F1: (anonymous namespace)::SocketCallBack::Event(XrdSys::IOEvents::Channel*, void*, int) (XrdClPollerBuiltIn.cc:75)
==11941==    by 0x5DF37A3: XrdSys::IOEvents::Poller::CbkXeq(XrdSys::IOEvents::Channel*, int, int, char const*) (XrdSysIOEvents.cc:683)
==11941== 
==11941== 181 (176 direct, 5 indirect) bytes in 1 blocks are definitely lost in loss record 601 of 675
==11941==    at 0x4C2B1C7: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11941==    by 0xB752299: XrdSecProtocolgsi::GetCA(char const*, XrdCryptoFactory*, gsiHSVars*) (XrdSecProtocolgsi.cc:4309)
==11941==    by 0xB75879F: XrdSecProtocolgsi::ParseCAlist(XrdOucString) (XrdSecProtocolgsi.cc:4516)
==11941==    by 0xB75BF87: XrdSecProtocolgsi::ClientDoInit(XrdSutBuffer*, XrdSutBuffer**, XrdOucString&) (XrdSecProtocolgsi.cc:2930)
==11941==    by 0xB75C564: XrdSecProtocolgsi::ParseClientInput(XrdSutBuffer*, XrdSutBuffer**, XrdOucString&) (XrdSecProtocolgsi.cc:2841)
==11941==    by 0xB75C8DA: XrdSecProtocolgsi::getCredentials(XrdSecBuffer*, XrdOucErrInfo*) (XrdSecProtocolgsi.cc:1452)
==11941==    by 0x4E6FEF5: XrdCl::XRootDTransport::GetCredentials(XrdSecBuffer*&, XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1329)
==11941==    by 0x4E70D0F: XrdCl::XRootDTransport::DoAuthentication(XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1243)
==11941==    by 0x4E71105: XrdCl::XRootDTransport::HandShakeMain(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:338)
==11941==    by 0x4E712AA: XrdCl::XRootDTransport::HandShake(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:247)
==11941==    by 0x4EB12A9: XrdCl::AsyncSocketHandler::OnReadWhileHandshaking() (XrdClAsyncSocketHandler.cc:573)
==11941==    by 0x4E675F1: (anonymous namespace)::SocketCallBack::Event(XrdSys::IOEvents::Channel*, void*, int) (XrdClPollerBuiltIn.cc:75)
==11941== 
==11941== 300 (60 direct, 240 indirect) bytes in 1 blocks are definitely lost in loss record 612 of 675
==11941==    at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11941==    by 0x5B145A4: nss_parse_service_list (nsswitch.c:678)
==11941==    by 0x5B15065: __nss_database_lookup (nsswitch.c:175)
==11941==    by 0xA1F6623: ???
==11941==    by 0x5ACDC0C: getpwuid_r@@GLIBC_2.2.5 (getXXbyYY_r.c:256)
==11941==    by 0x5E087E9: XrdOucUtils::UserName(unsigned int, char*, int) (XrdOucUtils.cc:512)
==11941==    by 0x4E6F905: XrdCl::XRootDTransport::GenerateLogIn(XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1066)
==11941==    by 0x4E71195: XrdCl::XRootDTransport::HandShakeMain(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:300)
==11941==    by 0x4E712AA: XrdCl::XRootDTransport::HandShake(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:247)
==11941==    by 0x4EB12A9: XrdCl::AsyncSocketHandler::OnReadWhileHandshaking() (XrdClAsyncSocketHandler.cc:573)
==11941==    by 0x4E675F1: (anonymous namespace)::SocketCallBack::Event(XrdSys::IOEvents::Channel*, void*, int) (XrdClPollerBuiltIn.cc:75)
==11941==    by 0x5DF37A3: XrdSys::IOEvents::Poller::CbkXeq(XrdSys::IOEvents::Channel*, int, int, char const*) (XrdSysIOEvents.cc:683)
==11941== 
==11941== 300 (60 direct, 240 indirect) bytes in 1 blocks are definitely lost in loss record 613 of 675
==11941==    at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11941==    by 0x5B145A4: nss_parse_service_list (nsswitch.c:678)
==11941==    by 0x5B15065: __nss_database_lookup (nsswitch.c:175)
==11941==    by 0xA1F43BB: ???
==11941==    by 0x5ACC22C: getgrgid_r@@GLIBC_2.2.5 (getXXbyYY_r.c:256)
==11941==    by 0x5E07CDA: XrdOucUtils::GroupName(unsigned int, char*, int) (XrdOucUtils.cc:250)
==11941==    by 0xC603BFC: XrdSecsssID::genID(int) (XrdSecsssID.cc:203)
==11941==    by 0xC603D29: XrdSecsssID::getObj(XrdSecsssID::authType&, char**, int&) (XrdSecsssID.cc:148)
==11941==    by 0xC6010B2: XrdSecProtocolsss::Load_Client(XrdOucErrInfo*, char const*) (XrdSecProtocolsss.cc:380)
==11941==    by 0xA82640D: ???
==11941==    by 0xA826D23: ???
==11941==    by 0xA825C74: ???
==11941== 
==11941== 304 bytes in 1 blocks are possibly lost in loss record 614 of 675
==11941==    at 0x4C29DB4: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11941==    by 0x4012074: _dl_allocate_tls (dl-tls.c:297)
==11941==    by 0x52E4ABC: pthread_create@@GLIBC_2.2.5 (allocatestack.c:571)
==11941==    by 0x5DF00A6: XrdSysThread::Run(unsigned long*, void* (*)(void*), void*, int, char const*) (XrdSysPthread.cc:295)
==11941==    by 0xC6060B2: XrdSecsssKT::XrdSecsssKT(XrdOucErrInfo*, char const*, XrdSecsssKT::xMode, int) (XrdSecsssKT.cc:115)
==11941==    by 0xC60114F: XrdSecProtocolsss::Load_Client(XrdOucErrInfo*, char const*) (XrdSecProtocolsss.cc:401)
==11941==    by 0xA82640D: ???
==11941==    by 0xA826D23: ???
==11941==    by 0xA825C74: ???
==11941==    by 0x4E6FEA5: XrdCl::XRootDTransport::GetCredentials(XrdSecBuffer*&, XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1314)
==11941==    by 0x4E70D0F: XrdCl::XRootDTransport::DoAuthentication(XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1243)
==11941==    by 0x4E71105: XrdCl::XRootDTransport::HandShakeMain(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:338)
==11941== 
==11941== 1,469 (1,344 direct, 125 indirect) bytes in 1 blocks are definitely lost in loss record 656 of 675
==11941==    at 0x4C29DB4: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11941==    by 0xAC8B83E: krb5_init_context_profile (in /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3)
==11941==    by 0xAA31BAE: XrdSecProtocolkrb5::Init(XrdOucErrInfo*, char*, char*) (XrdSecProtocolkrb5.cc:551)
==11941==    by 0xAA33CFA: XrdSecProtocolkrb5Init (XrdSecProtocolkrb5.cc:890)
==11941==    by 0xA82640D: ???
==11941==    by 0xA826D23: ???
==11941==    by 0xA825C74: ???
==11941==    by 0x4E6FEA5: XrdCl::XRootDTransport::GetCredentials(XrdSecBuffer*&, XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1314)
==11941==    by 0x4E70B09: XrdCl::XRootDTransport::DoAuthentication(XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1162)
==11941==    by 0x4E7115D: XrdCl::XRootDTransport::HandShakeMain(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:325)
==11941==    by 0x4E712AA: XrdCl::XRootDTransport::HandShake(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:247)
==11941==    by 0x4EB12A9: XrdCl::AsyncSocketHandler::OnReadWhileHandshaking() (XrdClAsyncSocketHandler.cc:573)
==11941== 
==11941== 1,469 (1,344 direct, 125 indirect) bytes in 1 blocks are definitely lost in loss record 657 of 675
==11941==    at 0x4C29DB4: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11941==    by 0xAC8B83E: krb5_init_context_profile (in /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3)
==11941==    by 0xAA322E8: XrdSecProtocolkrb5::getCredentials(XrdSecBuffer*, XrdOucErrInfo*) (XrdSecProtocolkrb5.cc:246)
==11941==    by 0x4E6FEF5: XrdCl::XRootDTransport::GetCredentials(XrdSecBuffer*&, XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1329)
==11941==    by 0x4E70B09: XrdCl::XRootDTransport::DoAuthentication(XrdCl::HandShakeData*, XrdCl::XRootDChannelInfo*) (XrdClXRootDTransport.cc:1162)
==11941==    by 0x4E7115D: XrdCl::XRootDTransport::HandShakeMain(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:325)
==11941==    by 0x4E712AA: XrdCl::XRootDTransport::HandShake(XrdCl::HandShakeData*, XrdCl::AnyObject&) (XrdClXRootDTransport.cc:247)
==11941==    by 0x4EB12A9: XrdCl::AsyncSocketHandler::OnReadWhileHandshaking() (XrdClAsyncSocketHandler.cc:573)
==11941==    by 0x4E675F1: (anonymous namespace)::SocketCallBack::Event(XrdSys::IOEvents::Channel*, void*, int) (XrdClPollerBuiltIn.cc:75)
==11941==    by 0x5DF37A3: XrdSys::IOEvents::Poller::CbkXeq(XrdSys::IOEvents::Channel*, int, int, char const*) (XrdSysIOEvents.cc:683)
==11941==    by 0x5DF4894: XrdSys::IOEvents::PollE::Dispatch(XrdSys::IOEvents::Channel*, unsigned int) (XrdSysIOEventsPollE.icc:247)
==11941==    by 0x5DF4A41: XrdSys::IOEvents::PollE::Begin(XrdSysSemaphore*, int&, char const**) (XrdSysIOEventsPollE.icc:209)
==11941== 
==11941== LEAK SUMMARY:
==11941==    definitely lost: 3,242 bytes in 14 blocks
==11941==    indirectly lost: 1,019 bytes in 51 blocks
==11941==      possibly lost: 304 bytes in 1 blocks
==11941==    still reachable: 138,595 bytes in 3,666 blocks
==11941==         suppressed: 0 bytes in 0 blocks
==11941== Reachable blocks (those to which a pointer was found) are not shown.
==11941== To see them, rerun with: --leak-check=full --show-reachable=yes
==11941== 
==11941== For counts of detected and suppressed errors, rerun with: -v
==11941== ERROR SUMMARY: 15 errors from 15 contexts (suppressed: 2 from 2)

@ghost ghost assigned gganis May 14, 2013
@abh3
Copy link
Member

abh3 commented May 14, 2013

I'll look at these. Some appear to occur in standard library routines so we can't do much about that. Others appear to be one-time losses which are expected. I'm surprised you had to do something in your code. The security driver is supposed to try all authentication offered by the server. I hope you are not parsing the security token as that is a really bad thing to do.

@ljanyst
Copy link
Contributor

ljanyst commented May 15, 2013

I am not parsing anything. It was a minor issue in the error handling code of mine.

@abh3
Copy link
Member

abh3 commented May 23, 2013

I looked at the memory leaks. I can fix the one for sss but the krb5 ones are more difficult, so that will have to wait. One of the problems is the code was modified some time back and initialization is now done twice for some unknown reason causing some memory loss. Other places, it's clear things are not freed when they should be. Fortunately, the amount of loss is relatively small. As for the loss when using the nss libraries, that we can't do anything about. Seems like a bug in the library routine.

@ljanyst
Copy link
Contributor

ljanyst commented Jun 6, 2013

Fix to the auth problem ported to stable-3.3.x.

@ljanyst ljanyst closed this as completed Jun 6, 2013
gbitzes added a commit to gbitzes/xrootd that referenced this issue Nov 15, 2017
cP->dlType is being read outside of the lock. Diagnosed through the
following report from ThreadSanitizer:

WARNING: ThreadSanitizer: data race (pid=13166)
  Write of size 1 at 0x7b28000100d0 by thread T29 (mutexes: write M0, write M0, write M1382, write M0, write M1385):
    #0 XrdSys::IOEvents::Poller::TmoAdd(XrdSys::IOEvents::Channel*, int) /home/gbitzes/xrootd/src/XrdSys/XrdSysIOEvents.cc:1088 (libXrdUtils.so.2+0x0000000338f1)
    xrootd#1 XrdSys::IOEvents::Channel::Enable(int, int, char const**) /home/gbitzes/xrootd/src/XrdSys/XrdSysIOEvents.cc:415 (libXrdUtils.so.2+0x0000000355b6)
    xrootd#2 XrdCl::PollerBuiltIn::EnableWriteNotification(XrdCl::Socket*, bool, unsigned short) /home/gbitzes/xrootd/src/XrdCl/XrdClPollerBuiltIn.cc:481 (libXrdCl.so.2+0x000000063c50)
    xrootd#3 XrdCl::AsyncSocketHandler::EnableUplink() /home/gbitzes/xrootd/src/./XrdCl/XrdClAsyncSocketHandler.hh:96 (libXrdCl.so.2+0x00000006d06f)
    xrootd#4 XrdCl::Stream::EnableLink(XrdCl::PathID&) /home/gbitzes/xrootd/src/XrdCl/XrdClStream.cc:226 (libXrdCl.so.2+0x00000006d06f)
    xrootd#5 XrdCl::Stream::Send(XrdCl::Message*, XrdCl::OutgoingMsgHandler*, bool, long) /home/gbitzes/xrootd/src/XrdCl/XrdClStream.cc:316 (libXrdCl.so.2+0x00000006e0d7)
    xrootd#6 XrdCl::Channel::Send(XrdCl::Message*, XrdCl::OutgoingMsgHandler*, bool, long, XrdCl::VirtualRedirector*) /home/gbitzes/xrootd/src/XrdCl/XrdClChannel.cc:306 (libXrdCl.so.2+0x000000068686)
    xrootd#7 XrdCl::PostMaster::Send(XrdCl::URL const&, XrdCl::Message*, XrdCl::OutgoingMsgHandler*, bool, long) /home/gbitzes/xrootd/src/XrdCl/XrdClPostMaster.cc:198 (libXrdCl.so.2+0x000000066ec9)
    xrootd#8 XrdCl::MessageUtils::SendMessage(XrdCl::URL const&, XrdCl::Message*, XrdCl::ResponseHandler*, XrdCl::MessageSendParams const&) /home/gbitzes/xrootd/src/XrdCl/XrdClMessageUtils.cc:114 (libXrdCl.so.2+0x0000000b349e)
    xrootd#9 XrdCl::FileSystem::Send(XrdCl::Message*, XrdCl::ResponseHandler*, XrdCl::MessageSendParams&) /home/gbitzes/xrootd/src/XrdCl/XrdClFileSystem.cc:1419 (libXrdCl.so.2+0x000000085b3d)
    xrootd#10 XrdCl::FileSystem::Query(XrdCl::QueryCode::Code, XrdCl::Buffer const&, XrdCl::ResponseHandler*, unsigned short) /home/gbitzes/xrootd/src/XrdCl/XrdClFileSystem.cc:720 (libXrdCl.so.2+0x00000008fbe3)
    xrootd#11 XrdCl::FileSystem::Query(XrdCl::QueryCode::Code, XrdCl::Buffer const&, XrdCl::Buffer*&, unsigned short) /home/gbitzes/xrootd/src/XrdCl/XrdClFileSystem.cc:732 (libXrdCl.so.2+0x00000009006e)
    xrootd#12 backend::Query(XrdCl::FileSystem&, XrdCl::QueryCode::Code, XrdCl::Buffer&, XrdCl::Buffer*&) /afs/cern.ch/user/g/gbitzes/dev/eos/fusex/backend/backend.cc:875 (eosxd+0x00000067fb9f)
    xrootd#13 backend::putMD(fuse_id const&, eos::fusex::md*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, XrdSysMutex*) /afs/cern.ch/user/g/gbitzes/dev/eos/fusex/backend/backend.cc:454 (eosxd+0x00000068912e)
    xrootd#14 metad::mdcflush(ThreadAssistant&) /afs/cern.ch/user/g/gbitzes/dev/eos/fusex/md/md.cc:1887 (eosxd+0x000000611515)
    xrootd#15 void std::__invoke_impl<void, void (metad::*)(ThreadAssistant&), metad*, ThreadAssistant&>(std::__invoke_memfun_deref, void (metad::*&&)(ThreadAssistant&), metad*&&, ThreadAssistant&) /usr/include/c++/7/bits/invoke.h:73 (eosxd+0x0000005b1fb6)
    xrootd#16 std::__invoke_result<void (metad::*)(ThreadAssistant&), metad*, ThreadAssistant&>::type std::__invoke<void (metad::*)(ThreadAssistant&), metad*, ThreadAssistant&>(void (metad::*&&)(ThreadAssistant&), metad*&&, ThreadAssistant&) /usr/include/c++/7/bits/invoke.h:95 (eosxd+0x0000005b1fb6)
    xrootd#17 decltype (__invoke((_S_declval<0ul>)(), (_S_declval<1ul>)(), (_S_declval<2ul>)())) std::thread::_Invoker<std::tuple<void (metad::*)(ThreadAssistant&), metad*, ThreadAssistant&> >::_M_invoke<0ul, 1ul, 2ul>(std::_Index_tuple<0ul, 1ul, 2ul>) /usr/include/c++/7/thread:234 (eosxd+0x0000005b1fb6)
    xrootd#18 std::thread::_Invoker<std::tuple<void (metad::*)(ThreadAssistant&), metad*, ThreadAssistant&> >::operator()() /usr/include/c++/7/thread:243 (eosxd+0x0000005b1fb6)
    xrootd#19 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (metad::*)(ThreadAssistant&), metad*, ThreadAssistant&> > >::_M_run() /usr/include/c++/7/thread:186 (eosxd+0x0000005b1fb6)
    xrootd#20 <null> <null> (libstdc++.so.6+0x0000000bc01e)

  Previous read of size 1 at 0x7b28000100d0 by thread T34:
    #0 XrdSys::IOEvents::Poller::CbkTMO() /home/gbitzes/xrootd/src/XrdSys/XrdSysIOEvents.cc:597 (libXrdUtils.so.2+0x000000034d8a)
    xrootd#1 XrdSys::IOEvents::Poller::TmoGet() /home/gbitzes/xrootd/src/XrdSys/XrdSysIOEvents.cc:1150 (libXrdUtils.so.2+0x000000035166)
    xrootd#2 XrdSys::IOEvents::PollE::Begin(XrdSysSemaphore*, int&, char const**) /home/gbitzes/xrootd/src/./XrdSys/XrdSysIOEventsPollE.icc:213 (libXrdUtils.so.2+0x000000036787)
    xrootd#3 XrdSys::IOEvents::BootStrap::Start(void*) /home/gbitzes/xrootd/src/XrdSys/XrdSysIOEvents.cc:131 (libXrdUtils.so.2+0x000000030c5c)
    xrootd#4 XrdSysThread_Xeq /home/gbitzes/xrootd/src/XrdSys/XrdSysPthread.cc:86 (libXrdUtils.so.2+0x00000002d50f)
    xrootd#5 <null> <null> (libtsan.so.0+0x0000000257eb)

  Location is heap block of size 152 at 0x7b2800010040 allocated by thread T33:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    xrootd#1 XrdCl::PollerBuiltIn::AddSocket(XrdCl::Socket*, XrdCl::SocketHandler*) /home/gbitzes/xrootd/src/XrdCl/XrdClPollerBuiltIn.cc:295 (libXrdCl.so.2+0x000000064801)
    xrootd#2 XrdCl::AsyncSocketHandler::Connect(long) /home/gbitzes/xrootd/src/XrdCl/XrdClAsyncSocketHandler.cc:167 (libXrdCl.so.2+0x000000114155)
    xrootd#3 XrdCl::Stream::EnableLink(XrdCl::PathID&) /home/gbitzes/xrootd/src/XrdCl/XrdClStream.cc:271 (libXrdCl.so.2+0x00000006db5c)
    xrootd#4 XrdCl::Stream::Send(XrdCl::Message*, XrdCl::OutgoingMsgHandler*, bool, long) /home/gbitzes/xrootd/src/XrdCl/XrdClStream.cc:316 (libXrdCl.so.2+0x00000006e0d7)
    xrootd#5 XrdCl::Channel::Send(XrdCl::Message*, XrdCl::OutgoingMsgHandler*, bool, long, XrdCl::VirtualRedirector*) /home/gbitzes/xrootd/src/XrdCl/XrdClChannel.cc:306 (libXrdCl.so.2+0x000000068686)
    xrootd#6 XrdCl::PostMaster::Send(XrdCl::URL const&, XrdCl::Message*, XrdCl::OutgoingMsgHandler*, bool, long) /home/gbitzes/xrootd/src/XrdCl/XrdClPostMaster.cc:198 (libXrdCl.so.2+0x000000066ec9)
    xrootd#7 XrdCl::MessageUtils::SendMessage(XrdCl::URL const&, XrdCl::Message*, XrdCl::ResponseHandler*, XrdCl::MessageSendParams const&) /home/gbitzes/xrootd/src/XrdCl/XrdClMessageUtils.cc:114 (libXrdCl.so.2+0x0000000b349e)
    xrootd#8 XrdCl::FileStateHandler::Open(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned short, unsigned short, XrdCl::ResponseHandler*, unsigned short) /home/gbitzes/xrootd/src/XrdCl/XrdClFileStateHandler.cc:525 (libXrdCl.so.2+0x0000000c6d3c)
    xrootd#9 XrdCl::File::Open(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, XrdCl::OpenFlags::Flags, XrdCl::Access::Mode, XrdCl::ResponseHandler*, unsigned short) /home/gbitzes/xrootd/src/XrdCl/XrdClFile.cc:108 (libXrdCl.so.2+0x0000000b9929)
    xrootd#10 XrdCl::File::Open(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, XrdCl::OpenFlags::Flags, XrdCl::Access::Mode, unsigned short) /home/gbitzes/xrootd/src/XrdCl/XrdClFile.cc:120 (libXrdCl.so.2+0x0000000b9a8b)
    xrootd#11 backend::fetchResponse(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::vector<eos::fusex::container, std::allocator<eos::fusex::container> >&) /afs/cern.ch/user/g/gbitzes/dev/eos/fusex/backend/backend.cc:220 (eosxd+0x0000006860e5)
    xrootd#12 backend::getMD(fuse_req*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<eos::fusex::container, std::allocator<eos::fusex::container> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) /afs/cern.ch/user/g/gbitzes/dev/eos/fusex/backend/backend.cc:152 (eosxd+0x000000687dd2)
    xrootd#13 metad::get(fuse_req*, unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, std::shared_ptr<metad::mdx>, char const*, bool) /afs/cern.ch/user/g/gbitzes/dev/eos/fusex/md/md.cc:576 (eosxd+0x00000061b6a5)
    xrootd#14 metad::lookup(fuse_req*, unsigned long, char const*) /afs/cern.ch/user/g/gbitzes/dev/eos/fusex/md/md.cc:176 (eosxd+0x00000061cd61)
    xrootd#15 EosFuse::lookup(fuse_req*, unsigned long, char const*) /afs/cern.ch/user/g/gbitzes/dev/eos/fusex/eosfuse.cc:1619 (eosxd+0x00000058c343)
    xrootd#16 <null> <null> (libfuse.so.2+0x000000016042)

[ ... ]

SUMMARY: ThreadSanitizer: data race /home/gbitzes/xrootd/src/XrdSys/XrdSysIOEvents.cc:1088 in XrdSys::IOEvents::Poller::TmoAdd(XrdSys::IOEvents::Channel*, int)
amadio pushed a commit to amadio/xrootd that referenced this issue May 12, 2023
amadio pushed a commit to amadio/xrootd that referenced this issue May 17, 2023
This reverts commit 38726b42428f320ac8cde1c923fb3540834b11a0.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants