ElectricFence Exiting: mprotect() failed: Cannot allocate memory - Embedded
This is a discussion on ElectricFence Exiting: mprotect() failed: Cannot allocate memory - Embedded ; David Schwartz writes:
> On Oct 15, 6:35*am, John Reiser wrote:
>
>> #include
>>
>> char *f(a)
>> {
>> * * * * return 0;
>>
>> }
>>
>> main()
>> {
>> * * * * ...
-
Re: ElectricFence Exiting: mprotect() failed: Cannot allocate memory
David Schwartz writes:
> On Oct 15, 6:35*am, John Reiser wrote:
>
>> #include
>>
>> char *f(a)
>> {
>> * * * * return 0;
>>
>> }
>>
>> main()
>> {
>> * * * * char *p = f(10);
>> * * * * if (NULL==p) {
>> * * * * * * * * printf("f(10) is NULL.\n");
>> * * * * * * * * /* fflush(stdout); * *THE FIX */
>> * * * * }
>> * * * * return *p;}
>
> This is still not very good. What if 'printf' needs to allocate memory
> to do its job? What if 'fflush' does? In an error handler like this,
> you are better off calling 'write' directly.
Another option is to force a segfault, ie assign to the area when the
pointer is null. The values of the various CPU registers, especially
the program counter, can then (in combination with a disasembler) be
used to determine the location of the crash and hence, the condition
at the time of the test.
-
Re: ElectricFence Exiting: mprotect() failed: Cannot allocate memory
I am trying to use DUMA to find the problem and am getting the
following error when I try to link to the DUMA library:
# LD_PRELOAD=/lib/libduma.a /bin/snmpd &
# ERROR: ld.so: object '/lib/libduma.a' from LD_PRELOAD cannot be
preloaded: ignored.
What can cause this error when using LD_PRELOAD?
-
Re: ElectricFence Exiting: mprotect() failed: Cannot allocate memory
> # LD_PRELOAD=/lib/libduma.a /bin/snmpd &
> # ERROR: ld.so: object '/lib/libduma.a' from LD_PRELOAD cannot be
> preloaded: ignored.
Only an executable object (.e_type is ET_DYN or ET_EXEC) can be pre-loaded.
An archive library (*.a) that contains ET_REL files cannot be pre-loaded.
--
-
Re: ElectricFence Exiting: mprotect() failed: Cannot allocatememory
Bill writes:
> I am trying to use DUMA to find the problem and am getting the
> following error when I try to link to the DUMA library:
It amazes me that in all this time you never managed to answer a
simple question: is the crash *in* malloc, or is it in your own code?
You are continuing to debug this as if there is malloc corruption,
and this will prove futile if the crash is (as I suspect) in your
own code instead.
> # LD_PRELOAD=/lib/libduma.a /bin/snmpd &
> # ERROR: ld.so: object '/lib/libduma.a' from LD_PRELOAD cannot be
> preloaded: ignored.
You can only preload shared libraries.
Besides, reading man page for libduma, I see that it uses *exact*
same strategy as efence: a guard page after every allocation.
So, once you manage to build a shared libduma.so, and preload it;
it will most likely fail just like efence did, because the overhead
of guard pages is too great for majority of real-world (non-toy)
applications.
Cheers,
--
In order to understand recursion you must first understand recursion.
Remove /-nsp/ for email.