lkml.org 
[lkml]   [2020]   [Apr]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.6 196/254] selftests/vm: fix map_hugetlb length used for testing read and write
    Date
    From: Christophe Leroy <christophe.leroy@c-s.fr>

    commit cabc30da10e677c67ab9a136b1478175734715c5 upstream.

    Commit fa7b9a805c79 ("tools/selftest/vm: allow choosing mem size and page
    size in map_hugetlb") added the possibility to change the size of memory
    mapped for the test, but left the read and write test using the default
    value. This is unnoticed when mapping a length greater than the default
    one, but segfaults otherwise.

    Fix read_bytes() and write_bytes() by giving them the real length.

    Also fix the call to munmap().

    Fixes: fa7b9a805c79 ("tools/selftest/vm: allow choosing mem size and page size in map_hugetlb")
    Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Reviewed-by: Leonardo Bras <leonardo@linux.ibm.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: <stable@vger.kernel.org>
    Link: http://lkml.kernel.org/r/9a404a13c871c4bd0ba9ede68f69a1225180dd7e.1580978385.git.christophe.leroy@c-s.fr
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    tools/testing/selftests/vm/map_hugetlb.c | 14 +++++++-------
    1 file changed, 7 insertions(+), 7 deletions(-)

    --- a/tools/testing/selftests/vm/map_hugetlb.c
    +++ b/tools/testing/selftests/vm/map_hugetlb.c
    @@ -45,20 +45,20 @@ static void check_bytes(char *addr)
    printf("First hex is %x\n", *((unsigned int *)addr));
    }

    -static void write_bytes(char *addr)
    +static void write_bytes(char *addr, size_t length)
    {
    unsigned long i;

    - for (i = 0; i < LENGTH; i++)
    + for (i = 0; i < length; i++)
    *(addr + i) = (char)i;
    }

    -static int read_bytes(char *addr)
    +static int read_bytes(char *addr, size_t length)
    {
    unsigned long i;

    check_bytes(addr);
    - for (i = 0; i < LENGTH; i++)
    + for (i = 0; i < length; i++)
    if (*(addr + i) != (char)i) {
    printf("Mismatch at %lu\n", i);
    return 1;
    @@ -96,11 +96,11 @@ int main(int argc, char **argv)

    printf("Returned address is %p\n", addr);
    check_bytes(addr);
    - write_bytes(addr);
    - ret = read_bytes(addr);
    + write_bytes(addr, length);
    + ret = read_bytes(addr, length);

    /* munmap() length of MAP_HUGETLB memory must be hugepage aligned */
    - if (munmap(addr, LENGTH)) {
    + if (munmap(addr, length)) {
    perror("munmap");
    exit(1);
    }

    \
     
     \ /
      Last update: 2020-04-16 16:46    [W:4.497 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site