[PATCH v5 04/22] elf: Suppress audit calls when a (new) namespace is empty (BZ #28062)
Adhemerval Zanella
adhemerval.zanella@linaro.org
Thu Nov 11 12:25:29 GMT 2021
On 11/11/2021 09:02, Florian Weimer wrote:
> * Adhemerval Zanella:
>
>> On 10/11/2021 11:15, Florian Weimer wrote:
>>> * Adhemerval Zanella:
>>>
>>>> diff --git a/elf/dl-load.c b/elf/dl-load.c
>>>> index 9f4fa9617d..72298776f6 100644
>>>> --- a/elf/dl-load.c
>>>> +++ b/elf/dl-load.c
>>>> @@ -1067,8 +1067,11 @@ _dl_map_object_from_fd (const char *name, const char *origname, int fd,
>>>> && __glibc_unlikely (GLRO(dl_naudit) > 0))
>>>> {
>>>> struct link_map *head = GL(dl_ns)[nsid]._ns_loaded;
>>>> - /* Do not call the functions for any auditing object. */
>>>> - if (head->l_auditing == 0)
>>>> + /* Do not call the functions for any auditing object and also do not
>>>> + try to call auditing functions if the namespace is currently
>>>> + empty. This happens when opening the first DSO in a new
>>>> + namespace. */
>>>> + if (head != NULL && head->l_auditing == 0)
>>>> {
>>>> struct audit_ifaces *afct = GLRO(dl_audit);
>>>> for (unsigned int cnt = 0; cnt < GLRO(dl_naudit); ++cnt)
>>>
>>> As far as I can tell, using GL(dl_ns)[nsid]._ns_loaded for la_activity
>>> is a completely arbitrary choice. I think we should use
>>> &GL(dl_ns)[nsid] for secondary namespace instead, and keep
>>> GL(dl_ns)[LM_ID_BASE]._ns_loaded for backwards compatibility.
>>>
>>> This will allow us to generate an LA_ACT_ADD event for an empty
>>> namespace.
>>
>> I am not really following you here, '&GL(dl_ns)[nsid]' is just the container
>> here, we need to iterate over the 'link_maps' within it.
>
> Hmm. I had a peeked at the Solaris documentation, and it says that
> LA_ACT_ADD uses the head link map of the namespace as a cookie.
>
> I really dislike that we produce a LA_ACT_DELETE without the
> corresponding LA_ACT_ADD due to this issue.
>
> Can we use the link map allocated used _dl_new_object as the cookie if
> the namespace is empty? This seems like the right thing to do here.
> The allocation happens just a few lines further down.
But afaiu the LA_ACT_ADD activity is to inform already loaded objects
that a new object is being processed. Both man-pages and Solaris
documentation states 'objects are *being added*...', so I think passing
the cookie of the new allocated is not what the interface is suppose
to do.
More information about the Libc-alpha
mailing list