OpenSolaris

Printable Version Enter a New Search
Bug ID 6776818
Synopsis Use of freed memory in smbrdr_logon_user()
State 10-Fix Delivered (Fix available in build)
Category:Subcategory utility:cifs
Keywords
Responsible Engineer Afshin Ardakani
Reported Against
Duplicate Of
Introduced In solaris_nevada
Commit to Fix snv_106
Fixed In snv_106
Release Fixed solaris_nevada(snv_106)
Related Bugs 6617183 , 6776729
Submit Date 26-November-2008
Last Update Date 16-January-2009
Description
When investigating 6776724 using libumem and watchmalloc i hit the following issue:

# LD_PRELOAD=watchmalloc.so.1 MALLOC_DEBUG=WATCH,RW /usr/lib/smbsrv/smbd -f
zsh: trace trap (core dumped)  LD_PRELOAD=watchmalloc.so.1 MALLOC_DEBUG=WATCH,RW /usr/lib/smbsrv/smbd -f 
pb-53# mdb ./core
Loading modules: [ libumem.so.1 libuutil.so.1 libavl.so.1 libnvpair.so.1 ld.so.1 ]
> $C
fdeee4ec libsmbrdr.so.1`smbrdr_logon_user+0x13b(fdeeec74, fe879620, fe879648, fe86388a)
fdeee50c libsmbrdr.so.1`smbrdr_authenticate+0x32(fdeeec74, fdeeea74, fe879620, fe879648)
fdeee53c libsmbrdr.so.1`smbrdr_auth_logon+0x77(fdeeec74, fdeeea74, fe879620, fe86363c)
fdeee55c libsmbrdr.so.1`mlsvc_logon+0x3d(fdeeec74, fdeeea74, fe879620, fe8657b6)
fdeee5ac libsmbrdr.so.1`smbrdr_open_pipe+0x26(fdeeec74, fdeeea74, fe879620, fe08002c)
fdeee5fc libmlsvc.so.1`ndr_rpc_bind+0x9d(fdeee6a4, fdeeec74, fdeeea74, fe879620, fe06bd04, 0)
fdeee66c libmlsvc.so.1`lsar_open_policy2+0x2f(fdeeec74, fdeeea74, fe879620, fdeee6a4)
fdeee68c libmlsvc.so.1`lsar_open+0x37(fdeeec74, fdeeea74, fe879620, fdeee6a4)
fdeee6dc libmlsvc.so.1`lsa_query_dns_domain_info+0x29(fdeeec74, fdeeea74, fdeee6f4, fe0352a0)
fdeee92c libmlsvc.so.1`smb_domain_query+0x2c(fdeeea74, fdeeec74, fdeeec74, 100)
fdeeea4c libmlsvc.so.1`smb_dc_discovery+0x144(fdeeea74, fdeeeb74, fdeeec74, fe034f3c)
fdeeefcc libmlsvc.so.1`smb_dclocator_main+0xd1(0, fef37000, fdeeefec, feea04fe)
fdeeefec libc_hwcap2.so.1`_thrp_setup+0x7e(fe9e5200)
fdeeeff8 libc_hwcap2.so.1`_lwp_start(fe9e5200, 0, 0, feea04fe, 0, 0)
>

Taking a quick look at the source code it looks like the problem is heere:

usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_logon.c

    276 	session->logon = *logon;
    277 	free(logon);
...
    283 	smbrdr_session_unlock(session);
    284 	return ((logon->type == SDB_LOGON_GUEST)
    285 	    ? AUTH_GUEST_GRANT : AUTH_USER_GRANT);
    286 }

i.e. logon is used/dereferenced on line 284 after it has been free'ed on line 277.
Work Around
N/A
Comments
N/A