Re: Question about file mutex

2024-10-02 Thread Ruediger Pluem



On 10/2/24 9:36 AM, Nick Gearls wrote:
> Am I right that we can call apr_global_mutex_create() with a NULL filename 
> and APR_LOCK_DEFAULT?
> In case the underlying locking mechanism needs a filename, it will generate 
> one.
> Moreover, if we only support Unix & Windows, the preferred mechanism won't 
> use a file at all.
> Is that correct?

Unix is a bit broad. I am not sure what the default mechanism is for each 
Unix-style OS. I think for Linux it is indeed not file
based (pthread).

> 
> In all cases, we don't have to generate a mktemp name ourselves, it'll be 
> done in APR. Right?

Yes. Unless you have a specific requirement to store this file outside of 
/tmp/. But if you provide a name be sure that the file
does not exist already. Hence apr_file_mktemp would not be good for creating 
such a name because it also creates the file.

Regards

Rüdiger

> 
> On 01/10/2024 14:02, Ruediger Pluem wrote:
>> On 10/1/24 9:32 AM, Ervin Hegedüs wrote:
>>> Hi there,
>>>
>>> I hope this is a good forum to ask my question.
>>>
>>> We (mod_security2 developers) use mutex locks. Thiscode snippet was added 
>>> recently:
>>>
>>> https://github.com/owasp-modsecurity/ModSecurity/blob/v2/master/apache2/modsecurity.c#L125-L168
>>>
>>> As you can see, we create locks with these functions:
>>>
>>> apr_temp_dir_get()
>>> apr_file_mktemp()
>>> apr_global_mutex_create()
>>>
>>> This wrapper (acquire_global_lock()) works on Linux, but it seems to crash 
>>> on FreeBSD:
>>> https://github.com/owasp-modsecurity/ModSecurity/issues/3255
>>>
>>> I did some investigation and I found that after the apr_file_mktemp() 
>>> returns with success and the created file name is given to
>>> apr_global_mutex_create() then it removes that.
>>>
>>> In this comment:
>>> https://github.com/owasp-modsecurity/ModSecurity/issues/3255#issuecomment-2383132160
>>> I explained the results (with gdb and truss).
>>>
>>> My question is: what is the expected way to use file mutexes?
>>>
>>> Thanks for your help,
>> Have a look at
>>
>> https://httpd.apache.org/docs/2.4/mod/core.html#mutex
>> https://github.com/apache/httpd/blob/trunk/include/util_mutex.h#L156
>> https://github.com/apache/httpd/blob/trunk/include/util_mutex.h#L181
>>
>> and as example
>>
>> https://github.com/apache/httpd/blob/trunk/modules/ssl/mod_ssl.c#L456
>> https://github.com/apache/httpd/blob/trunk/modules/ssl/ssl_engine_mutex.c#L50
>>
>> If you want to go for an APR only approach keep in mind that the apr methods 
>> create the lock file if needed
>> either with the name you specified or they create it in /tmp via 
>> apr_file_mktemp
>> It should not exist.
>>
>> See
>>
>> https://github.com/apache/apr/blob/1.7.x/locks/unix/proc_mutex.c#L1051
>> https://github.com/apache/apr/blob/1.7.x/locks/unix/proc_mutex.c#L1200
>>
>>
>> Regards
>>
>> Rüdiger
>>
> 


Re: Question about file mutex

2024-10-02 Thread Nick Gearls


  
  
Am I right that we can call
  apr_global_mutex_create() with a NULL filename and
  APR_LOCK_DEFAULT?
  In case the underlying locking mechanism needs a filename, it will
  generate one.
  Moreover, if we only support Unix & Windows, the preferred
  mechanism won't use a file at all.
  Is that correct?
  
  In all cases, we don't have to generate a mktemp name ourselves,
  it'll be done in APR. Right?
  

On 01/10/2024 14:02, Ruediger Pluem
  wrote:


  
On 10/1/24 9:32 AM, Ervin Hegedüs wrote:

  
Hi there,

I hope this is a good forum to ask my question.

We (mod_security2 developers) use mutex locks. Thiscode snippet was added recently:

https://github.com/owasp-modsecurity/ModSecurity/blob/v2/master/apache2/modsecurity.c#L125-L168

As you can see, we create locks with these functions:

apr_temp_dir_get()
apr_file_mktemp()
apr_global_mutex_create()

This wrapper (acquire_global_lock()) works on Linux, but it seems to crash on FreeBSD:
https://github.com/owasp-modsecurity/ModSecurity/issues/3255

I did some investigation and I found that after the apr_file_mktemp() returns with success and the created file name is given to
apr_global_mutex_create() then it removes that.

In this comment:
https://github.com/owasp-modsecurity/ModSecurity/issues/3255#issuecomment-2383132160
I explained the results (with gdb and truss).

My question is: what is the expected way to use file mutexes?

Thanks for your help,

  
  Have a look at

https://httpd.apache.org/docs/2.4/mod/core.html#mutex
https://github.com/apache/httpd/blob/trunk/include/util_mutex.h#L156
https://github.com/apache/httpd/blob/trunk/include/util_mutex.h#L181

and as example

https://github.com/apache/httpd/blob/trunk/modules/ssl/mod_ssl.c#L456
https://github.com/apache/httpd/blob/trunk/modules/ssl/ssl_engine_mutex.c#L50

If you want to go for an APR only approach keep in mind that the apr methods create the lock file if needed
either with the name you specified or they create it in /tmp via apr_file_mktemp
It should not exist.

See

https://github.com/apache/apr/blob/1.7.x/locks/unix/proc_mutex.c#L1051
https://github.com/apache/apr/blob/1.7.x/locks/unix/proc_mutex.c#L1200


Regards

Rüdiger




  



Re: Question about file mutex

2024-10-01 Thread Ruediger Pluem



On 10/1/24 9:32 AM, Ervin Hegedüs wrote:
> Hi there,
> 
> I hope this is a good forum to ask my question.
> 
> We (mod_security2 developers) use mutex locks. Thiscode snippet was added 
> recently:
> 
> https://github.com/owasp-modsecurity/ModSecurity/blob/v2/master/apache2/modsecurity.c#L125-L168
> 
> As you can see, we create locks with these functions:
> 
> apr_temp_dir_get()
> apr_file_mktemp()
> apr_global_mutex_create()
> 
> This wrapper (acquire_global_lock()) works on Linux, but it seems to crash on 
> FreeBSD:
> https://github.com/owasp-modsecurity/ModSecurity/issues/3255
> 
> I did some investigation and I found that after the apr_file_mktemp() returns 
> with success and the created file name is given to
> apr_global_mutex_create() then it removes that.
> 
> In this comment:
> https://github.com/owasp-modsecurity/ModSecurity/issues/3255#issuecomment-2383132160
> I explained the results (with gdb and truss).
> 
> My question is: what is the expected way to use file mutexes?
> 
> Thanks for your help,

Have a look at

https://httpd.apache.org/docs/2.4/mod/core.html#mutex
https://github.com/apache/httpd/blob/trunk/include/util_mutex.h#L156
https://github.com/apache/httpd/blob/trunk/include/util_mutex.h#L181

and as example

https://github.com/apache/httpd/blob/trunk/modules/ssl/mod_ssl.c#L456
https://github.com/apache/httpd/blob/trunk/modules/ssl/ssl_engine_mutex.c#L50

If you want to go for an APR only approach keep in mind that the apr methods 
create the lock file if needed
either with the name you specified or they create it in /tmp via apr_file_mktemp
It should not exist.

See

https://github.com/apache/apr/blob/1.7.x/locks/unix/proc_mutex.c#L1051
https://github.com/apache/apr/blob/1.7.x/locks/unix/proc_mutex.c#L1200


Regards

Rüdiger



Question about file mutex

2024-10-01 Thread Ervin Hegedüs
Hi there,

I hope this is a good forum to ask my question.

We (mod_security2 developers) use mutex locks. This code snippet was added
recently:

https://github.com/owasp-modsecurity/ModSecurity/blob/v2/master/apache2/modsecurity.c#L125-L168

As you can see, we create locks with these functions:

apr_temp_dir_get()
apr_file_mktemp()
apr_global_mutex_create()

This wrapper (acquire_global_lock()) works on Linux, but it seems to crash
on FreeBSD:
https://github.com/owasp-modsecurity/ModSecurity/issues/3255

I did some investigation and I found that after the apr_file_mktemp()
returns with success and the created file name is given to
apr_global_mutex_create() then it removes that.

In this comment:
https://github.com/owasp-modsecurity/ModSecurity/issues/3255#issuecomment-2383132160
I explained the results (with gdb and truss).

My question is: what is the expected way to use file mutexes?

Thanks for your help,


a.


Re: Question about file mutex

2024-10-01 Thread Ervin Hegedüs
Hi Rüdiger,

many thanks for this information! We will check them soon.

Regards,


a.


On Tue, Oct 1, 2024 at 2:03 PM Ruediger Pluem  wrote:

>
>
> On 10/1/24 9:32 AM, Ervin Hegedüs wrote:
> > Hi there,
> >
> > I hope this is a good forum to ask my question.
> >
> > We (mod_security2 developers) use mutex locks. Thiscode snippet was
> added recently:
> >
> >
> https://github.com/owasp-modsecurity/ModSecurity/blob/v2/master/apache2/modsecurity.c#L125-L168
> >
> > As you can see, we create locks with these functions:
> >
> > apr_temp_dir_get()
> > apr_file_mktemp()
> > apr_global_mutex_create()
> >
> > This wrapper (acquire_global_lock()) works on Linux, but it seems to
> crash on FreeBSD:
> > https://github.com/owasp-modsecurity/ModSecurity/issues/3255
> >
> > I did some investigation and I found that after the apr_file_mktemp()
> returns with success and the created file name is given to
> > apr_global_mutex_create() then it removes that.
> >
> > In this comment:
> >
> https://github.com/owasp-modsecurity/ModSecurity/issues/3255#issuecomment-2383132160
> > I explained the results (with gdb and truss).
> >
> > My question is: what is the expected way to use file mutexes?
> >
> > Thanks for your help,
>
> Have a look at
>
> https://httpd.apache.org/docs/2.4/mod/core.html#mutex
> https://github.com/apache/httpd/blob/trunk/include/util_mutex.h#L156
> https://github.com/apache/httpd/blob/trunk/include/util_mutex.h#L181
>
> and as example
>
> https://github.com/apache/httpd/blob/trunk/modules/ssl/mod_ssl.c#L456
>
> https://github.com/apache/httpd/blob/trunk/modules/ssl/ssl_engine_mutex.c#L50
>
> If you want to go for an APR only approach keep in mind that the apr
> methods create the lock file if needed
> either with the name you specified or they create it in /tmp via
> apr_file_mktemp
> It should not exist.
>
> See
>
> https://github.com/apache/apr/blob/1.7.x/locks/unix/proc_mutex.c#L1051
> https://github.com/apache/apr/blob/1.7.x/locks/unix/proc_mutex.c#L1200
>
>
> Regards
>
> Rüdiger
>
>