Fix a bug in dlinfo(RTLD_DI_SERINFOSIZE) requests. For each search path

we included the length of the path in the returned size but not the length
of the associated Dl_serpath structure.  Without this fix, programs
attempting to allocate a structure to hold the search path information
would allocate too small of a buffer and rtld would overrun the buffer
while filling it via a subsequent RTLD_DI_SERINFO request.

Submitted by:	"William K. Josephson" wkj at morphisms dot net
Reviewed by:	jdp
MFC after:	2 weeks
This commit is contained in:
John Baldwin 2005-11-11 19:57:41 +00:00
parent d9276f685b
commit 4d5fe96d68
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=152320

View File

@ -1968,7 +1968,7 @@ fill_search_info(const char *dir, size_t dirlen, void *param)
if (arg->request == RTLD_DI_SERINFOSIZE) {
arg->serinfo->dls_cnt ++;
arg->serinfo->dls_size += dirlen + 1;
arg->serinfo->dls_size += sizeof(Dl_serpath) + dirlen + 1;
} else {
struct dl_serpath *s_entry;