Print

Print


URL:
  <http://savannah.cern.ch/bugs/?98567>

                 Summary: Segfault in XrdSecGsi
                 Project: XROOTD
            Submitted by: bbockelm
            Submitted on: 2012-10-31 13:49
                Severity: 3 - Normal
                Priority: 5 - Normal
                  Status: None
                 Privacy: Public
             Assigned to: None
        Originator Email: 
             Open/Closed: Open
         Discussion Lock: Any
      Fixed by commit(s): 

    _______________________________________________________

Details:

Hi,

It appears there's an issue in XrdSecGsi when running a proxy, where the
proxy authenticates its clients *and* uses GSI to authenticate the remote
connections.

In this case, XrdSecProtocolgsi::Init is called twice (once for the server
startup, once for the first time it acts as a client authenticating with a
remote service).  

XrdSecProtocolgsi::cacheCA is initialized when started as a server.  The CAs
are added to the hash.  When cacheCA is initialized a second time, it leaves
the object in an undefined state.

Later on, when GetCA is called, cacheCA returns an invalid pointer for the CA
(probably due to memory reuse?).  When delete is called on the invalid
pointer, xrootd segfaults and dies.

Relevant valgrind and gdb snippets are below.  This is very reliable to
reproduce.  Put the following lines in a standalone-server xrootd.cfg:

sec.protocol /usr/lib64 gsi -certdir:/etc/grid-security/certificates
-cert:/etc/grid-security/xrd/xrdcert.pem
-key:/etc/grid-security/xrd/xrdkey.pem -crl:3
ofs.osslib /usr/lib64/libXrdPss.so
pss.origin xrootd.unl.edu:1094

Then do the following as a client:

xrdcp -d 1 -f
root://localhost//store/test/xrootd/T2_US_Nebraska/store/data/Run2012B/SingleMu/AOD/13Jul2012-v1/0003/702C09D2-37D6-E111-9584-00259073E382.root
/dev/null

Brian

==15886== Thread 5:
==15886== Conditional jump or move depends on uninitialised value(s)
==15886==    at 0x647C62D: XrdSecProtocolgsi::GetCA(char const*,
XrdCryptoFactory*, gsiHSVars*) (XrdSecProtocolgsi.cc:4114)
==15886==    by 0x647D595: XrdSecProtocolgsi::ParseCAlist(XrdOucString)
(XrdSecProtocolgsi.cc:4341)
==15886==    by 0x647FC7C: XrdSecProtocolgsi::ClientDoInit(XrdSutBuffer*,
XrdSutBuffer**, XrdOucString&) (XrdSecProtocolgsi.cc:2790)
==15886==    by 0x6480324: XrdSecProtocolgsi::ParseClientInput(XrdSutBuffer*,
XrdSutBuffer**, XrdOucString&) (XrdSecProtocolgsi.cc:2701)
==15886==    by 0x648342B: XrdSecProtocolgsi::getCredentials(XrdSecBuffer*,
XrdOucErrInfo*) (XrdSecProtocolgsi.cc:1381)
==15886==    by 0x73397BE: XrdClientConn::DoAuthentication(char*, int)
(XrdClientConn.cc:1724)
==15886==    by 0x733AA2B: XrdClientConn::DoLogin() (XrdClientConn.cc:1557)
==15886==    by 0x733D11C: XrdClientConn::GetAccessToSrv()
(XrdClientConn.cc:1294)
==15886==    by 0x733EAD9:
XrdClientConn::GoToAnotherServer(XrdClientUrlInfo&) (XrdClientConn.cc:2114)
==15886==    by 0x733F6EE: XrdClientConn::HandleServerError(XReqErrorType&,
XrdClientMessage*, ClientRequest*) (XrdClientConn.cc:1994)
==15886==    by 0x733FC02: XrdClientConn::ReadPartialAnswer(XReqErrorType&,
unsigned long&, ClientRequest*, bool, void**,
XrdClientConn::EThreeStateReadHandler&) (XrdClientConn.cc:1122)
==15886==    by 0x7340365: XrdClientConn::ClientServerCmd(ClientRequest*,
void const*, void**, void*, bool, int) (XrdClientConn.cc:370)


#1  0x00002aaaab83e6e2 in XrdSecProtocolgsi::GetCA (cahash=0x6f2790
"1c3f2ca8.0", cf=0x2aaaabca3f20, hs=0x6ee0f0) at
/usr/src/debug/xrootd/xrootd/src/XrdSecgsi/XrdSecProtocolgsi.cc:4124
#2  0x00002aaaab83f596 in XrdSecProtocolgsi::ParseCAlist (this=0x6f0fd0,
calist=...) at
/usr/src/debug/xrootd/xrootd/src/XrdSecgsi/XrdSecProtocolgsi.cc:4341
#3  0x00002aaaab841c7d in XrdSecProtocolgsi::ClientDoInit (this=0x6f0fd0,
br=<value optimized out>, bm=0x403fce60, emsg=...)
    at /usr/src/debug/xrootd/xrootd/src/XrdSecgsi/XrdSecProtocolgsi.cc:2790
#4  0x00002aaaab842325 in XrdSecProtocolgsi::ParseClientInput
(this=0x37d1953218, br=0x0, bm=0x2aaaaba53780, cmsg=...)
    at /usr/src/debug/xrootd/xrootd/src/XrdSecgsi/XrdSecProtocolgsi.cc:2701
#5  0x00002aaaab84542c in XrdSecProtocolgsi::getCredentials (this=0x6f0fd0,
parm=0x0, ei=0x403fcef0) at
/usr/src/debug/xrootd/xrootd/src/XrdSecgsi/XrdSecProtocolgsi.cc:1381





    _______________________________________________________

Reply to this item at:

  <http://savannah.cern.ch/bugs/?98567>

_______________________________________________
  Message sent via/by LCG Savannah
  http://savannah.cern.ch/

########################################################################
Use REPLY-ALL to reply to list

To unsubscribe from the XROOTD-DEV list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=XROOTD-DEV&A=1