[PATCHv5][PING^3][BZ #17833] _dl_close_worker() does not release inconsistent objects.
Maxim Ostapenko
m.ostapenko@partner.samsung.com
Fri Aug 7 15:58:00 GMT 2015
Hi!
On 06/08/15 18:30, Andreas Schwab wrote:
> Pavel Kopyl <p.kopyl@samsung.com> writes:
>
>> diff --git a/elf/dl-close.c b/elf/dl-close.c
>> index 412f71d..0595675 100644
>> --- a/elf/dl-close.c
>> +++ b/elf/dl-close.c
>> @@ -108,7 +108,7 @@ remove_slotinfo (size_t idx, struct dtv_slotinfo_list *listp, size_t disp,
>>
>>
>> void
>> -_dl_close_worker (struct link_map *map)
>> +_dl_close_worker (struct link_map *map, bool force)
>> {
>> /* One less direct use. */
>> --map->l_direct_opencount;
>> @@ -152,6 +152,10 @@ _dl_close_worker (struct link_map *map)
>> l->l_idx = idx;
>> maps[idx] = l;
>> ++idx;
>> +
>> + /* clear DF_1_NODELETE to force object deletion. */
>> + if (force)
>> + l->l_flags_1 &= ~DF_1_NODELETE;
> This will remove the NODELETE flag from *all* loaded objects. That
> doesn't make sense.
>
> Andreas.
>
Indeed, we shouldn't remove NODELETE from all loaded objects, only for
buggy library. Here a draft patch that should fix the issue. Andreas,
does this look reasonable for you? If yes, I'll reformat it (e.g. add
proper ChangeLog entry etc) and send for review as BZ#18778 fix.
-Maxim
-------------- next part --------------
A non-text attachment was scrubbed...
Name: bz18778.diff
Type: text/x-patch
Size: 2427 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20150807/f945737f/attachment.bin>
More information about the Libc-alpha
mailing list