usercopy.c 779 字节
Newer Older
1 2 3 4 5 6
/*
 * User address space access functions.
 *
 *  For licencing details see kernel-base/COPYING
 */

A
Al Viro 已提交
7
#include <linux/uaccess.h>
8
#include <linux/export.h>
9 10

/*
11 12
 * We rely on the nested NMI work to allow atomic faults from the NMI path; the
 * nested NMI paths are careful to preserve CR2.
13 14 15 16
 */
unsigned long
copy_from_user_nmi(void *to, const void __user *from, unsigned long n)
{
17
	unsigned long ret;
18

19
	if (__range_not_ok(from, n, TASK_SIZE))
20
		return n;
21 22 23 24 25 26 27 28 29 30

	/*
	 * Even though this function is typically called from NMI/IRQ context
	 * disable pagefaults so that its behaviour is consistent even when
	 * called form other contexts.
	 */
	pagefault_disable();
	ret = __copy_from_user_inatomic(to, from, n);
	pagefault_enable();

31
	return ret;
32 33
}
EXPORT_SYMBOL_GPL(copy_from_user_nmi);