• Pratyush Anand's avatar
    /proc/kcore: update physical address for kcore ram and text · 46492010
    Pratyush Anand authored
    Currently all the p_paddr of PT_LOAD headers are assigned to 0, which is
    not true and could be misleading, since 0 is a valid physical address.
    
    User space tools like makedumpfile needs to know physical address for
    PT_LOAD segments of direct mapped regions.  Therefore this patch updates
    paddr for such regions.  It also sets an invalid paddr (-1) for other
    regions, so that user space tool can know whether a physical address
    provided in PT_LOAD is correct or not.
    
    I do not know why it was 0, which is a valid physical address.  But
    certainly, it might break some user space tools, and those need to be
    fixed.  For example, see following code from kexec-tools
    
    kexec/kexec-elf.c:build_mem_phdrs()
    
                        if ((phdr->p_paddr + phdr->p_memsz) < phdr->p_paddr) {
                                /* The memory address wraps */
                                if (probe_debug) {
                                        fprintf(stderr, "ELF address wrap around\n");
                                }
                                return -1;
                        }
    
    We do not need to perform above check for an invalid physical address.
    
    I think, kexec-tools and makedumpfile will need fixup.  I already have
    those fixup which will be sent upstream once this patch makes through.
    Pro with this approach is that, it will help to calculate variable like
    page_offset, phys_base from PT_LOAD even when they are randomized and
    therefore will reduce many variable and version specific values in user
    space tools.
    
    Having an ASLR offset information can help to translate an identity
    mapped virtual address to a physical address.  But that would be an
    additional field in PT_LOAD header structure and an arch dependent
    value.
    
    Moreover, sending a valid physical address like 0 does not seem right.
    So, IMHO it is better to fix that and send valid physical address when
    available (identity mapped).
    
    Link: http://lkml.kernel.org/r/f951340d2917cdd2a329fae9837a83f2059dc3b2.1485318868.git.panand@redhat.comSigned-off-by: default avatarPratyush Anand <panand@redhat.com>
    Cc: Baoquan He <bhe@redhat.com>
    Cc: Dave Young <dyoung@redhat.com>
    Cc: Dave Anderson <anderson@redhat.com>
    Cc: Atsushi Kumagai <kumagai-atsushi@mxc.nes.nec.co.jp>
    Cc: Simon Horman <simon.horman@netronome.com>
    Cc: Kees Cook <keescook@chromium.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    46492010
kcore.c 15.7 KB