lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Wed, 9 May 2012 17:28:56 +0800
From:	Xiaotian Feng <xtfeng@...il.com>
To:	Zhouping Liu <zliu@...hat.com>
Cc:	linux-mm@...ck.org, linux-kernel@...r.kernel.org
Subject: Re: mm: move_pages syscall can't return ENOENT when pages are not present

On Wed, May 9, 2012 at 4:58 PM, Zhouping Liu <zliu@...hat.com> wrote:
> hi, all
>
> Recently, I found an error in move_pages syscall:
>
> depending on move_pages(2), when page is not present,
> it should fail with ENOENT, in fact, it's ok without
> any errno.
>
> the following reproducer can easily reproduce
> the issue, suggest you get more details by strace.
> inside reproducer, I try to move a non-exist page from
> node 1 to node 0.
>
> I have tested it on the latest kernel 3.4-rc5 with 2 and 4 numa nodes.
> [zliu@...upingLiu ~]$ gcc -o reproducer reproducer.c -lnuma
> [zliu@...upingLiu ~]$ ./reproducer
> from_node is 1, to_node is 0
> ERROR: move_pages expected FAIL.
>

" If nodes is not NULL, move_pages returns the number of valid
migration requests which could not currently be performed.  Otherwise
it returns 0."

> I'm not in mail list, please CC me.
>
> /*
>  * Copyright (C) 2012  Red Hat, Inc.
>  *
>  * This work is licensed under the terms of the GNU GPL, version 2. See
>  * the COPYING file in the top-level directory.
>  *
>  * Compiled: gcc -o reproducer reproducer.c -lnuma
>  * Description:
>  * it's designed to check move_pages syscall, when
>  * page is not present, it should fail with ENOENT.
>  */
>
> #include <sys/mman.h>
> #include <sys/types.h>
> #include <sys/wait.h>
> #include <stdio.h>
> #include <unistd.h>
> #include <errno.h>
> #include <numa.h>
> #include <numaif.h>
>
> #define TEST_PAGES 4
>
> int main(int argc, char **argv)
> {
>        void *pages[TEST_PAGES];
>        int onepage;
>        int nodes[TEST_PAGES];
>        int status, ret;
>        int i, from_node = 1, to_node = 0;
>
>        onepage = getpagesize();
>
>        for (i = 0; i < TEST_PAGES - 1; i++) {
>                pages[i] = numa_alloc_onnode(onepage, from_node);
>                nodes[i] = to_node;
>        }
>
>        nodes[TEST_PAGES - 1] = to_node;
>
>        /*
>         * the follow page is not available, also not aligned,
>         * depend on move_pages(2), it can't be moved, and should
>         * return ENOENT errno.
>         */
>        pages[TEST_PAGES - 1] = pages[TEST_PAGES - 2] - onepage * 4 + 1;
>
>        printf("from_node is %u, to_node is %u\n", from_node, to_node);
>        ret = move_pages(0, TEST_PAGES, pages, nodes, &status, MPOL_MF_MOVE);
>        if (ret == -1) {
>                if (errno != ENOENT)
>                        perror("move_pages expected ENOENT errno, but it's");
>                else
>                        printf("Succeed\n");
>        } else {
>                printf("ERROR: move_pages expected FAIL.\n");
>        }
>
>        for (i = 0; i < TEST_PAGES; i++)
>                numa_free(pages[i], onepage);
>
>        return 0;
> }
>
> --
> Thanks,
> Zhouping
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@...r.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ