When replacing (overwriting) an so module, Apache needs to be down
(probably platform dependent, but definitely on Linux and Windows).  I
believe you can get by by doing something like, move (rename) existing
so, move in new one, graceful restart (not a "graceful" ie reload, but
"graceful-stop" followed by "start"), then remove renamed so, but this
seems overkill and you should just take a maint window.

Thanks for the feedback.

-B

On Fri, Apr 15, 2011 at 12:57 PM, Andrew Pimlott <[email protected]> wrote:
> Following up on a very old thread (below).  Brian, thanks for your very
> useful instructions, and sorry for not following them sooner.
>
> Excerpts from Brian Rectanus's message of Sat Mar 20 14:51:16 -0700 2010:
>> Often if you upgrade/replace mod_security2.so on a running httpd you
>> will see this (repeating segfaults) until you RESTART httpd.  This is my
>
> In short, I did not (the Debian package did not) restart apache after
> installing mod_security, only graceful restarted, which you indicate is
> not a supported way to install or upgrade.  That's all anyone needs to
> read, but just for completeness:
>
> I got the core dump using your instructions, but running gdb on it
> produced the same stack trace that I originally posted in the Debian
> bug:
>
> ...
> ap_process_request
> ap_run_log_transaction
> (mod_security)
> apr_global_mutex_lock
> segfault
>
> Not sure why the trace up to ap_run_error_log didn't look as expected.
> I am using the prefork MPM, apache 2.2.9 from Debian lenny
> (2.2.9-10+lenny9), and mod_security 2.5.11 from Debian lenny-backports
> (2.5.11-1~bpo50+1).
>
> The steps to reproduce:
>
> 1. Start apache without mod_security installed (or configured obviously).
>
> 2. Configure mod_security.  My config is very simple:
>
>   SecRuleEngine On
>   SecAuditEngine RelevantOnly
>   SecRequestBodyAccess On
>   SecRequestBodyLimit 1073741824
>   SecRequestBodyNoFilesLimit 65536
>   SecAuditLog /var/log/apache2/post.log
>   SecAuditLogParts AIZ
>   SecRule REQUEST_METHOD POST nolog,auditlog
>
>   No core rules or anything.
>
> 3. Install mod_security via the Debian package.  This reloads (graceful
>   restarts) apache.
>
> 4. Make a request that would trigger audit logging (POST request).
>   Segfault.
>
> 5. Reload apache again--no more segfaults!  Probably a fluke.
>
> I think the resolution, for the Debian bug, is that apache must be
> restarted, not just reloaded after libapache-mod-security is installed.
> Or, based on my experiments, you could reload it twice. :-)
>
> Andrew
>
> Excerpts from Brian Rectanus's message of Sat Mar 20 14:51:16 -0700 2010:
>> Alberto Gonzalez Iniesta wrote:
>> > Hi,
>> >
>> > I got this [1] bug report about ModSecurity segfaulting. I couldn't
>> > reproduce it, it may be related to the arch of the reporter (x86_64).
>> > Please, feel free to write to the bug report ([email protected]) if
>> > you need further information.
>> >
>> > Thanks,
>> >
>> > Alberto
>> >
>> >
>> > [1] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=574376
>>
>> Normally a backtrace of the thread/process causing the core will show
>> something like this:
>>
>> #0  0x00007f05edc257d0 in ?? ()
>> No symbol table info available.
>> #1  0x000000000044990d in ap_run_error_log ()
>> No symbol table info available.
>> #2  0x0000000000448678 in log_error_core ()
>> No symbol table info available.
>> #3  0x00000000004487a3 in ap_log_error ()
>> No symbol table info available.
>> #4  0x000000000044f12a in sig_coredump ()
>> No symbol table info available.
>> #5  <signal handler called>
>> No symbol table info available.
>> #6  0x00007f05edc257d0 in ?? ()
>> No symbol table info available.
>> #7  0x000000000044990d in ap_run_error_log ()
>> No symbol table info available.
>>
>> So I am thinking that this backtrace is not of the thread/process that
>> caused the segfault.
>>
>> Often if you upgrade/replace mod_security2.so on a running httpd you
>> will see this (repeating segfaults) until you RESTART httpd.  This is my
>> best guess given the info here.  In order to do more I need a backtrace
>> generated from a core.  Can you configure Apache to dump core and
>> reproduce it?
>>
>> Make sure there is a core dump area with something like:
>>
>>   CoreDumpDirectory /tmp
>>
>> Make sure limits are set to dump core:
>>
>>   ulimit -c unlimited
>>
>> Restart and trigger the error.  A core file should be in the directory
>> you specified.
>>
>> Then use gdb to get a backtrace:
>>
>> 1) gdb /path/to/httpd /path/to/core
>> 2) within gdb enter:
>>
>>   thread apply all bt full
>>
>> You can get it into a file with something like:
>>
>> gdb /path/to/httpd /path/to/core --batch --quiet \
>>   -ex "thread apply all bt full" > backtrace.log
>>
>> See also: http://httpd.apache.org/dev/debugging.html
>>
>> Other issues may be what MPM use used.  There may be some issues with
>> mod_security that was compiled with prefork Apache without threads in
>> APR and then installed in an httpd with worker MPM (or vice versa).
>> Alberto, can you shed some light here?
>>
>> Also, if it truly is failing around the global mutex lock, then you can
>> avoid this by changing from the default Serial logging (which locks) to
>> the non-locking Concurrent type:
>>
>> SecAuditLogType Concurrent
>>
>> If this fixes the issue, then I'd really want a proper backtrace so I
>> can look into that further. ;)
>>
>> thanks,
>> -B
>>
>> --
>> Brian Rectanus
>> Breach Security
>>
>
>
>
> --
> To unsubscribe, send mail to [email protected].
>



--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]

Reply via email to