Mercurial > illumos > illumos-gate
changeset 12913:90a66b2c063f
6971440 moe can core dump while processing libc.
author | Rod Evans <Rod.Evans@Sun.COM> |
---|---|
date | Fri, 23 Jul 2010 16:35:08 -0700 |
parents | b8a81d02e92b |
children | 3bb859a7330c |
files | usr/src/cmd/sgs/packages/common/SUNWonld-README usr/src/cmd/sgs/rtld/common/dlfcns.c |
diffstat | 2 files changed, 8 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/cmd/sgs/packages/common/SUNWonld-README Fri Jul 23 16:15:32 2010 -0700 +++ b/usr/src/cmd/sgs/packages/common/SUNWonld-README Fri Jul 23 16:35:08 2010 -0700 @@ -1616,3 +1616,4 @@ PSARC/2010/224 Support for archives larger than 2 GB 6956152 dlclose() from an auditor can be fatal. Preinit/activity events should be more flexible. (D) +6971440 moe can core dump while processing libc.
--- a/usr/src/cmd/sgs/rtld/common/dlfcns.c Fri Jul 23 16:15:32 2010 -0700 +++ b/usr/src/cmd/sgs/rtld/common/dlfcns.c Fri Jul 23 16:35:08 2010 -0700 @@ -492,14 +492,16 @@ /* * If this handle is associated with an object that is not on the base * link-map control list, or it has not yet been relocated, then this - * handle must have originated from an auditors interaction. User code + * handle must have originated from an auditors interaction, or some + * permutation of RTLD_CONFGEN use (crle(1), moe(1), etc.). User code * can only execute and bind to relocated objects on the base link-map - * control list. A non-relocated object, or an object on a non-base - * link-map control list, is in the process of being loaded, and - * therefore we do not attempt to remove the handle, as we might - * mistakenly delete the object thinking that its loading has failed. + * control list. Outside of RTLD_CONFGEN use, a non-relocated object, + * or an object on a non-base link-map control list, is in the process + * of being loaded, and therefore we do not attempt to remove the + * handle. */ if (((lmp = ghp->gh_ownlmp) != NULL) && + ((MODE(lmp) & RTLD_CONFGEN) == 0) && ((CNTL(lmp) != ALIST_OFF_DATA) || ((FLAGS(lmp) & FLG_RT_RELOCED) == 0))) return (0);