Re: [Patch BUGFIX] kcore: fix its wrong size on x86_64

Eric W. Biederman
2009-06-18T05:41:41Z

Amerigo Wang <xiyou.wangcong@gmail.com> writes:

> On Wed, Jun 17, 2009 at 08:37:40PM -0700, Eric W. Biederman wrote:
>>Amerigo Wang <xiyou.wangcong@gmail.com> writes:
>>
>>> On Tue, Jun 16, 2009 at 12:27:36PM -0700, Eric W. Biederman wrote:
>>>>Américo Wang <xiyou.wangcong@gmail.com> writes:
>>>>>> I think a case can be made either way.  In practice neither answer
>>>>>> gives us a dense offset space on x86_64 so I think I prefer the
>>>>>> current definition which sets or clears the high bits as opposed
>>>>>> to something that mangles the address more.
>>>>>>
>>>>>
>>>>> I am trying to dig more... There must be something wrong there.
>>>>
>>>>How so?
>>>
>>> See what you will get for kc_vaddr_to_offset(__va(0))?
>>> It is supposed to be 0.
>>
>>I see: 0x0000880000001000 That extra 0x1000 looks suspicous.
>
>
> huh? 0x0000880000000000 not?
>
>>
>>It MUST NOT be 0. That is where the ELF header lives in the file.
>
> Of course I knew this.
>
> Just read the code:
>
> phdr->p_offset = kc_vaddr_to_offset(m->addr) + dataoff;
>
> So it should be 0, 'dataoff' is there...

Sorry. The naming then is horrible. It is really
kc_vaddr_to_something_like_the_offset.

I still don't see the need for a flat offset space.

I can see a real point of only having a single kc_vaddr_to_offset
function. Instead of the 3 in existence.

No point in cluttering the whole world with the oddities of the kcore
code. Especially when it should get cleaned up.

My real point earlier is that kc_vaddr_to_offset and
kc_offset_to_vaddr actually on x86_64 aren't broken. They are just
peculiar. There is some small point to their oddities, in that if
something is in the upper half of the address space (like xen) but
below PAGE_OFFSET you have a chance of accessing it with /proc/kcore.
But that is a very minor benefit.

Eric