On Wed, 20 Nov 2024 12:47:19 +0100
Jean-Michel Hautbois <[email protected]> wrote:

> Long story short: it fails at kbuffer_load_subbuffer() call in
> read_cpu_pages().
> 
> I added printf in the kbuffer helpers in libevent, and it finishes at:
> __read_long_4: call read_4 at 0x600230c2
> __read_4_sw: ptr=0x8044e2ac
> 
> static unsigned int __read_4_sw(void *ptr)
> {
>       printf("%s: ptr=%p, value: %08x\n", __func__, ptr, *(unsigned int 
> *)ptr);
>       unsigned int data = *(unsigned int *)ptr;
>       printf("%s: data=%08x\n", __func__, data);
> 
>       return swap_4(data);
> }
> 
> As soon as ptr is dereferenced, the segfault appears.
> ptr should be ok though, as the address is valid afaik...

But you don't know what ptr it failed on, right?

If dereferencing a pointer will crash, the below line:

        printf("%s: ptr=%p, value: %08x\n", __func__, ptr, *(unsigned int 
*)ptr);

Will crash before printing, because you are dereferencing ptr. Perhaps you
should change this to:

        printf("%s: ptr=%p\n" value: %08x\n", __func__, ptr);
        printf("    value: %08x\n", *(unsigned int *)ptr);

And that way you will see what 'ptr' is before the crash. Or did you do
that already?

-- Steve


> 
> I must say that now I am stuck :-(.


Reply via email to