Commit 6d405370 authored by Pavel Emelyanov's avatar Pavel Emelyanov Committed by Andrei Vagin

uffd: Check for uffd event being PF early

The event received should be checked to be #PF before
accessing its other arguments.

[ Mike:
    Well, looking forward to see non-cooperative userfaultfd patches in kernel
    we should have something like

    static int handle_uffd_enent(struct lazy_pages_info *lpi)
    {
    	read(&msg...);

    	switch (msg.event) {
    	case UFFD_EVENT_PAGEFAULT:
    		handle_pagefault(lpi, msg);
    		break;
    	default:
    		return -1;
    	}
    }

    But since this patch is anyway is a bugfix: <ack>
]

travis-ci: success for uffd: A set of improvements over criu/uffd.c
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
Acked-by: 's avatarMike Rapoport <rppt@linux.vnet.ibm.com>
parent 51e6e19d
......@@ -664,6 +664,11 @@ static int handle_user_fault(struct lazy_pages_info *lpi, void *dest)
return -1;
}
if (msg.event != UFFD_EVENT_PAGEFAULT) {
pr_err("unexpected msg event %u\n", msg.event);
return -1;
}
/* Align requested address to the next page boundary */
address = msg.arg.pagefault.address & ~(page_size() - 1);
pr_debug("msg.arg.pagefault.address 0x%llx\n", address);
......@@ -677,11 +682,6 @@ static int handle_user_fault(struct lazy_pages_info *lpi, void *dest)
flags = msg.arg.pagefault.flags;
pr_debug("msg.arg.pagefault.flags 0x%llx\n", flags);
if (msg.event != UFFD_EVENT_PAGEFAULT) {
pr_err("unexpected msg event %u\n", msg.event);
return -1;
}
ret = handle_regular_pages(lpi, dest, address);
if (ret < 0) {
pr_err("Error during regular page copy\n");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment