1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Copyright (C) 2012,2013 - ARM Ltd
4 * Author: Marc Zyngier <marc.zyngier@arm.com>
5 *
6 * Derived from arch/arm/kvm/guest.c:
7 * Copyright (C) 2012 - Virtual Open Systems and Columbia University
8 * Author: Christoffer Dall <c.dall@virtualopensystems.com>
9 */
10
11 #include <linux/bits.h>
12 #include <linux/errno.h>
13 #include <linux/err.h>
14 #include <linux/nospec.h>
15 #include <linux/kvm_host.h>
16 #include <linux/module.h>
17 #include <linux/stddef.h>
18 #include <linux/string.h>
19 #include <linux/vmalloc.h>
20 #include <linux/fs.h>
21 #include <kvm/arm_psci.h>
22 #include <asm/cputype.h>
23 #include <linux/uaccess.h>
24 #include <asm/fpsimd.h>
25 #include <asm/kvm.h>
26 #include <asm/kvm_emulate.h>
27 #include <asm/sigcontext.h>
28
29 #include "trace.h"
30
31 struct kvm_stats_debugfs_item debugfs_entries[] = {
32 VCPU_STAT("halt_successful_poll", halt_successful_poll),
33 VCPU_STAT("halt_attempted_poll", halt_attempted_poll),
34 VCPU_STAT("halt_poll_invalid", halt_poll_invalid),
35 VCPU_STAT("halt_wakeup", halt_wakeup),
36 VCPU_STAT("hvc_exit_stat", hvc_exit_stat),
37 VCPU_STAT("wfe_exit_stat", wfe_exit_stat),
38 VCPU_STAT("wfi_exit_stat", wfi_exit_stat),
39 VCPU_STAT("mmio_exit_user", mmio_exit_user),
40 VCPU_STAT("mmio_exit_kernel", mmio_exit_kernel),
41 VCPU_STAT("signal_exits", signal_exits),
42 VCPU_STAT("exits", exits),
43 VCPU_STAT("halt_poll_success_ns", halt_poll_success_ns),
44 VCPU_STAT("halt_poll_fail_ns", halt_poll_fail_ns),
45 { NULL }
46 };
47
core_reg_offset_is_vreg(u64 off)48 static bool core_reg_offset_is_vreg(u64 off)
49 {
50 return off >= KVM_REG_ARM_CORE_REG(fp_regs.vregs) &&
51 off < KVM_REG_ARM_CORE_REG(fp_regs.fpsr);
52 }
53
core_reg_offset_from_id(u64 id)54 static u64 core_reg_offset_from_id(u64 id)
55 {
56 return id & ~(KVM_REG_ARCH_MASK | KVM_REG_SIZE_MASK | KVM_REG_ARM_CORE);
57 }
58
core_reg_size_from_offset(const struct kvm_vcpu * vcpu,u64 off)59 static int core_reg_size_from_offset(const struct kvm_vcpu *vcpu, u64 off)
60 {
61 int size;
62
63 switch (off) {
64 case KVM_REG_ARM_CORE_REG(regs.regs[0]) ...
65 KVM_REG_ARM_CORE_REG(regs.regs[30]):
66 case KVM_REG_ARM_CORE_REG(regs.sp):
67 case KVM_REG_ARM_CORE_REG(regs.pc):
68 case KVM_REG_ARM_CORE_REG(regs.pstate):
69 case KVM_REG_ARM_CORE_REG(sp_el1):
70 case KVM_REG_ARM_CORE_REG(elr_el1):
71 case KVM_REG_ARM_CORE_REG(spsr[0]) ...
72 KVM_REG_ARM_CORE_REG(spsr[KVM_NR_SPSR - 1]):
73 size = sizeof(__u64);
74 break;
75
76 case KVM_REG_ARM_CORE_REG(fp_regs.vregs[0]) ...
77 KVM_REG_ARM_CORE_REG(fp_regs.vregs[31]):
78 size = sizeof(__uint128_t);
79 break;
80
81 case KVM_REG_ARM_CORE_REG(fp_regs.fpsr):
82 case KVM_REG_ARM_CORE_REG(fp_regs.fpcr):
83 size = sizeof(__u32);
84 break;
85
86 default:
87 return -EINVAL;
88 }
89
90 if (!IS_ALIGNED(off, size / sizeof(__u32)))
91 return -EINVAL;
92
93 /*
94 * The KVM_REG_ARM64_SVE regs must be used instead of
95 * KVM_REG_ARM_CORE for accessing the FPSIMD V-registers on
96 * SVE-enabled vcpus:
97 */
98 if (vcpu_has_sve(vcpu) && core_reg_offset_is_vreg(off))
99 return -EINVAL;
100
101 return size;
102 }
103
core_reg_addr(struct kvm_vcpu * vcpu,const struct kvm_one_reg * reg)104 static void *core_reg_addr(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
105 {
106 u64 off = core_reg_offset_from_id(reg->id);
107 int size = core_reg_size_from_offset(vcpu, off);
108
109 if (size < 0)
110 return NULL;
111
112 if (KVM_REG_SIZE(reg->id) != size)
113 return NULL;
114
115 switch (off) {
116 case KVM_REG_ARM_CORE_REG(regs.regs[0]) ...
117 KVM_REG_ARM_CORE_REG(regs.regs[30]):
118 off -= KVM_REG_ARM_CORE_REG(regs.regs[0]);
119 off /= 2;
120 return &vcpu->arch.ctxt.regs.regs[off];
121
122 case KVM_REG_ARM_CORE_REG(regs.sp):
123 return &vcpu->arch.ctxt.regs.sp;
124
125 case KVM_REG_ARM_CORE_REG(regs.pc):
126 return &vcpu->arch.ctxt.regs.pc;
127
128 case KVM_REG_ARM_CORE_REG(regs.pstate):
129 return &vcpu->arch.ctxt.regs.pstate;
130
131 case KVM_REG_ARM_CORE_REG(sp_el1):
132 return __ctxt_sys_reg(&vcpu->arch.ctxt, SP_EL1);
133
134 case KVM_REG_ARM_CORE_REG(elr_el1):
135 return __ctxt_sys_reg(&vcpu->arch.ctxt, ELR_EL1);
136
137 case KVM_REG_ARM_CORE_REG(spsr[KVM_SPSR_EL1]):
138 return __ctxt_sys_reg(&vcpu->arch.ctxt, SPSR_EL1);
139
140 case KVM_REG_ARM_CORE_REG(spsr[KVM_SPSR_ABT]):
141 return &vcpu->arch.ctxt.spsr_abt;
142
143 case KVM_REG_ARM_CORE_REG(spsr[KVM_SPSR_UND]):
144 return &vcpu->arch.ctxt.spsr_und;
145
146 case KVM_REG_ARM_CORE_REG(spsr[KVM_SPSR_IRQ]):
147 return &vcpu->arch.ctxt.spsr_irq;
148
149 case KVM_REG_ARM_CORE_REG(spsr[KVM_SPSR_FIQ]):
150 return &vcpu->arch.ctxt.spsr_fiq;
151
152 case KVM_REG_ARM_CORE_REG(fp_regs.vregs[0]) ...
153 KVM_REG_ARM_CORE_REG(fp_regs.vregs[31]):
154 off -= KVM_REG_ARM_CORE_REG(fp_regs.vregs[0]);
155 off /= 4;
156 return &vcpu->arch.ctxt.fp_regs.vregs[off];
157
158 case KVM_REG_ARM_CORE_REG(fp_regs.fpsr):
159 return &vcpu->arch.ctxt.fp_regs.fpsr;
160
161 case KVM_REG_ARM_CORE_REG(fp_regs.fpcr):
162 return &vcpu->arch.ctxt.fp_regs.fpcr;
163
164 default:
165 return NULL;
166 }
167 }
168
get_core_reg(struct kvm_vcpu * vcpu,const struct kvm_one_reg * reg)169 static int get_core_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
170 {
171 /*
172 * Because the kvm_regs structure is a mix of 32, 64 and
173 * 128bit fields, we index it as if it was a 32bit
174 * array. Hence below, nr_regs is the number of entries, and
175 * off the index in the "array".
176 */
177 __u32 __user *uaddr = (__u32 __user *)(unsigned long)reg->addr;
178 int nr_regs = sizeof(struct kvm_regs) / sizeof(__u32);
179 void *addr;
180 u32 off;
181
182 /* Our ID is an index into the kvm_regs struct. */
183 off = core_reg_offset_from_id(reg->id);
184 if (off >= nr_regs ||
185 (off + (KVM_REG_SIZE(reg->id) / sizeof(__u32))) >= nr_regs)
186 return -ENOENT;
187
188 addr = core_reg_addr(vcpu, reg);
189 if (!addr)
190 return -EINVAL;
191
192 if (copy_to_user(uaddr, addr, KVM_REG_SIZE(reg->id)))
193 return -EFAULT;
194
195 return 0;
196 }
197
set_core_reg(struct kvm_vcpu * vcpu,const struct kvm_one_reg * reg)198 static int set_core_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
199 {
200 __u32 __user *uaddr = (__u32 __user *)(unsigned long)reg->addr;
201 int nr_regs = sizeof(struct kvm_regs) / sizeof(__u32);
202 __uint128_t tmp;
203 void *valp = &tmp, *addr;
204 u64 off;
205 int err = 0;
206
207 /* Our ID is an index into the kvm_regs struct. */
208 off = core_reg_offset_from_id(reg->id);
209 if (off >= nr_regs ||
210 (off + (KVM_REG_SIZE(reg->id) / sizeof(__u32))) >= nr_regs)
211 return -ENOENT;
212
213 addr = core_reg_addr(vcpu, reg);
214 if (!addr)
215 return -EINVAL;
216
217 if (KVM_REG_SIZE(reg->id) > sizeof(tmp))
218 return -EINVAL;
219
220 if (copy_from_user(valp, uaddr, KVM_REG_SIZE(reg->id))) {
221 err = -EFAULT;
222 goto out;
223 }
224
225 if (off == KVM_REG_ARM_CORE_REG(regs.pstate)) {
226 u64 mode = (*(u64 *)valp) & PSR_AA32_MODE_MASK;
227 switch (mode) {
228 case PSR_AA32_MODE_USR:
229 if (!kvm_supports_32bit_el0())
230 return -EINVAL;
231 break;
232 case PSR_AA32_MODE_FIQ:
233 case PSR_AA32_MODE_IRQ:
234 case PSR_AA32_MODE_SVC:
235 case PSR_AA32_MODE_ABT:
236 case PSR_AA32_MODE_UND:
237 if (!vcpu_el1_is_32bit(vcpu))
238 return -EINVAL;
239 break;
240 case PSR_MODE_EL0t:
241 case PSR_MODE_EL1t:
242 case PSR_MODE_EL1h:
243 if (vcpu_el1_is_32bit(vcpu))
244 return -EINVAL;
245 break;
246 default:
247 err = -EINVAL;
248 goto out;
249 }
250 }
251
252 memcpy(addr, valp, KVM_REG_SIZE(reg->id));
253
254 if (*vcpu_cpsr(vcpu) & PSR_MODE32_BIT) {
255 int i, nr_reg;
256
257 switch (*vcpu_cpsr(vcpu)) {
258 /*
259 * Either we are dealing with user mode, and only the
260 * first 15 registers (+ PC) must be narrowed to 32bit.
261 * AArch32 r0-r14 conveniently map to AArch64 x0-x14.
262 */
263 case PSR_AA32_MODE_USR:
264 case PSR_AA32_MODE_SYS:
265 nr_reg = 15;
266 break;
267
268 /*
269 * Otherwide, this is a priviledged mode, and *all* the
270 * registers must be narrowed to 32bit.
271 */
272 default:
273 nr_reg = 31;
274 break;
275 }
276
277 for (i = 0; i < nr_reg; i++)
278 vcpu_set_reg(vcpu, i, (u32)vcpu_get_reg(vcpu, i));
279
280 *vcpu_pc(vcpu) = (u32)*vcpu_pc(vcpu);
281 }
282 out:
283 return err;
284 }
285
286 #define vq_word(vq) (((vq) - SVE_VQ_MIN) / 64)
287 #define vq_mask(vq) ((u64)1 << ((vq) - SVE_VQ_MIN) % 64)
288 #define vq_present(vqs, vq) (!!((vqs)[vq_word(vq)] & vq_mask(vq)))
289
get_sve_vls(struct kvm_vcpu * vcpu,const struct kvm_one_reg * reg)290 static int get_sve_vls(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
291 {
292 unsigned int max_vq, vq;
293 u64 vqs[KVM_ARM64_SVE_VLS_WORDS];
294
295 if (!vcpu_has_sve(vcpu))
296 return -ENOENT;
297
298 if (WARN_ON(!sve_vl_valid(vcpu->arch.sve_max_vl)))
299 return -EINVAL;
300
301 memset(vqs, 0, sizeof(vqs));
302
303 max_vq = vcpu_sve_max_vq(vcpu);
304 for (vq = SVE_VQ_MIN; vq <= max_vq; ++vq)
305 if (sve_vq_available(vq))
306 vqs[vq_word(vq)] |= vq_mask(vq);
307
308 if (copy_to_user((void __user *)reg->addr, vqs, sizeof(vqs)))
309 return -EFAULT;
310
311 return 0;
312 }
313
set_sve_vls(struct kvm_vcpu * vcpu,const struct kvm_one_reg * reg)314 static int set_sve_vls(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
315 {
316 unsigned int max_vq, vq;
317 u64 vqs[KVM_ARM64_SVE_VLS_WORDS];
318
319 if (!vcpu_has_sve(vcpu))
320 return -ENOENT;
321
322 if (kvm_arm_vcpu_sve_finalized(vcpu))
323 return -EPERM; /* too late! */
324
325 if (WARN_ON(vcpu->arch.sve_state))
326 return -EINVAL;
327
328 if (copy_from_user(vqs, (const void __user *)reg->addr, sizeof(vqs)))
329 return -EFAULT;
330
331 max_vq = 0;
332 for (vq = SVE_VQ_MIN; vq <= SVE_VQ_MAX; ++vq)
333 if (vq_present(vqs, vq))
334 max_vq = vq;
335
336 if (max_vq > sve_vq_from_vl(kvm_sve_max_vl))
337 return -EINVAL;
338
339 /*
340 * Vector lengths supported by the host can't currently be
341 * hidden from the guest individually: instead we can only set a
342 * maximum via ZCR_EL2.LEN. So, make sure the available vector
343 * lengths match the set requested exactly up to the requested
344 * maximum:
345 */
346 for (vq = SVE_VQ_MIN; vq <= max_vq; ++vq)
347 if (vq_present(vqs, vq) != sve_vq_available(vq))
348 return -EINVAL;
349
350 /* Can't run with no vector lengths at all: */
351 if (max_vq < SVE_VQ_MIN)
352 return -EINVAL;
353
354 /* vcpu->arch.sve_state will be alloc'd by kvm_vcpu_finalize_sve() */
355 vcpu->arch.sve_max_vl = sve_vl_from_vq(max_vq);
356
357 return 0;
358 }
359
360 #define SVE_REG_SLICE_SHIFT 0
361 #define SVE_REG_SLICE_BITS 5
362 #define SVE_REG_ID_SHIFT (SVE_REG_SLICE_SHIFT + SVE_REG_SLICE_BITS)
363 #define SVE_REG_ID_BITS 5
364
365 #define SVE_REG_SLICE_MASK \
366 GENMASK(SVE_REG_SLICE_SHIFT + SVE_REG_SLICE_BITS - 1, \
367 SVE_REG_SLICE_SHIFT)
368 #define SVE_REG_ID_MASK \
369 GENMASK(SVE_REG_ID_SHIFT + SVE_REG_ID_BITS - 1, SVE_REG_ID_SHIFT)
370
371 #define SVE_NUM_SLICES (1 << SVE_REG_SLICE_BITS)
372
373 #define KVM_SVE_ZREG_SIZE KVM_REG_SIZE(KVM_REG_ARM64_SVE_ZREG(0, 0))
374 #define KVM_SVE_PREG_SIZE KVM_REG_SIZE(KVM_REG_ARM64_SVE_PREG(0, 0))
375
376 /*
377 * Number of register slices required to cover each whole SVE register.
378 * NOTE: Only the first slice every exists, for now.
379 * If you are tempted to modify this, you must also rework sve_reg_to_region()
380 * to match:
381 */
382 #define vcpu_sve_slices(vcpu) 1
383
384 /* Bounds of a single SVE register slice within vcpu->arch.sve_state */
385 struct sve_state_reg_region {
386 unsigned int koffset; /* offset into sve_state in kernel memory */
387 unsigned int klen; /* length in kernel memory */
388 unsigned int upad; /* extra trailing padding in user memory */
389 };
390
391 /*
392 * Validate SVE register ID and get sanitised bounds for user/kernel SVE
393 * register copy
394 */
sve_reg_to_region(struct sve_state_reg_region * region,struct kvm_vcpu * vcpu,const struct kvm_one_reg * reg)395 static int sve_reg_to_region(struct sve_state_reg_region *region,
396 struct kvm_vcpu *vcpu,
397 const struct kvm_one_reg *reg)
398 {
399 /* reg ID ranges for Z- registers */
400 const u64 zreg_id_min = KVM_REG_ARM64_SVE_ZREG(0, 0);
401 const u64 zreg_id_max = KVM_REG_ARM64_SVE_ZREG(SVE_NUM_ZREGS - 1,
402 SVE_NUM_SLICES - 1);
403
404 /* reg ID ranges for P- registers and FFR (which are contiguous) */
405 const u64 preg_id_min = KVM_REG_ARM64_SVE_PREG(0, 0);
406 const u64 preg_id_max = KVM_REG_ARM64_SVE_FFR(SVE_NUM_SLICES - 1);
407
408 unsigned int vq;
409 unsigned int reg_num;
410
411 unsigned int reqoffset, reqlen; /* User-requested offset and length */
412 unsigned int maxlen; /* Maximum permitted length */
413
414 size_t sve_state_size;
415
416 const u64 last_preg_id = KVM_REG_ARM64_SVE_PREG(SVE_NUM_PREGS - 1,
417 SVE_NUM_SLICES - 1);
418
419 /* Verify that the P-regs and FFR really do have contiguous IDs: */
420 BUILD_BUG_ON(KVM_REG_ARM64_SVE_FFR(0) != last_preg_id + 1);
421
422 /* Verify that we match the UAPI header: */
423 BUILD_BUG_ON(SVE_NUM_SLICES != KVM_ARM64_SVE_MAX_SLICES);
424
425 reg_num = (reg->id & SVE_REG_ID_MASK) >> SVE_REG_ID_SHIFT;
426
427 if (reg->id >= zreg_id_min && reg->id <= zreg_id_max) {
428 if (!vcpu_has_sve(vcpu) || (reg->id & SVE_REG_SLICE_MASK) > 0)
429 return -ENOENT;
430
431 vq = vcpu_sve_max_vq(vcpu);
432
433 reqoffset = SVE_SIG_ZREG_OFFSET(vq, reg_num) -
434 SVE_SIG_REGS_OFFSET;
435 reqlen = KVM_SVE_ZREG_SIZE;
436 maxlen = SVE_SIG_ZREG_SIZE(vq);
437 } else if (reg->id >= preg_id_min && reg->id <= preg_id_max) {
438 if (!vcpu_has_sve(vcpu) || (reg->id & SVE_REG_SLICE_MASK) > 0)
439 return -ENOENT;
440
441 vq = vcpu_sve_max_vq(vcpu);
442
443 reqoffset = SVE_SIG_PREG_OFFSET(vq, reg_num) -
444 SVE_SIG_REGS_OFFSET;
445 reqlen = KVM_SVE_PREG_SIZE;
446 maxlen = SVE_SIG_PREG_SIZE(vq);
447 } else {
448 return -EINVAL;
449 }
450
451 sve_state_size = vcpu_sve_state_size(vcpu);
452 if (WARN_ON(!sve_state_size))
453 return -EINVAL;
454
455 region->koffset = array_index_nospec(reqoffset, sve_state_size);
456 region->klen = min(maxlen, reqlen);
457 region->upad = reqlen - region->klen;
458
459 return 0;
460 }
461
get_sve_reg(struct kvm_vcpu * vcpu,const struct kvm_one_reg * reg)462 static int get_sve_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
463 {
464 int ret;
465 struct sve_state_reg_region region;
466 char __user *uptr = (char __user *)reg->addr;
467
468 /* Handle the KVM_REG_ARM64_SVE_VLS pseudo-reg as a special case: */
469 if (reg->id == KVM_REG_ARM64_SVE_VLS)
470 return get_sve_vls(vcpu, reg);
471
472 /* Try to interpret reg ID as an architectural SVE register... */
473 ret = sve_reg_to_region(®ion, vcpu, reg);
474 if (ret)
475 return ret;
476
477 if (!kvm_arm_vcpu_sve_finalized(vcpu))
478 return -EPERM;
479
480 if (copy_to_user(uptr, vcpu->arch.sve_state + region.koffset,
481 region.klen) ||
482 clear_user(uptr + region.klen, region.upad))
483 return -EFAULT;
484
485 return 0;
486 }
487
set_sve_reg(struct kvm_vcpu * vcpu,const struct kvm_one_reg * reg)488 static int set_sve_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
489 {
490 int ret;
491 struct sve_state_reg_region region;
492 const char __user *uptr = (const char __user *)reg->addr;
493
494 /* Handle the KVM_REG_ARM64_SVE_VLS pseudo-reg as a special case: */
495 if (reg->id == KVM_REG_ARM64_SVE_VLS)
496 return set_sve_vls(vcpu, reg);
497
498 /* Try to interpret reg ID as an architectural SVE register... */
499 ret = sve_reg_to_region(®ion, vcpu, reg);
500 if (ret)
501 return ret;
502
503 if (!kvm_arm_vcpu_sve_finalized(vcpu))
504 return -EPERM;
505
506 if (copy_from_user(vcpu->arch.sve_state + region.koffset, uptr,
507 region.klen))
508 return -EFAULT;
509
510 return 0;
511 }
512
kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu * vcpu,struct kvm_regs * regs)513 int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
514 {
515 return -EINVAL;
516 }
517
kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu * vcpu,struct kvm_regs * regs)518 int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
519 {
520 return -EINVAL;
521 }
522
copy_core_reg_indices(const struct kvm_vcpu * vcpu,u64 __user * uindices)523 static int copy_core_reg_indices(const struct kvm_vcpu *vcpu,
524 u64 __user *uindices)
525 {
526 unsigned int i;
527 int n = 0;
528
529 for (i = 0; i < sizeof(struct kvm_regs) / sizeof(__u32); i++) {
530 u64 reg = KVM_REG_ARM64 | KVM_REG_ARM_CORE | i;
531 int size = core_reg_size_from_offset(vcpu, i);
532
533 if (size < 0)
534 continue;
535
536 switch (size) {
537 case sizeof(__u32):
538 reg |= KVM_REG_SIZE_U32;
539 break;
540
541 case sizeof(__u64):
542 reg |= KVM_REG_SIZE_U64;
543 break;
544
545 case sizeof(__uint128_t):
546 reg |= KVM_REG_SIZE_U128;
547 break;
548
549 default:
550 WARN_ON(1);
551 continue;
552 }
553
554 if (uindices) {
555 if (put_user(reg, uindices))
556 return -EFAULT;
557 uindices++;
558 }
559
560 n++;
561 }
562
563 return n;
564 }
565
num_core_regs(const struct kvm_vcpu * vcpu)566 static unsigned long num_core_regs(const struct kvm_vcpu *vcpu)
567 {
568 return copy_core_reg_indices(vcpu, NULL);
569 }
570
571 /**
572 * ARM64 versions of the TIMER registers, always available on arm64
573 */
574
575 #define NUM_TIMER_REGS 3
576
is_timer_reg(u64 index)577 static bool is_timer_reg(u64 index)
578 {
579 switch (index) {
580 case KVM_REG_ARM_TIMER_CTL:
581 case KVM_REG_ARM_TIMER_CNT:
582 case KVM_REG_ARM_TIMER_CVAL:
583 return true;
584 }
585 return false;
586 }
587
copy_timer_indices(struct kvm_vcpu * vcpu,u64 __user * uindices)588 static int copy_timer_indices(struct kvm_vcpu *vcpu, u64 __user *uindices)
589 {
590 if (put_user(KVM_REG_ARM_TIMER_CTL, uindices))
591 return -EFAULT;
592 uindices++;
593 if (put_user(KVM_REG_ARM_TIMER_CNT, uindices))
594 return -EFAULT;
595 uindices++;
596 if (put_user(KVM_REG_ARM_TIMER_CVAL, uindices))
597 return -EFAULT;
598
599 return 0;
600 }
601
set_timer_reg(struct kvm_vcpu * vcpu,const struct kvm_one_reg * reg)602 static int set_timer_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
603 {
604 void __user *uaddr = (void __user *)(long)reg->addr;
605 u64 val;
606 int ret;
607
608 ret = copy_from_user(&val, uaddr, KVM_REG_SIZE(reg->id));
609 if (ret != 0)
610 return -EFAULT;
611
612 return kvm_arm_timer_set_reg(vcpu, reg->id, val);
613 }
614
get_timer_reg(struct kvm_vcpu * vcpu,const struct kvm_one_reg * reg)615 static int get_timer_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
616 {
617 void __user *uaddr = (void __user *)(long)reg->addr;
618 u64 val;
619
620 val = kvm_arm_timer_get_reg(vcpu, reg->id);
621 return copy_to_user(uaddr, &val, KVM_REG_SIZE(reg->id)) ? -EFAULT : 0;
622 }
623
num_sve_regs(const struct kvm_vcpu * vcpu)624 static unsigned long num_sve_regs(const struct kvm_vcpu *vcpu)
625 {
626 const unsigned int slices = vcpu_sve_slices(vcpu);
627
628 if (!vcpu_has_sve(vcpu))
629 return 0;
630
631 /* Policed by KVM_GET_REG_LIST: */
632 WARN_ON(!kvm_arm_vcpu_sve_finalized(vcpu));
633
634 return slices * (SVE_NUM_PREGS + SVE_NUM_ZREGS + 1 /* FFR */)
635 + 1; /* KVM_REG_ARM64_SVE_VLS */
636 }
637
copy_sve_reg_indices(const struct kvm_vcpu * vcpu,u64 __user * uindices)638 static int copy_sve_reg_indices(const struct kvm_vcpu *vcpu,
639 u64 __user *uindices)
640 {
641 const unsigned int slices = vcpu_sve_slices(vcpu);
642 u64 reg;
643 unsigned int i, n;
644 int num_regs = 0;
645
646 if (!vcpu_has_sve(vcpu))
647 return 0;
648
649 /* Policed by KVM_GET_REG_LIST: */
650 WARN_ON(!kvm_arm_vcpu_sve_finalized(vcpu));
651
652 /*
653 * Enumerate this first, so that userspace can save/restore in
654 * the order reported by KVM_GET_REG_LIST:
655 */
656 reg = KVM_REG_ARM64_SVE_VLS;
657 if (put_user(reg, uindices++))
658 return -EFAULT;
659 ++num_regs;
660
661 for (i = 0; i < slices; i++) {
662 for (n = 0; n < SVE_NUM_ZREGS; n++) {
663 reg = KVM_REG_ARM64_SVE_ZREG(n, i);
664 if (put_user(reg, uindices++))
665 return -EFAULT;
666 num_regs++;
667 }
668
669 for (n = 0; n < SVE_NUM_PREGS; n++) {
670 reg = KVM_REG_ARM64_SVE_PREG(n, i);
671 if (put_user(reg, uindices++))
672 return -EFAULT;
673 num_regs++;
674 }
675
676 reg = KVM_REG_ARM64_SVE_FFR(i);
677 if (put_user(reg, uindices++))
678 return -EFAULT;
679 num_regs++;
680 }
681
682 return num_regs;
683 }
684
685 /**
686 * kvm_arm_num_regs - how many registers do we present via KVM_GET_ONE_REG
687 *
688 * This is for all registers.
689 */
kvm_arm_num_regs(struct kvm_vcpu * vcpu)690 unsigned long kvm_arm_num_regs(struct kvm_vcpu *vcpu)
691 {
692 unsigned long res = 0;
693
694 res += num_core_regs(vcpu);
695 res += num_sve_regs(vcpu);
696 res += kvm_arm_num_sys_reg_descs(vcpu);
697 res += kvm_arm_get_fw_num_regs(vcpu);
698 res += NUM_TIMER_REGS;
699
700 return res;
701 }
702
703 /**
704 * kvm_arm_copy_reg_indices - get indices of all registers.
705 *
706 * We do core registers right here, then we append system regs.
707 */
kvm_arm_copy_reg_indices(struct kvm_vcpu * vcpu,u64 __user * uindices)708 int kvm_arm_copy_reg_indices(struct kvm_vcpu *vcpu, u64 __user *uindices)
709 {
710 int ret;
711
712 ret = copy_core_reg_indices(vcpu, uindices);
713 if (ret < 0)
714 return ret;
715 uindices += ret;
716
717 ret = copy_sve_reg_indices(vcpu, uindices);
718 if (ret < 0)
719 return ret;
720 uindices += ret;
721
722 ret = kvm_arm_copy_fw_reg_indices(vcpu, uindices);
723 if (ret < 0)
724 return ret;
725 uindices += kvm_arm_get_fw_num_regs(vcpu);
726
727 ret = copy_timer_indices(vcpu, uindices);
728 if (ret < 0)
729 return ret;
730 uindices += NUM_TIMER_REGS;
731
732 return kvm_arm_copy_sys_reg_indices(vcpu, uindices);
733 }
734
kvm_arm_get_reg(struct kvm_vcpu * vcpu,const struct kvm_one_reg * reg)735 int kvm_arm_get_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
736 {
737 /* We currently use nothing arch-specific in upper 32 bits */
738 if ((reg->id & ~KVM_REG_SIZE_MASK) >> 32 != KVM_REG_ARM64 >> 32)
739 return -EINVAL;
740
741 switch (reg->id & KVM_REG_ARM_COPROC_MASK) {
742 case KVM_REG_ARM_CORE: return get_core_reg(vcpu, reg);
743 case KVM_REG_ARM_FW: return kvm_arm_get_fw_reg(vcpu, reg);
744 case KVM_REG_ARM64_SVE: return get_sve_reg(vcpu, reg);
745 }
746
747 if (is_timer_reg(reg->id))
748 return get_timer_reg(vcpu, reg);
749
750 return kvm_arm_sys_reg_get_reg(vcpu, reg);
751 }
752
kvm_arm_set_reg(struct kvm_vcpu * vcpu,const struct kvm_one_reg * reg)753 int kvm_arm_set_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
754 {
755 /* We currently use nothing arch-specific in upper 32 bits */
756 if ((reg->id & ~KVM_REG_SIZE_MASK) >> 32 != KVM_REG_ARM64 >> 32)
757 return -EINVAL;
758
759 switch (reg->id & KVM_REG_ARM_COPROC_MASK) {
760 case KVM_REG_ARM_CORE: return set_core_reg(vcpu, reg);
761 case KVM_REG_ARM_FW: return kvm_arm_set_fw_reg(vcpu, reg);
762 case KVM_REG_ARM64_SVE: return set_sve_reg(vcpu, reg);
763 }
764
765 if (is_timer_reg(reg->id))
766 return set_timer_reg(vcpu, reg);
767
768 return kvm_arm_sys_reg_set_reg(vcpu, reg);
769 }
770
kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu * vcpu,struct kvm_sregs * sregs)771 int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu,
772 struct kvm_sregs *sregs)
773 {
774 return -EINVAL;
775 }
776
kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu * vcpu,struct kvm_sregs * sregs)777 int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
778 struct kvm_sregs *sregs)
779 {
780 return -EINVAL;
781 }
782
__kvm_arm_vcpu_get_events(struct kvm_vcpu * vcpu,struct kvm_vcpu_events * events)783 int __kvm_arm_vcpu_get_events(struct kvm_vcpu *vcpu,
784 struct kvm_vcpu_events *events)
785 {
786 events->exception.serror_pending = !!(vcpu->arch.hcr_el2 & HCR_VSE);
787 events->exception.serror_has_esr = cpus_have_const_cap(ARM64_HAS_RAS_EXTN);
788
789 if (events->exception.serror_pending && events->exception.serror_has_esr)
790 events->exception.serror_esr = vcpu_get_vsesr(vcpu);
791
792 /*
793 * We never return a pending ext_dabt here because we deliver it to
794 * the virtual CPU directly when setting the event and it's no longer
795 * 'pending' at this point.
796 */
797
798 return 0;
799 }
800
__kvm_arm_vcpu_set_events(struct kvm_vcpu * vcpu,struct kvm_vcpu_events * events)801 int __kvm_arm_vcpu_set_events(struct kvm_vcpu *vcpu,
802 struct kvm_vcpu_events *events)
803 {
804 bool serror_pending = events->exception.serror_pending;
805 bool has_esr = events->exception.serror_has_esr;
806 bool ext_dabt_pending = events->exception.ext_dabt_pending;
807
808 if (serror_pending && has_esr) {
809 if (!cpus_have_const_cap(ARM64_HAS_RAS_EXTN))
810 return -EINVAL;
811
812 if (!((events->exception.serror_esr) & ~ESR_ELx_ISS_MASK))
813 kvm_set_sei_esr(vcpu, events->exception.serror_esr);
814 else
815 return -EINVAL;
816 } else if (serror_pending) {
817 kvm_inject_vabt(vcpu);
818 }
819
820 if (ext_dabt_pending)
821 kvm_inject_dabt(vcpu, kvm_vcpu_get_hfar(vcpu));
822
823 return 0;
824 }
825
kvm_target_cpu(void)826 u32 __attribute_const__ kvm_target_cpu(void)
827 {
828 unsigned long implementor = read_cpuid_implementor();
829 unsigned long part_number = read_cpuid_part_number();
830
831 switch (implementor) {
832 case ARM_CPU_IMP_ARM:
833 switch (part_number) {
834 case ARM_CPU_PART_AEM_V8:
835 return KVM_ARM_TARGET_AEM_V8;
836 case ARM_CPU_PART_FOUNDATION:
837 return KVM_ARM_TARGET_FOUNDATION_V8;
838 case ARM_CPU_PART_CORTEX_A53:
839 return KVM_ARM_TARGET_CORTEX_A53;
840 case ARM_CPU_PART_CORTEX_A57:
841 return KVM_ARM_TARGET_CORTEX_A57;
842 }
843 break;
844 case ARM_CPU_IMP_APM:
845 switch (part_number) {
846 case APM_CPU_PART_POTENZA:
847 return KVM_ARM_TARGET_XGENE_POTENZA;
848 }
849 break;
850 }
851
852 /* Return a default generic target */
853 return KVM_ARM_TARGET_GENERIC_V8;
854 }
855
kvm_vcpu_preferred_target(struct kvm_vcpu_init * init)856 void kvm_vcpu_preferred_target(struct kvm_vcpu_init *init)
857 {
858 u32 target = kvm_target_cpu();
859
860 memset(init, 0, sizeof(*init));
861
862 /*
863 * For now, we don't return any features.
864 * In future, we might use features to return target
865 * specific features available for the preferred
866 * target type.
867 */
868 init->target = (__u32)target;
869 }
870
kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu * vcpu,struct kvm_fpu * fpu)871 int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
872 {
873 return -EINVAL;
874 }
875
kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu * vcpu,struct kvm_fpu * fpu)876 int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
877 {
878 return -EINVAL;
879 }
880
kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu * vcpu,struct kvm_translation * tr)881 int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
882 struct kvm_translation *tr)
883 {
884 return -EINVAL;
885 }
886
887 /**
888 * kvm_arch_vcpu_ioctl_set_guest_debug - set up guest debugging
889 * @kvm: pointer to the KVM struct
890 * @kvm_guest_debug: the ioctl data buffer
891 *
892 * This sets up and enables the VM for guest debugging. Userspace
893 * passes in a control flag to enable different debug types and
894 * potentially other architecture specific information in the rest of
895 * the structure.
896 */
kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu * vcpu,struct kvm_guest_debug * dbg)897 int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
898 struct kvm_guest_debug *dbg)
899 {
900 int ret = 0;
901
902 trace_kvm_set_guest_debug(vcpu, dbg->control);
903
904 if (dbg->control & ~KVM_GUESTDBG_VALID_MASK) {
905 ret = -EINVAL;
906 goto out;
907 }
908
909 if (dbg->control & KVM_GUESTDBG_ENABLE) {
910 vcpu->guest_debug = dbg->control;
911
912 /* Hardware assisted Break and Watch points */
913 if (vcpu->guest_debug & KVM_GUESTDBG_USE_HW) {
914 vcpu->arch.external_debug_state = dbg->arch;
915 }
916
917 } else {
918 /* If not enabled clear all flags */
919 vcpu->guest_debug = 0;
920 }
921
922 out:
923 return ret;
924 }
925
kvm_arm_vcpu_arch_set_attr(struct kvm_vcpu * vcpu,struct kvm_device_attr * attr)926 int kvm_arm_vcpu_arch_set_attr(struct kvm_vcpu *vcpu,
927 struct kvm_device_attr *attr)
928 {
929 int ret;
930
931 switch (attr->group) {
932 case KVM_ARM_VCPU_PMU_V3_CTRL:
933 ret = kvm_arm_pmu_v3_set_attr(vcpu, attr);
934 break;
935 case KVM_ARM_VCPU_TIMER_CTRL:
936 ret = kvm_arm_timer_set_attr(vcpu, attr);
937 break;
938 case KVM_ARM_VCPU_PVTIME_CTRL:
939 ret = kvm_arm_pvtime_set_attr(vcpu, attr);
940 break;
941 default:
942 ret = -ENXIO;
943 break;
944 }
945
946 return ret;
947 }
948
kvm_arm_vcpu_arch_get_attr(struct kvm_vcpu * vcpu,struct kvm_device_attr * attr)949 int kvm_arm_vcpu_arch_get_attr(struct kvm_vcpu *vcpu,
950 struct kvm_device_attr *attr)
951 {
952 int ret;
953
954 switch (attr->group) {
955 case KVM_ARM_VCPU_PMU_V3_CTRL:
956 ret = kvm_arm_pmu_v3_get_attr(vcpu, attr);
957 break;
958 case KVM_ARM_VCPU_TIMER_CTRL:
959 ret = kvm_arm_timer_get_attr(vcpu, attr);
960 break;
961 case KVM_ARM_VCPU_PVTIME_CTRL:
962 ret = kvm_arm_pvtime_get_attr(vcpu, attr);
963 break;
964 default:
965 ret = -ENXIO;
966 break;
967 }
968
969 return ret;
970 }
971
kvm_arm_vcpu_arch_has_attr(struct kvm_vcpu * vcpu,struct kvm_device_attr * attr)972 int kvm_arm_vcpu_arch_has_attr(struct kvm_vcpu *vcpu,
973 struct kvm_device_attr *attr)
974 {
975 int ret;
976
977 switch (attr->group) {
978 case KVM_ARM_VCPU_PMU_V3_CTRL:
979 ret = kvm_arm_pmu_v3_has_attr(vcpu, attr);
980 break;
981 case KVM_ARM_VCPU_TIMER_CTRL:
982 ret = kvm_arm_timer_has_attr(vcpu, attr);
983 break;
984 case KVM_ARM_VCPU_PVTIME_CTRL:
985 ret = kvm_arm_pvtime_has_attr(vcpu, attr);
986 break;
987 default:
988 ret = -ENXIO;
989 break;
990 }
991
992 return ret;
993 }
994
kvm_vm_ioctl_mte_copy_tags(struct kvm * kvm,struct kvm_arm_copy_mte_tags * copy_tags)995 int kvm_vm_ioctl_mte_copy_tags(struct kvm *kvm,
996 struct kvm_arm_copy_mte_tags *copy_tags)
997 {
998 gpa_t guest_ipa = copy_tags->guest_ipa;
999 size_t length = copy_tags->length;
1000 void __user *tags = copy_tags->addr;
1001 gpa_t gfn;
1002 bool write = !(copy_tags->flags & KVM_ARM_TAGS_FROM_GUEST);
1003 int ret = 0;
1004
1005 if (!kvm_has_mte(kvm))
1006 return -EINVAL;
1007
1008 if (copy_tags->reserved[0] || copy_tags->reserved[1])
1009 return -EINVAL;
1010
1011 if (copy_tags->flags & ~KVM_ARM_TAGS_FROM_GUEST)
1012 return -EINVAL;
1013
1014 if (length & ~PAGE_MASK || guest_ipa & ~PAGE_MASK)
1015 return -EINVAL;
1016
1017 /* Lengths above INT_MAX cannot be represented in the return value */
1018 if (length > INT_MAX)
1019 return -EINVAL;
1020
1021 gfn = gpa_to_gfn(guest_ipa);
1022
1023 mutex_lock(&kvm->slots_lock);
1024
1025 while (length > 0) {
1026 kvm_pfn_t pfn = gfn_to_pfn_prot(kvm, gfn, write, NULL);
1027 void *maddr;
1028 unsigned long num_tags;
1029 struct page *page;
1030
1031 if (is_error_noslot_pfn(pfn)) {
1032 ret = -EFAULT;
1033 goto out;
1034 }
1035
1036 page = pfn_to_online_page(pfn);
1037 if (!page) {
1038 /* Reject ZONE_DEVICE memory */
1039 ret = -EFAULT;
1040 goto out;
1041 }
1042 maddr = page_address(page);
1043
1044 if (!write) {
1045 if (test_bit(PG_mte_tagged, &page->flags))
1046 num_tags = mte_copy_tags_to_user(tags, maddr,
1047 MTE_GRANULES_PER_PAGE);
1048 else
1049 /* No tags in memory, so write zeros */
1050 num_tags = MTE_GRANULES_PER_PAGE -
1051 clear_user(tags, MTE_GRANULES_PER_PAGE);
1052 kvm_release_pfn_clean(pfn);
1053 } else {
1054 num_tags = mte_copy_tags_from_user(maddr, tags,
1055 MTE_GRANULES_PER_PAGE);
1056
1057 /*
1058 * Set the flag after checking the write
1059 * completed fully
1060 */
1061 if (num_tags == MTE_GRANULES_PER_PAGE)
1062 set_bit(PG_mte_tagged, &page->flags);
1063
1064 kvm_release_pfn_dirty(pfn);
1065 }
1066
1067 if (num_tags != MTE_GRANULES_PER_PAGE) {
1068 ret = -EFAULT;
1069 goto out;
1070 }
1071
1072 gfn++;
1073 tags += num_tags;
1074 length -= PAGE_SIZE;
1075 }
1076
1077 out:
1078 mutex_unlock(&kvm->slots_lock);
1079 /* If some data has been copied report the number of bytes copied */
1080 if (length != copy_tags->length)
1081 return copy_tags->length - length;
1082 return ret;
1083 }
1084