Coverage Report

Created: 2017-10-25 09:10

/root/src/xen/xen/include/asm/uaccess.h
Line
Count
Source (jump to first uncovered line)
1
2
#ifndef __X86_UACCESS_H__
3
#define __X86_UACCESS_H__
4
5
#include <xen/compiler.h>
6
#include <xen/errno.h>
7
#include <xen/prefetch.h>
8
#include <asm/asm_defns.h>
9
#include <asm/page.h>
10
11
#include <asm/x86_64/uaccess.h>
12
13
unsigned copy_to_user(void *to, const void *from, unsigned len);
14
unsigned clear_user(void *to, unsigned len);
15
unsigned copy_from_user(void *to, const void *from, unsigned len);
16
/* Handles exceptions in both to and from, but doesn't do access_ok */
17
unsigned __copy_to_user_ll(void __user*to, const void *from, unsigned n);
18
unsigned __copy_from_user_ll(void *to, const void __user *from, unsigned n);
19
20
extern long __get_user_bad(void);
21
extern void __put_user_bad(void);
22
23
/**
24
 * get_user: - Get a simple variable from user space.
25
 * @x:   Variable to store result.
26
 * @ptr: Source address, in user space.
27
 *
28
 * Context: User context only.  This function may sleep.
29
 *
30
 * This macro copies a single simple variable from user space to kernel
31
 * space.  It supports simple types like char and int, but not larger
32
 * data types like structures or arrays.
33
 *
34
 * @ptr must have pointer-to-simple-variable type, and the result of
35
 * dereferencing @ptr must be assignable to @x without a cast.
36
 *
37
 * Returns zero on success, or -EFAULT on error.
38
 * On error, the variable @x is set to zero.
39
 */
40
#define get_user(x,ptr) \
41
  __get_user_check((x),(ptr),sizeof(*(ptr)))
42
43
/**
44
 * put_user: - Write a simple value into user space.
45
 * @x:   Value to copy to user space.
46
 * @ptr: Destination address, in user space.
47
 *
48
 * Context: User context only.  This function may sleep.
49
 *
50
 * This macro copies a single simple value from kernel space to user
51
 * space.  It supports simple types like char and int, but not larger
52
 * data types like structures or arrays.
53
 *
54
 * @ptr must have pointer-to-simple-variable type, and @x must be assignable
55
 * to the result of dereferencing @ptr.
56
 *
57
 * Returns zero on success, or -EFAULT on error.
58
 */
59
#define put_user(x,ptr)             \
60
0
  __put_user_check((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr)))
61
62
/**
63
 * __get_user: - Get a simple variable from user space, with less checking.
64
 * @x:   Variable to store result.
65
 * @ptr: Source address, in user space.
66
 *
67
 * Context: User context only.  This function may sleep.
68
 *
69
 * This macro copies a single simple variable from user space to kernel
70
 * space.  It supports simple types like char and int, but not larger
71
 * data types like structures or arrays.
72
 *
73
 * @ptr must have pointer-to-simple-variable type, and the result of
74
 * dereferencing @ptr must be assignable to @x without a cast.
75
 *
76
 * Caller must check the pointer with access_ok() before calling this
77
 * function.
78
 *
79
 * Returns zero on success, or -EFAULT on error.
80
 * On error, the variable @x is set to zero.
81
 */
82
#define __get_user(x,ptr) \
83
0
  __get_user_nocheck((x),(ptr),sizeof(*(ptr)))
84
85
/**
86
 * __put_user: - Write a simple value into user space, with less checking.
87
 * @x:   Value to copy to user space.
88
 * @ptr: Destination address, in user space.
89
 *
90
 * Context: User context only.  This function may sleep.
91
 *
92
 * This macro copies a single simple value from kernel space to user
93
 * space.  It supports simple types like char and int, but not larger
94
 * data types like structures or arrays.
95
 *
96
 * @ptr must have pointer-to-simple-variable type, and @x must be assignable
97
 * to the result of dereferencing @ptr.
98
 *
99
 * Caller must check the pointer with access_ok() before calling this
100
 * function.
101
 *
102
 * Returns zero on success, or -EFAULT on error.
103
 */
104
#define __put_user(x,ptr) \
105
0
  __put_user_nocheck((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr)))
106
107
0
#define __put_user_nocheck(x, ptr, size)        \
108
0
({                  \
109
0
  int err_;               \
110
0
  __put_user_size(x, ptr, size, err_, -EFAULT);      \
111
0
  err_;               \
112
0
})
113
114
0
#define __put_user_check(x, ptr, size)          \
115
0
({                  \
116
0
  __typeof__(*(ptr)) __user *ptr_ = (ptr);      \
117
0
  __typeof__(size) size_ = (size);        \
118
0
  access_ok(ptr_, size_) ? __put_user_nocheck(x, ptr_, size_)  \
119
0
             : -EFAULT;       \
120
0
})
121
122
0
#define __get_user_nocheck(x, ptr, size)        \
123
0
({                  \
124
0
  int err_;               \
125
0
  __get_user_size(x, ptr, size, err_, -EFAULT);      \
126
0
  err_;               \
127
0
})
128
129
#define __get_user_check(x, ptr, size)          \
130
({                  \
131
  __typeof__(*(ptr)) __user *ptr_ = (ptr);      \
132
  __typeof__(size) size_ = (size);        \
133
  access_ok(ptr_, size_) ? __get_user_nocheck(x, ptr_, size_) \
134
             : -EFAULT;       \
135
})
136
137
struct __large_struct { unsigned long buf[100]; };
138
0
#define __m(x) (*(const struct __large_struct *)(x))
139
140
/*
141
 * Tell gcc we read from memory instead of writing: this is because
142
 * we do not write to any memory gcc knows about, so there are no
143
 * aliasing issues.
144
 */
145
#define __put_user_asm(x, addr, err, itype, rtype, ltype, errret) \
146
0
  stac();               \
147
0
  __asm__ __volatile__(           \
148
0
    "1: mov"itype" %"rtype"1,%2\n"      \
149
0
    "2:\n"              \
150
0
    ".section .fixup,\"ax\"\n"        \
151
0
    "3: mov %3,%0\n"          \
152
0
    " jmp 2b\n"         \
153
0
    ".previous\n"           \
154
0
    _ASM_EXTABLE(1b, 3b)          \
155
0
    : "=r"(err)           \
156
0
    : ltype (x), "m"(__m(addr)), "i"(errret), "0"(err));  \
157
0
  clac()
158
159
#define __get_user_asm(x, addr, err, itype, rtype, ltype, errret) \
160
0
  stac();               \
161
0
  __asm__ __volatile__(           \
162
0
    "1: mov"itype" %2,%"rtype"1\n"      \
163
0
    "2:\n"              \
164
0
    ".section .fixup,\"ax\"\n"        \
165
0
    "3: mov %3,%0\n"          \
166
0
    " xor"itype" %"rtype"1,%"rtype"1\n"   \
167
0
    " jmp 2b\n"         \
168
0
    ".previous\n"           \
169
0
    _ASM_EXTABLE(1b, 3b)          \
170
0
    : "=r"(err), ltype (x)          \
171
0
    : "m"(__m(addr)), "i"(errret), "0"(err));    \
172
0
  clac()
173
174
/**
175
 * __copy_to_user: - Copy a block of data into user space, with less checking
176
 * @to:   Destination address, in user space.
177
 * @from: Source address, in kernel space.
178
 * @n:    Number of bytes to copy.
179
 *
180
 * Context: User context only.  This function may sleep.
181
 *
182
 * Copy data from kernel space to user space.  Caller must check
183
 * the specified block with access_ok() before calling this function.
184
 *
185
 * Returns number of bytes that could not be copied.
186
 * On success, this will be zero.
187
 */
188
static always_inline unsigned long
189
__copy_to_user(void __user *to, const void *from, unsigned long n)
190
0
{
191
0
    if (__builtin_constant_p(n)) {
192
0
        unsigned long ret;
193
0
194
0
        switch (n) {
195
0
        case 1:
196
0
            __put_user_size(*(const u8 *)from, (u8 __user *)to, 1, ret, 1);
197
0
            return ret;
198
0
        case 2:
199
0
            __put_user_size(*(const u16 *)from, (u16 __user *)to, 2, ret, 2);
200
0
            return ret;
201
0
        case 4:
202
0
            __put_user_size(*(const u32 *)from, (u32 __user *)to, 4, ret, 4);
203
0
            return ret;
204
0
        case 8:
205
0
            __put_user_size(*(const u64 *)from, (u64 __user *)to, 8, ret, 8);
206
0
            return ret;
207
0
        }
208
0
    }
209
0
    return __copy_to_user_ll(to, from, n);
210
0
}
Unexecuted instantiation: cpu.c:__copy_to_user
Unexecuted instantiation: mmconfig_64.c:__copy_to_user
Unexecuted instantiation: mmconf-fam10h.c:__copy_to_user
Unexecuted instantiation: acpi_mmcfg.c:__copy_to_user
Unexecuted instantiation: ro-page-fault.c:__copy_to_user
Unexecuted instantiation: misc-hypercalls.c:__copy_to_user
Unexecuted instantiation: iret.c:__copy_to_user
Unexecuted instantiation: emul-priv-op.c:__copy_to_user
Unexecuted instantiation: emul-inv-op.c:__copy_to_user
Unexecuted instantiation: emul-gate-op.c:__copy_to_user
Unexecuted instantiation: descriptor-tables.c:__copy_to_user
Unexecuted instantiation: callback.c:__copy_to_user
Unexecuted instantiation: backtrace.c:__copy_to_user
Unexecuted instantiation: op_model_athlon.c:__copy_to_user
Unexecuted instantiation: op_model_ppro.c:__copy_to_user
Unexecuted instantiation: op_model_p4.c:__copy_to_user
Unexecuted instantiation: nmi_int.c:__copy_to_user
Unexecuted instantiation: nested_ept.c:__copy_to_user
Unexecuted instantiation: nested_hap.c:__copy_to_user
Unexecuted instantiation: hap.c:__copy_to_user
Unexecuted instantiation: multi.c:__copy_to_user
Unexecuted instantiation: mem_sharing.c:__copy_to_user
Unexecuted instantiation: mem_paging.c:__copy_to_user
Unexecuted instantiation: guest_walk.c:__copy_to_user
Unexecuted instantiation: altp2m.c:__copy_to_user
Unexecuted instantiation: p2m-pod.c:__copy_to_user
Unexecuted instantiation: p2m-ept.c:__copy_to_user
Unexecuted instantiation: p2m-pt.c:__copy_to_user
Unexecuted instantiation: p2m.c:__copy_to_user
Unexecuted instantiation: paging.c:__copy_to_user
Unexecuted instantiation: vvmx.c:__copy_to_user
Unexecuted instantiation: vmx.c:__copy_to_user
Unexecuted instantiation: vmcs.c:__copy_to_user
Unexecuted instantiation: realmode.c:__copy_to_user
Unexecuted instantiation: vmcb.c:__copy_to_user
Unexecuted instantiation: svmdebug.c:__copy_to_user
Unexecuted instantiation: svm.c:__copy_to_user
Unexecuted instantiation: nestedsvm.c:__copy_to_user
Unexecuted instantiation: intr.c:__copy_to_user
Unexecuted instantiation: vpt.c:__copy_to_user
Unexecuted instantiation: vpic.c:__copy_to_user
Unexecuted instantiation: vmsi.c:__copy_to_user
Unexecuted instantiation: vlapic.c:__copy_to_user
Unexecuted instantiation: viridian.c:__copy_to_user
Unexecuted instantiation: vioapic.c:__copy_to_user
Unexecuted instantiation: stdvga.c:__copy_to_user
Unexecuted instantiation: save.c:__copy_to_user
Unexecuted instantiation: rtc.c:__copy_to_user
Unexecuted instantiation: pmtimer.c:__copy_to_user
Unexecuted instantiation: nestedhvm.c:__copy_to_user
Unexecuted instantiation: mtrr.c:__copy_to_user
Unexecuted instantiation: ioreq.c:__copy_to_user
Unexecuted instantiation: intercept.c:__copy_to_user
Unexecuted instantiation: i8254.c:__copy_to_user
Unexecuted instantiation: hvm.c:__copy_to_user
Unexecuted instantiation: emulate.c:__copy_to_user
Unexecuted instantiation: dm.c:__copy_to_user
Unexecuted instantiation: asid.c:__copy_to_user
Unexecuted instantiation: probe.c:__copy_to_user
Unexecuted instantiation: delivery.c:__copy_to_user
Unexecuted instantiation: default.c:__copy_to_user
Unexecuted instantiation: x2apic.c:__copy_to_user
Unexecuted instantiation: bigsmp.c:__copy_to_user
Unexecuted instantiation: main.c:__copy_to_user
Unexecuted instantiation: generic.c:__copy_to_user
Unexecuted instantiation: vmce.c:__copy_to_user
Unexecuted instantiation: util.c:__copy_to_user
Unexecuted instantiation: non-fatal.c:__copy_to_user
Unexecuted instantiation: mce_intel.c:__copy_to_user
Unexecuted instantiation: mce-apei.c:__copy_to_user
Unexecuted instantiation: mce.c:__copy_to_user
Unexecuted instantiation: mctelem.c:__copy_to_user
Unexecuted instantiation: barrier.c:__copy_to_user
Unexecuted instantiation: mcaction.c:__copy_to_user
Unexecuted instantiation: mce_amd.c:__copy_to_user
Unexecuted instantiation: amd_nonfatal.c:__copy_to_user
Unexecuted instantiation: vpmu_intel.c:__copy_to_user
Unexecuted instantiation: vpmu_amd.c:__copy_to_user
Unexecuted instantiation: vpmu.c:__copy_to_user
Unexecuted instantiation: mwait-idle.c:__copy_to_user
Unexecuted instantiation: intel.c:__copy_to_user
Unexecuted instantiation: common.c:__copy_to_user
Unexecuted instantiation: amd.c:__copy_to_user
Unexecuted instantiation: powernow.c:__copy_to_user
Unexecuted instantiation: cpuidle_menu.c:__copy_to_user
Unexecuted instantiation: cpu_idle.c:__copy_to_user
Unexecuted instantiation: suspend.c:__copy_to_user
Unexecuted instantiation: power.c:__copy_to_user
Unexecuted instantiation: lib.c:__copy_to_user
Unexecuted instantiation: xstate.c:__copy_to_user
Unexecuted instantiation: hpet.c:__copy_to_user
Unexecuted instantiation: tboot.c:__copy_to_user
Unexecuted instantiation: x86_emulate.c:__copy_to_user
Unexecuted instantiation: usercopy.c:__copy_to_user
Unexecuted instantiation: traps.c:__copy_to_user
Unexecuted instantiation: srat.c:__copy_to_user
Unexecuted instantiation: smpboot.c:__copy_to_user
Unexecuted instantiation: smp.c:__copy_to_user
Unexecuted instantiation: setup.c:__copy_to_user
Unexecuted instantiation: psr.c:__copy_to_user
Unexecuted instantiation: platform_hypercall.c:__copy_to_user
Unexecuted instantiation: physdev.c:__copy_to_user
Unexecuted instantiation: percpu.c:__copy_to_user
Unexecuted instantiation: numa.c:__copy_to_user
Unexecuted instantiation: nmi.c:__copy_to_user
Unexecuted instantiation: mpparse.c:__copy_to_user
Unexecuted instantiation: mm.c:__copy_to_user
Unexecuted instantiation: microcode.c:__copy_to_user
Unexecuted instantiation: microcode_intel.c:__copy_to_user
Unexecuted instantiation: microcode_amd.c:__copy_to_user
Unexecuted instantiation: machine_kexec.c:__copy_to_user
Unexecuted instantiation: ioport_emulate.c:__copy_to_user
Unexecuted instantiation: msr.c:__copy_to_user
Unexecuted instantiation: io_apic.c:__copy_to_user
Unexecuted instantiation: i8259.c:__copy_to_user
Unexecuted instantiation: i387.c:__copy_to_user
Unexecuted instantiation: hypercall.c:__copy_to_user
Unexecuted instantiation: flushtlb.c:__copy_to_user
Unexecuted instantiation: extable.c:__copy_to_user
Unexecuted instantiation: e820.c:__copy_to_user
Unexecuted instantiation: domain_page.c:__copy_to_user
Unexecuted instantiation: debug.c:__copy_to_user
Unexecuted instantiation: crash.c:__copy_to_user
Unexecuted instantiation: compat.c:__copy_to_user
Unexecuted instantiation: cpuid.c:__copy_to_user
Unexecuted instantiation: apic.c:__copy_to_user
Unexecuted instantiation: xsm_core.c:__copy_to_user
Unexecuted instantiation: vesa.c:__copy_to_user
Unexecuted instantiation: vga.c:__copy_to_user
Unexecuted instantiation: apei-io.c:__copy_to_user
Unexecuted instantiation: apei-base.c:__copy_to_user
Unexecuted instantiation: hest.c:__copy_to_user
Unexecuted instantiation: erst.c:__copy_to_user
Unexecuted instantiation: reboot.c:__copy_to_user
Unexecuted instantiation: hwregs.c:__copy_to_user
Unexecuted instantiation: pmstat.c:__copy_to_user
Unexecuted instantiation: osl.c:__copy_to_user
Unexecuted instantiation: iommu_guest.c:__copy_to_user
Unexecuted instantiation: iommu_cmd.c:__copy_to_user
Unexecuted instantiation: iommu_intr.c:__copy_to_user
Unexecuted instantiation: pci_amd_iommu.c:__copy_to_user
Unexecuted instantiation: iommu_map.c:__copy_to_user
Unexecuted instantiation: iommu_init.c:__copy_to_user
Unexecuted instantiation: ats.c:__copy_to_user
Unexecuted instantiation: vtd.c:__copy_to_user
Unexecuted instantiation: quirks.c:__copy_to_user
Unexecuted instantiation: intremap.c:__copy_to_user
Unexecuted instantiation: qinval.c:__copy_to_user
Unexecuted instantiation: utils.c:__copy_to_user
Unexecuted instantiation: dmar.c:__copy_to_user
Unexecuted instantiation: io.c:__copy_to_user
Unexecuted instantiation: iommu.c:__copy_to_user
Unexecuted instantiation: msix.c:__copy_to_user
Unexecuted instantiation: msi.c:__copy_to_user
Unexecuted instantiation: header.c:__copy_to_user
Unexecuted instantiation: vpci.c:__copy_to_user
Unexecuted instantiation: pci.c:__copy_to_user
Unexecuted instantiation: utility.c:__copy_to_user
Unexecuted instantiation: cpufreq_misc_governors.c:__copy_to_user
Unexecuted instantiation: cpufreq_ondemand.c:__copy_to_user
Unexecuted instantiation: cpufreq.c:__copy_to_user
Unexecuted instantiation: serial.c:__copy_to_user
Unexecuted instantiation: ehci-dbgp.c:__copy_to_user
Unexecuted instantiation: ns16550.c:__copy_to_user
Unexecuted instantiation: console.c:__copy_to_user
Unexecuted instantiation: libelf-loader.c:__copy_to_user
Unexecuted instantiation: llvm.c:__copy_to_user
Unexecuted instantiation: tmem_control.c:__copy_to_user
Unexecuted instantiation: tmem_xen.c:__copy_to_user
Unexecuted instantiation: tmem.c:__copy_to_user
Unexecuted instantiation: xmalloc_tlsf.c:__copy_to_user
Unexecuted instantiation: xenoprof.c:__copy_to_user
Unexecuted instantiation: wait.c:__copy_to_user
Unexecuted instantiation: vsprintf.c:__copy_to_user
Unexecuted instantiation: vmap.c:__copy_to_user
Unexecuted instantiation: vm_event.c:__copy_to_user
Unexecuted instantiation: trace.c:__copy_to_user
Unexecuted instantiation: timer.c:__copy_to_user
Unexecuted instantiation: time.c:__copy_to_user
Unexecuted instantiation: tasklet.c:__copy_to_user
Unexecuted instantiation: sysctl.c:__copy_to_user
Unexecuted instantiation: symbols.c:__copy_to_user
Unexecuted instantiation: stop_machine.c:__copy_to_user
Unexecuted instantiation: spinlock.c:__copy_to_user
Unexecuted instantiation: softirq.c:__copy_to_user
Unexecuted instantiation: shutdown.c:__copy_to_user
Unexecuted instantiation: schedule.c:__copy_to_user
Unexecuted instantiation: sched_null.c:__copy_to_user
Unexecuted instantiation: sched_rt.c:__copy_to_user
Unexecuted instantiation: sched_credit2.c:__copy_to_user
Unexecuted instantiation: sched_credit.c:__copy_to_user
Unexecuted instantiation: sched_arinc653.c:__copy_to_user
Unexecuted instantiation: rwlock.c:__copy_to_user
Unexecuted instantiation: rcupdate.c:__copy_to_user
Unexecuted instantiation: rangeset.c:__copy_to_user
Unexecuted instantiation: preempt.c:__copy_to_user
Unexecuted instantiation: pdx.c:__copy_to_user
Unexecuted instantiation: page_alloc.c:__copy_to_user
Unexecuted instantiation: multicall.c:__copy_to_user
Unexecuted instantiation: monitor.c:__copy_to_user
Unexecuted instantiation: memory.c:__copy_to_user
Unexecuted instantiation: mem_access.c:__copy_to_user
Unexecuted instantiation: kimage.c:__copy_to_user
Unexecuted instantiation: kexec.c:__copy_to_user
Unexecuted instantiation: keyhandler.c:__copy_to_user
Unexecuted instantiation: kernel.c:__copy_to_user
Unexecuted instantiation: irq.c:__copy_to_user
Unexecuted instantiation: guestcopy.c:__copy_to_user
Unexecuted instantiation: grant_table.c:__copy_to_user
Unexecuted instantiation: event_fifo.c:__copy_to_user
Unexecuted instantiation: event_channel.c:__copy_to_user
Unexecuted instantiation: event_2l.c:__copy_to_user
Unexecuted instantiation: domain.c:__copy_to_user
Unexecuted instantiation: domctl.c:__copy_to_user
Unexecuted instantiation: cpupool.c:__copy_to_user
Unexecuted instantiation: mmconfig-shared.c:__copy_to_user
211
212
/**
213
 * __copy_from_user: - Copy a block of data from user space, with less checking
214
 * @to:   Destination address, in kernel space.
215
 * @from: Source address, in user space.
216
 * @n:    Number of bytes to copy.
217
 *
218
 * Context: User context only.  This function may sleep.
219
 *
220
 * Copy data from user space to kernel space.  Caller must check
221
 * the specified block with access_ok() before calling this function.
222
 *
223
 * Returns number of bytes that could not be copied.
224
 * On success, this will be zero.
225
 *
226
 * If some data could not be copied, this function will pad the copied
227
 * data to the requested size using zero bytes.
228
 */
229
static always_inline unsigned long
230
__copy_from_user(void *to, const void __user *from, unsigned long n)
231
1
{
232
1
    if (__builtin_constant_p(n)) {
233
0
        unsigned long ret;
234
0
235
0
        switch (n) {
236
0
        case 1:
237
0
            __get_user_size(*(u8 *)to, from, 1, ret, 1);
238
0
            return ret;
239
0
        case 2:
240
0
            __get_user_size(*(u16 *)to, from, 2, ret, 2);
241
0
            return ret;
242
0
        case 4:
243
0
            __get_user_size(*(u32 *)to, from, 4, ret, 4);
244
0
            return ret;
245
0
        case 8:
246
0
            __get_user_size(*(u64*)to, from, 8, ret, 8);
247
0
            return ret;
248
0
        }
249
0
    }
250
1
    return __copy_from_user_ll(to, from, n);
251
1
}
Unexecuted instantiation: mmconfig-shared.c:__copy_from_user
Unexecuted instantiation: mmconfig_64.c:__copy_from_user
Unexecuted instantiation: mmconf-fam10h.c:__copy_from_user
Unexecuted instantiation: acpi_mmcfg.c:__copy_from_user
Unexecuted instantiation: ro-page-fault.c:__copy_from_user
Unexecuted instantiation: misc-hypercalls.c:__copy_from_user
Unexecuted instantiation: iret.c:__copy_from_user
Unexecuted instantiation: emul-priv-op.c:__copy_from_user
Unexecuted instantiation: emul-inv-op.c:__copy_from_user
Unexecuted instantiation: emul-gate-op.c:__copy_from_user
Unexecuted instantiation: descriptor-tables.c:__copy_from_user
Unexecuted instantiation: callback.c:__copy_from_user
Unexecuted instantiation: backtrace.c:__copy_from_user
Unexecuted instantiation: op_model_athlon.c:__copy_from_user
Unexecuted instantiation: op_model_ppro.c:__copy_from_user
Unexecuted instantiation: op_model_p4.c:__copy_from_user
Unexecuted instantiation: nmi_int.c:__copy_from_user
Unexecuted instantiation: nested_ept.c:__copy_from_user
Unexecuted instantiation: nested_hap.c:__copy_from_user
Unexecuted instantiation: hap.c:__copy_from_user
Unexecuted instantiation: multi.c:__copy_from_user
Unexecuted instantiation: mem_sharing.c:__copy_from_user
Unexecuted instantiation: mem_paging.c:__copy_from_user
Unexecuted instantiation: guest_walk.c:__copy_from_user
Unexecuted instantiation: altp2m.c:__copy_from_user
Unexecuted instantiation: p2m-pod.c:__copy_from_user
Unexecuted instantiation: p2m-ept.c:__copy_from_user
Unexecuted instantiation: p2m-pt.c:__copy_from_user
Unexecuted instantiation: p2m.c:__copy_from_user
Unexecuted instantiation: paging.c:__copy_from_user
Unexecuted instantiation: vvmx.c:__copy_from_user
Unexecuted instantiation: vmx.c:__copy_from_user
Unexecuted instantiation: vmcs.c:__copy_from_user
Unexecuted instantiation: realmode.c:__copy_from_user
Unexecuted instantiation: vmcb.c:__copy_from_user
Unexecuted instantiation: svmdebug.c:__copy_from_user
Unexecuted instantiation: svm.c:__copy_from_user
Unexecuted instantiation: nestedsvm.c:__copy_from_user
Unexecuted instantiation: intr.c:__copy_from_user
Unexecuted instantiation: vpt.c:__copy_from_user
Unexecuted instantiation: vpic.c:__copy_from_user
Unexecuted instantiation: vmsi.c:__copy_from_user
Unexecuted instantiation: vlapic.c:__copy_from_user
Unexecuted instantiation: viridian.c:__copy_from_user
Unexecuted instantiation: vioapic.c:__copy_from_user
Unexecuted instantiation: stdvga.c:__copy_from_user
Unexecuted instantiation: save.c:__copy_from_user
Unexecuted instantiation: rtc.c:__copy_from_user
Unexecuted instantiation: pmtimer.c:__copy_from_user
Unexecuted instantiation: nestedhvm.c:__copy_from_user
Unexecuted instantiation: mtrr.c:__copy_from_user
Unexecuted instantiation: ioreq.c:__copy_from_user
Unexecuted instantiation: intercept.c:__copy_from_user
Unexecuted instantiation: i8254.c:__copy_from_user
Unexecuted instantiation: hvm.c:__copy_from_user
Unexecuted instantiation: emulate.c:__copy_from_user
Unexecuted instantiation: dm.c:__copy_from_user
Unexecuted instantiation: asid.c:__copy_from_user
Unexecuted instantiation: probe.c:__copy_from_user
Unexecuted instantiation: delivery.c:__copy_from_user
Unexecuted instantiation: default.c:__copy_from_user
Unexecuted instantiation: x2apic.c:__copy_from_user
Unexecuted instantiation: bigsmp.c:__copy_from_user
Unexecuted instantiation: main.c:__copy_from_user
Unexecuted instantiation: generic.c:__copy_from_user
Unexecuted instantiation: vmce.c:__copy_from_user
Unexecuted instantiation: util.c:__copy_from_user
Unexecuted instantiation: non-fatal.c:__copy_from_user
Unexecuted instantiation: mce_intel.c:__copy_from_user
Unexecuted instantiation: mce-apei.c:__copy_from_user
Unexecuted instantiation: mce.c:__copy_from_user
Unexecuted instantiation: mctelem.c:__copy_from_user
Unexecuted instantiation: barrier.c:__copy_from_user
Unexecuted instantiation: mcaction.c:__copy_from_user
Unexecuted instantiation: mce_amd.c:__copy_from_user
Unexecuted instantiation: amd_nonfatal.c:__copy_from_user
Unexecuted instantiation: vpmu_intel.c:__copy_from_user
Unexecuted instantiation: vpmu_amd.c:__copy_from_user
Unexecuted instantiation: vpmu.c:__copy_from_user
Unexecuted instantiation: mwait-idle.c:__copy_from_user
Unexecuted instantiation: intel.c:__copy_from_user
Unexecuted instantiation: common.c:__copy_from_user
Unexecuted instantiation: amd.c:__copy_from_user
Unexecuted instantiation: powernow.c:__copy_from_user
Unexecuted instantiation: cpuidle_menu.c:__copy_from_user
Unexecuted instantiation: cpu_idle.c:__copy_from_user
Unexecuted instantiation: suspend.c:__copy_from_user
Unexecuted instantiation: power.c:__copy_from_user
Unexecuted instantiation: lib.c:__copy_from_user
Unexecuted instantiation: xstate.c:__copy_from_user
Unexecuted instantiation: hpet.c:__copy_from_user
Unexecuted instantiation: tboot.c:__copy_from_user
Unexecuted instantiation: x86_emulate.c:__copy_from_user
Unexecuted instantiation: usercopy.c:__copy_from_user
traps.c:__copy_from_user
Line
Count
Source
231
1
{
232
1
    if (__builtin_constant_p(n)) {
233
0
        unsigned long ret;
234
0
235
0
        switch (n) {
236
0
        case 1:
237
0
            __get_user_size(*(u8 *)to, from, 1, ret, 1);
238
0
            return ret;
239
0
        case 2:
240
0
            __get_user_size(*(u16 *)to, from, 2, ret, 2);
241
0
            return ret;
242
0
        case 4:
243
0
            __get_user_size(*(u32 *)to, from, 4, ret, 4);
244
0
            return ret;
245
0
        case 8:
246
0
            __get_user_size(*(u64*)to, from, 8, ret, 8);
247
0
            return ret;
248
0
        }
249
0
    }
250
1
    return __copy_from_user_ll(to, from, n);
251
1
}
Unexecuted instantiation: srat.c:__copy_from_user
Unexecuted instantiation: smpboot.c:__copy_from_user
Unexecuted instantiation: smp.c:__copy_from_user
Unexecuted instantiation: setup.c:__copy_from_user
Unexecuted instantiation: psr.c:__copy_from_user
Unexecuted instantiation: platform_hypercall.c:__copy_from_user
Unexecuted instantiation: physdev.c:__copy_from_user
Unexecuted instantiation: percpu.c:__copy_from_user
Unexecuted instantiation: numa.c:__copy_from_user
Unexecuted instantiation: nmi.c:__copy_from_user
Unexecuted instantiation: mpparse.c:__copy_from_user
Unexecuted instantiation: mm.c:__copy_from_user
Unexecuted instantiation: microcode.c:__copy_from_user
Unexecuted instantiation: microcode_intel.c:__copy_from_user
Unexecuted instantiation: microcode_amd.c:__copy_from_user
Unexecuted instantiation: machine_kexec.c:__copy_from_user
Unexecuted instantiation: ioport_emulate.c:__copy_from_user
Unexecuted instantiation: msr.c:__copy_from_user
Unexecuted instantiation: io_apic.c:__copy_from_user
Unexecuted instantiation: i8259.c:__copy_from_user
Unexecuted instantiation: i387.c:__copy_from_user
Unexecuted instantiation: hypercall.c:__copy_from_user
Unexecuted instantiation: flushtlb.c:__copy_from_user
Unexecuted instantiation: extable.c:__copy_from_user
Unexecuted instantiation: e820.c:__copy_from_user
Unexecuted instantiation: domain_page.c:__copy_from_user
Unexecuted instantiation: debug.c:__copy_from_user
Unexecuted instantiation: crash.c:__copy_from_user
Unexecuted instantiation: compat.c:__copy_from_user
Unexecuted instantiation: cpuid.c:__copy_from_user
Unexecuted instantiation: apic.c:__copy_from_user
Unexecuted instantiation: xsm_core.c:__copy_from_user
Unexecuted instantiation: vesa.c:__copy_from_user
Unexecuted instantiation: vga.c:__copy_from_user
Unexecuted instantiation: apei-io.c:__copy_from_user
Unexecuted instantiation: apei-base.c:__copy_from_user
Unexecuted instantiation: hest.c:__copy_from_user
Unexecuted instantiation: erst.c:__copy_from_user
Unexecuted instantiation: reboot.c:__copy_from_user
Unexecuted instantiation: hwregs.c:__copy_from_user
Unexecuted instantiation: pmstat.c:__copy_from_user
Unexecuted instantiation: osl.c:__copy_from_user
Unexecuted instantiation: iommu_guest.c:__copy_from_user
Unexecuted instantiation: iommu_cmd.c:__copy_from_user
Unexecuted instantiation: iommu_intr.c:__copy_from_user
Unexecuted instantiation: pci_amd_iommu.c:__copy_from_user
Unexecuted instantiation: iommu_map.c:__copy_from_user
Unexecuted instantiation: iommu_init.c:__copy_from_user
Unexecuted instantiation: ats.c:__copy_from_user
Unexecuted instantiation: vtd.c:__copy_from_user
Unexecuted instantiation: quirks.c:__copy_from_user
Unexecuted instantiation: intremap.c:__copy_from_user
Unexecuted instantiation: qinval.c:__copy_from_user
Unexecuted instantiation: utils.c:__copy_from_user
Unexecuted instantiation: dmar.c:__copy_from_user
Unexecuted instantiation: io.c:__copy_from_user
Unexecuted instantiation: iommu.c:__copy_from_user
Unexecuted instantiation: msix.c:__copy_from_user
Unexecuted instantiation: msi.c:__copy_from_user
Unexecuted instantiation: header.c:__copy_from_user
Unexecuted instantiation: vpci.c:__copy_from_user
Unexecuted instantiation: pci.c:__copy_from_user
Unexecuted instantiation: utility.c:__copy_from_user
Unexecuted instantiation: cpufreq_misc_governors.c:__copy_from_user
Unexecuted instantiation: cpufreq_ondemand.c:__copy_from_user
Unexecuted instantiation: cpufreq.c:__copy_from_user
Unexecuted instantiation: serial.c:__copy_from_user
Unexecuted instantiation: ehci-dbgp.c:__copy_from_user
Unexecuted instantiation: ns16550.c:__copy_from_user
Unexecuted instantiation: console.c:__copy_from_user
Unexecuted instantiation: libelf-loader.c:__copy_from_user
Unexecuted instantiation: llvm.c:__copy_from_user
Unexecuted instantiation: tmem_control.c:__copy_from_user
Unexecuted instantiation: tmem_xen.c:__copy_from_user
Unexecuted instantiation: tmem.c:__copy_from_user
Unexecuted instantiation: xmalloc_tlsf.c:__copy_from_user
Unexecuted instantiation: xenoprof.c:__copy_from_user
Unexecuted instantiation: wait.c:__copy_from_user
Unexecuted instantiation: vsprintf.c:__copy_from_user
Unexecuted instantiation: vmap.c:__copy_from_user
Unexecuted instantiation: vm_event.c:__copy_from_user
Unexecuted instantiation: trace.c:__copy_from_user
Unexecuted instantiation: timer.c:__copy_from_user
Unexecuted instantiation: time.c:__copy_from_user
Unexecuted instantiation: tasklet.c:__copy_from_user
Unexecuted instantiation: sysctl.c:__copy_from_user
Unexecuted instantiation: symbols.c:__copy_from_user
Unexecuted instantiation: stop_machine.c:__copy_from_user
Unexecuted instantiation: spinlock.c:__copy_from_user
Unexecuted instantiation: softirq.c:__copy_from_user
Unexecuted instantiation: shutdown.c:__copy_from_user
Unexecuted instantiation: schedule.c:__copy_from_user
Unexecuted instantiation: sched_null.c:__copy_from_user
Unexecuted instantiation: sched_rt.c:__copy_from_user
Unexecuted instantiation: sched_credit2.c:__copy_from_user
Unexecuted instantiation: sched_credit.c:__copy_from_user
Unexecuted instantiation: sched_arinc653.c:__copy_from_user
Unexecuted instantiation: rwlock.c:__copy_from_user
Unexecuted instantiation: rcupdate.c:__copy_from_user
Unexecuted instantiation: rangeset.c:__copy_from_user
Unexecuted instantiation: preempt.c:__copy_from_user
Unexecuted instantiation: pdx.c:__copy_from_user
Unexecuted instantiation: page_alloc.c:__copy_from_user
Unexecuted instantiation: multicall.c:__copy_from_user
Unexecuted instantiation: monitor.c:__copy_from_user
Unexecuted instantiation: memory.c:__copy_from_user
Unexecuted instantiation: mem_access.c:__copy_from_user
Unexecuted instantiation: kimage.c:__copy_from_user
Unexecuted instantiation: kexec.c:__copy_from_user
Unexecuted instantiation: keyhandler.c:__copy_from_user
Unexecuted instantiation: kernel.c:__copy_from_user
Unexecuted instantiation: irq.c:__copy_from_user
Unexecuted instantiation: guestcopy.c:__copy_from_user
Unexecuted instantiation: grant_table.c:__copy_from_user
Unexecuted instantiation: event_fifo.c:__copy_from_user
Unexecuted instantiation: event_channel.c:__copy_from_user
Unexecuted instantiation: event_2l.c:__copy_from_user
Unexecuted instantiation: domain.c:__copy_from_user
Unexecuted instantiation: domctl.c:__copy_from_user
Unexecuted instantiation: cpupool.c:__copy_from_user
Unexecuted instantiation: cpu.c:__copy_from_user
252
253
/*
254
 * The exception table consists of pairs of addresses: the first is the
255
 * address of an instruction that is allowed to fault, and the second is
256
 * the address at which the program should continue.  No registers are
257
 * modified, so it is entirely up to the continuation code to figure out
258
 * what to do.
259
 *
260
 * All the routines below use bits of fixup code that are out of line
261
 * with the main instruction path.  This means when everything is well,
262
 * we don't even have to jump over them.  Further, they do not intrude
263
 * on our cache or tlb entries.
264
 */
265
266
struct exception_table_entry
267
{
268
  s32 addr, cont;
269
};
270
extern struct exception_table_entry __start___ex_table[];
271
extern struct exception_table_entry __stop___ex_table[];
272
extern struct exception_table_entry __start___pre_ex_table[];
273
extern struct exception_table_entry __stop___pre_ex_table[];
274
275
union stub_exception_token {
276
    struct {
277
        uint16_t ec;
278
        uint8_t trapnr;
279
    } fields;
280
    unsigned long raw;
281
};
282
283
extern unsigned long search_exception_table(const struct cpu_user_regs *regs);
284
extern void sort_exception_tables(void);
285
extern void sort_exception_table(struct exception_table_entry *start,
286
                                 const struct exception_table_entry *stop);
287
288
#endif /* __X86_UACCESS_H__ */