xref: /linux/virt/kvm/guest_memfd.c (revision 67f8bc848ee31831336bd478e57d2f993551902e)
1 // SPDX-License-Identifier: GPL-2.0
2 #include <linux/anon_inodes.h>
3 #include <linux/backing-dev.h>
4 #include <linux/falloc.h>
5 #include <linux/fs.h>
6 #include <linux/kvm_host.h>
7 #include <linux/mempolicy.h>
8 #include <linux/pseudo_fs.h>
9 #include <linux/pagemap.h>
10 
11 #include "kvm_mm.h"
12 #include "guest_memfd.h"
13 
14 static struct vfsmount *kvm_gmem_mnt;
15 
16 /*
17  * A guest_memfd instance can be associated multiple VMs, each with its own
18  * "view" of the underlying physical memory.
19  *
20  * The gmem's inode is effectively the raw underlying physical storage, and is
21  * used to track properties of the physical memory, while each gmem file is
22  * effectively a single VM's view of that storage, and is used to track assets
23  * specific to its associated VM, e.g. memslots=>gmem bindings.
24  */
25 struct gmem_file {
26 	struct kvm *kvm;
27 	struct xarray bindings;
28 	struct list_head entry;
29 };
30 
31 struct gmem_inode {
32 	struct shared_policy policy;
33 	struct inode vfs_inode;
34 	struct list_head gmem_file_list;
35 
36 	u64 flags;
37 };
38 
39 static __always_inline struct gmem_inode *GMEM_I(struct inode *inode)
40 {
41 	return container_of(inode, struct gmem_inode, vfs_inode);
42 }
43 
44 #define kvm_gmem_for_each_file(f, inode) \
45 	list_for_each_entry(f, &GMEM_I(inode)->gmem_file_list, entry)
46 
47 /**
48  * folio_file_pfn - like folio_file_page, but return a pfn.
49  * @folio: The folio which contains this index.
50  * @index: The index we want to look up.
51  *
52  * Return: The pfn for this index.
53  */
54 static inline kvm_pfn_t folio_file_pfn(struct folio *folio, pgoff_t index)
55 {
56 	return folio_pfn(folio) + (index & (folio_nr_pages(folio) - 1));
57 }
58 
59 static pgoff_t kvm_gmem_get_index(struct kvm_memory_slot *slot, gfn_t gfn)
60 {
61 	return gfn - slot->base_gfn + slot->gmem.pgoff;
62 }
63 
64 static bool kvm_gmem_is_private_mem(struct inode *inode, pgoff_t index)
65 {
66 	return !(GMEM_I(inode)->flags & GUEST_MEMFD_FLAG_INIT_SHARED);
67 }
68 
69 static bool kvm_gmem_is_shared_mem(struct inode *inode, pgoff_t index)
70 {
71 	return !kvm_gmem_is_private_mem(inode, index);
72 }
73 
74 /*
75  * Returns a locked folio on success.  The caller is responsible for
76  * setting the up-to-date flag before the memory is mapped into the guest.
77  * There is no backing storage for the memory, so the folio will remain
78  * up-to-date until it's removed.
79  *
80  * Ignore accessed, referenced, and dirty flags.  The memory is
81  * unevictable and there is no storage to write back to.
82  */
83 static struct folio *kvm_gmem_get_folio(struct inode *inode, pgoff_t index)
84 {
85 	/* TODO: Support huge pages. */
86 	struct mempolicy *policy;
87 	struct folio *folio;
88 
89 	/*
90 	 * Fast-path: See if folio is already present in mapping to avoid
91 	 * policy_lookup.
92 	 */
93 	folio = filemap_lock_folio(inode->i_mapping, index);
94 	if (!IS_ERR(folio))
95 		return folio;
96 
97 	policy = mpol_shared_policy_lookup(&GMEM_I(inode)->policy, index);
98 	folio = __filemap_get_folio_mpol(inode->i_mapping, index,
99 					 FGP_LOCK | FGP_CREAT,
100 					 mapping_gfp_mask(inode->i_mapping), policy);
101 	mpol_cond_put(policy);
102 
103 	/*
104 	 * External interfaces like kvm_gmem_get_pfn() support dealing
105 	 * with hugepages to a degree, but internally, guest_memfd currently
106 	 * assumes that all folios are order-0 and handling would need
107 	 * to be updated for anything otherwise (e.g. page-clearing
108 	 * operations).
109 	 */
110 	WARN_ON_ONCE(!IS_ERR(folio) && folio_order(folio));
111 
112 	return folio;
113 }
114 
115 static enum kvm_gfn_range_filter kvm_gmem_get_invalidate_filter(struct inode *inode)
116 {
117 	if (GMEM_I(inode)->flags & GUEST_MEMFD_FLAG_INIT_SHARED)
118 		return KVM_FILTER_SHARED;
119 
120 	return KVM_FILTER_PRIVATE;
121 }
122 
123 static void __kvm_gmem_invalidate_start(struct gmem_file *f, pgoff_t start,
124 					pgoff_t end,
125 					enum kvm_gfn_range_filter attr_filter)
126 {
127 	bool flush = false, found_memslot = false;
128 	struct kvm_memory_slot *slot;
129 	struct kvm *kvm = f->kvm;
130 	unsigned long index;
131 
132 	xa_for_each_range(&f->bindings, index, slot, start, end - 1) {
133 		pgoff_t pgoff = slot->gmem.pgoff;
134 
135 		struct kvm_gfn_range gfn_range = {
136 			.start = slot->base_gfn + max(pgoff, start) - pgoff,
137 			.end = slot->base_gfn + min(pgoff + slot->npages, end) - pgoff,
138 			.slot = slot,
139 			.may_block = true,
140 			.attr_filter = attr_filter,
141 		};
142 
143 		if (!found_memslot) {
144 			found_memslot = true;
145 
146 			KVM_MMU_LOCK(kvm);
147 			kvm_mmu_invalidate_start(kvm);
148 		}
149 
150 		flush |= kvm_mmu_unmap_gfn_range(kvm, &gfn_range);
151 
152 #ifdef CONFIG_HAVE_KVM_ARCH_GMEM_INVALIDATE
153 		kvm_arch_gmem_invalidate_range(kvm, &gfn_range);
154 #endif
155 	}
156 
157 	if (flush)
158 		kvm_flush_remote_tlbs(kvm);
159 
160 	if (found_memslot)
161 		KVM_MMU_UNLOCK(kvm);
162 }
163 
164 static void kvm_gmem_invalidate_start(struct inode *inode, pgoff_t start,
165 				      pgoff_t end)
166 {
167 	enum kvm_gfn_range_filter attr_filter;
168 	struct gmem_file *f;
169 
170 	attr_filter = kvm_gmem_get_invalidate_filter(inode);
171 
172 	kvm_gmem_for_each_file(f, inode)
173 		__kvm_gmem_invalidate_start(f, start, end, attr_filter);
174 }
175 
176 static void __kvm_gmem_invalidate_end(struct gmem_file *f, pgoff_t start,
177 				      pgoff_t end)
178 {
179 	struct kvm *kvm = f->kvm;
180 
181 	if (xa_find(&f->bindings, &start, end - 1, XA_PRESENT)) {
182 		KVM_MMU_LOCK(kvm);
183 		kvm_mmu_invalidate_end(kvm);
184 		KVM_MMU_UNLOCK(kvm);
185 	}
186 }
187 
188 static void kvm_gmem_invalidate_end(struct inode *inode, pgoff_t start,
189 				    pgoff_t end)
190 {
191 	struct gmem_file *f;
192 
193 	kvm_gmem_for_each_file(f, inode)
194 		__kvm_gmem_invalidate_end(f, start, end);
195 }
196 
197 static long kvm_gmem_punch_hole(struct inode *inode, loff_t offset, loff_t len)
198 {
199 	pgoff_t start = offset >> PAGE_SHIFT;
200 	pgoff_t end = (offset + len) >> PAGE_SHIFT;
201 
202 	/*
203 	 * Bindings must be stable across invalidation to ensure the start+end
204 	 * are balanced.
205 	 */
206 	filemap_invalidate_lock(inode->i_mapping);
207 
208 	kvm_gmem_invalidate_start(inode, start, end);
209 
210 	truncate_inode_pages_range(inode->i_mapping, offset, offset + len - 1);
211 
212 	kvm_gmem_invalidate_end(inode, start, end);
213 
214 	filemap_invalidate_unlock(inode->i_mapping);
215 
216 	return 0;
217 }
218 
219 static long kvm_gmem_allocate(struct inode *inode, loff_t offset, loff_t len)
220 {
221 	struct address_space *mapping = inode->i_mapping;
222 	pgoff_t start, index, end;
223 	int r;
224 
225 	/* Dedicated guest is immutable by default. */
226 	if (offset + len > i_size_read(inode))
227 		return -EINVAL;
228 
229 	filemap_invalidate_lock_shared(mapping);
230 
231 	start = offset >> PAGE_SHIFT;
232 	end = (offset + len) >> PAGE_SHIFT;
233 
234 	r = 0;
235 	for (index = start; index < end; ) {
236 		struct folio *folio;
237 
238 		if (signal_pending(current)) {
239 			r = -EINTR;
240 			break;
241 		}
242 
243 		folio = kvm_gmem_get_folio(inode, index);
244 		if (IS_ERR(folio)) {
245 			r = PTR_ERR(folio);
246 			break;
247 		}
248 
249 		index = folio_next_index(folio);
250 
251 		folio_unlock(folio);
252 		folio_put(folio);
253 
254 		/* 64-bit only, wrapping the index should be impossible. */
255 		if (WARN_ON_ONCE(!index))
256 			break;
257 
258 		cond_resched();
259 	}
260 
261 	filemap_invalidate_unlock_shared(mapping);
262 
263 	return r;
264 }
265 
266 static long kvm_gmem_fallocate(struct file *file, int mode, loff_t offset,
267 			       loff_t len)
268 {
269 	int ret;
270 
271 	if (!(mode & FALLOC_FL_KEEP_SIZE))
272 		return -EOPNOTSUPP;
273 
274 	if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE))
275 		return -EOPNOTSUPP;
276 
277 	if (!PAGE_ALIGNED(offset) || !PAGE_ALIGNED(len))
278 		return -EINVAL;
279 
280 	if (mode & FALLOC_FL_PUNCH_HOLE)
281 		ret = kvm_gmem_punch_hole(file_inode(file), offset, len);
282 	else
283 		ret = kvm_gmem_allocate(file_inode(file), offset, len);
284 
285 	if (!ret)
286 		file_modified(file);
287 	return ret;
288 }
289 
290 static int kvm_gmem_release(struct inode *inode, struct file *file)
291 {
292 	struct gmem_file *f = file->private_data;
293 	struct kvm_memory_slot *slot;
294 	struct kvm *kvm = f->kvm;
295 	unsigned long index;
296 
297 	/*
298 	 * Prevent concurrent attempts to *unbind* a memslot.  This is the last
299 	 * reference to the file and thus no new bindings can be created, but
300 	 * dereferencing the slot for existing bindings needs to be protected
301 	 * against memslot updates, specifically so that unbind doesn't race
302 	 * and free the memslot (kvm_gmem_get_file() will return NULL).
303 	 *
304 	 * Since .release is called only when the reference count is zero,
305 	 * after which file_ref_get() and get_file_active() fail,
306 	 * kvm_gmem_get_pfn() cannot be using the file concurrently.
307 	 * file_ref_put() provides a full barrier, and get_file_active() the
308 	 * matching acquire barrier.
309 	 */
310 	mutex_lock(&kvm->slots_lock);
311 
312 	filemap_invalidate_lock(inode->i_mapping);
313 
314 	xa_for_each(&f->bindings, index, slot)
315 		WRITE_ONCE(slot->gmem.file, NULL);
316 
317 	/*
318 	 * All in-flight operations are gone and new bindings can be created.
319 	 * Zap all SPTEs pointed at by this file.  Do not free the backing
320 	 * memory, as its lifetime is associated with the inode, not the file.
321 	 */
322 	__kvm_gmem_invalidate_start(f, 0, -1ul,
323 				    kvm_gmem_get_invalidate_filter(inode));
324 	__kvm_gmem_invalidate_end(f, 0, -1ul);
325 
326 	list_del(&f->entry);
327 
328 	filemap_invalidate_unlock(inode->i_mapping);
329 
330 	mutex_unlock(&kvm->slots_lock);
331 
332 	xa_destroy(&f->bindings);
333 	kfree(f);
334 
335 	kvm_put_kvm(kvm);
336 
337 	return 0;
338 }
339 
340 static inline struct file *kvm_gmem_get_file(struct kvm_memory_slot *slot)
341 {
342 	/*
343 	 * Do not return slot->gmem.file if it has already been closed;
344 	 * there might be some time between the last fput() and when
345 	 * kvm_gmem_release() clears slot->gmem.file.
346 	 */
347 	return get_file_active(&slot->gmem.file);
348 }
349 
350 DEFINE_CLASS(gmem_get_file, struct file *, if (_T) fput(_T),
351 	     kvm_gmem_get_file(slot), struct kvm_memory_slot *slot);
352 
353 static bool kvm_gmem_supports_mmap(struct inode *inode)
354 {
355 	return GMEM_I(inode)->flags & GUEST_MEMFD_FLAG_MMAP;
356 }
357 
358 static vm_fault_t kvm_gmem_fault_user_mapping(struct vm_fault *vmf)
359 {
360 	struct inode *inode = file_inode(vmf->vma->vm_file);
361 	struct folio *folio;
362 	vm_fault_t ret = VM_FAULT_LOCKED;
363 
364 	if (((loff_t)vmf->pgoff << PAGE_SHIFT) >= i_size_read(inode))
365 		return VM_FAULT_SIGBUS;
366 
367 	if (!kvm_gmem_is_shared_mem(inode, vmf->pgoff))
368 		return VM_FAULT_SIGBUS;
369 
370 	folio = kvm_gmem_get_folio(inode, vmf->pgoff);
371 	if (IS_ERR(folio)) {
372 		if (PTR_ERR(folio) == -EAGAIN)
373 			return VM_FAULT_RETRY;
374 
375 		return vmf_error(PTR_ERR(folio));
376 	}
377 
378 	if (WARN_ON_ONCE(folio_test_large(folio))) {
379 		ret = VM_FAULT_SIGBUS;
380 		goto out_folio;
381 	}
382 
383 	if (!folio_test_uptodate(folio)) {
384 		clear_highpage(folio_page(folio, 0));
385 		folio_mark_uptodate(folio);
386 	}
387 
388 	vmf->page = folio_file_page(folio, vmf->pgoff);
389 
390 out_folio:
391 	if (ret != VM_FAULT_LOCKED) {
392 		folio_unlock(folio);
393 		folio_put(folio);
394 	}
395 
396 	return ret;
397 }
398 
399 #ifdef CONFIG_NUMA
400 static int kvm_gmem_set_policy(struct vm_area_struct *vma, struct mempolicy *mpol)
401 {
402 	struct inode *inode = file_inode(vma->vm_file);
403 
404 	return mpol_set_shared_policy(&GMEM_I(inode)->policy, vma, mpol);
405 }
406 
407 static struct mempolicy *kvm_gmem_get_policy(struct vm_area_struct *vma,
408 					     unsigned long addr, pgoff_t *ilx)
409 {
410 	pgoff_t pgoff = linear_page_index(vma, addr);
411 	struct inode *inode = file_inode(vma->vm_file);
412 
413 	*ilx = inode->i_ino;
414 
415 	/*
416 	 * Return the memory policy for this index, or NULL if none is set.
417 	 *
418 	 * Returning NULL, e.g. instead of the current task's memory policy, is
419 	 * important for the .get_policy kernel ABI: it indicates that no
420 	 * explicit policy has been set via mbind() for this memory. The caller
421 	 * can then replace NULL with the default memory policy instead of the
422 	 * current task's memory policy.
423 	 */
424 	return mpol_shared_policy_lookup(&GMEM_I(inode)->policy, pgoff);
425 }
426 #endif /* CONFIG_NUMA */
427 
428 static const struct vm_operations_struct kvm_gmem_vm_ops = {
429 	.fault		= kvm_gmem_fault_user_mapping,
430 #ifdef CONFIG_NUMA
431 	.get_policy	= kvm_gmem_get_policy,
432 	.set_policy	= kvm_gmem_set_policy,
433 #endif
434 };
435 
436 static int kvm_gmem_mmap(struct file *file, struct vm_area_struct *vma)
437 {
438 	if (!kvm_gmem_supports_mmap(file_inode(file)))
439 		return -ENODEV;
440 
441 	if ((vma->vm_flags & (VM_SHARED | VM_MAYSHARE)) !=
442 	    (VM_SHARED | VM_MAYSHARE)) {
443 		return -EINVAL;
444 	}
445 
446 	vma->vm_ops = &kvm_gmem_vm_ops;
447 
448 	return 0;
449 }
450 
451 static struct file_operations kvm_gmem_fops = {
452 	.mmap		= kvm_gmem_mmap,
453 	.open		= generic_file_open,
454 	.release	= kvm_gmem_release,
455 	.fallocate	= kvm_gmem_fallocate,
456 };
457 
458 static int kvm_gmem_migrate_folio(struct address_space *mapping,
459 				  struct folio *dst, struct folio *src,
460 				  enum migrate_mode mode)
461 {
462 	WARN_ON_ONCE(1);
463 	return -EINVAL;
464 }
465 
466 static int kvm_gmem_error_folio(struct address_space *mapping, struct folio *folio)
467 {
468 	pgoff_t start, end;
469 
470 	filemap_invalidate_lock_shared(mapping);
471 
472 	start = folio->index;
473 	end = start + folio_nr_pages(folio);
474 
475 	kvm_gmem_invalidate_start(mapping->host, start, end);
476 
477 	/*
478 	 * Do not truncate the range, what action is taken in response to the
479 	 * error is userspace's decision (assuming the architecture supports
480 	 * gracefully handling memory errors).  If/when the guest attempts to
481 	 * access a poisoned page, kvm_gmem_get_pfn() will return -EHWPOISON,
482 	 * at which point KVM can either terminate the VM or propagate the
483 	 * error to userspace.
484 	 */
485 
486 	kvm_gmem_invalidate_end(mapping->host, start, end);
487 
488 	filemap_invalidate_unlock_shared(mapping);
489 
490 	return MF_DELAYED;
491 }
492 
493 #ifdef CONFIG_HAVE_KVM_ARCH_GMEM_RECLAIM
494 static void kvm_gmem_free_folio(struct folio *folio)
495 {
496 	kvm_arch_gmem_reclaim(folio_file_pfn(folio, 0), folio_nr_pages(folio));
497 }
498 #endif
499 
500 static const struct address_space_operations kvm_gmem_aops = {
501 	.dirty_folio = noop_dirty_folio,
502 	.migrate_folio	= kvm_gmem_migrate_folio,
503 	.error_remove_folio = kvm_gmem_error_folio,
504 #ifdef CONFIG_HAVE_KVM_ARCH_GMEM_RECLAIM
505 	.free_folio = kvm_gmem_free_folio,
506 #endif
507 };
508 
509 static int kvm_gmem_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
510 			    struct iattr *attr)
511 {
512 	return -EINVAL;
513 }
514 static const struct inode_operations kvm_gmem_iops = {
515 	.setattr	= kvm_gmem_setattr,
516 };
517 
518 bool __weak kvm_arch_supports_gmem_init_shared(struct kvm *kvm)
519 {
520 	return true;
521 }
522 
523 static int __kvm_gmem_create(struct kvm *kvm, loff_t size, u64 flags)
524 {
525 	static const char *name = "[kvm-gmem]";
526 	struct gmem_file *f;
527 	struct inode *inode;
528 	struct file *file;
529 	int fd, err;
530 
531 	fd = get_unused_fd_flags(0);
532 	if (fd < 0)
533 		return fd;
534 
535 	f = kzalloc_obj(*f);
536 	if (!f) {
537 		err = -ENOMEM;
538 		goto err_fd;
539 	}
540 
541 	/* __fput() will take care of fops_put(). */
542 	if (!fops_get(&kvm_gmem_fops)) {
543 		err = -ENOENT;
544 		goto err_gmem;
545 	}
546 
547 	inode = anon_inode_make_secure_inode(kvm_gmem_mnt->mnt_sb, name, NULL);
548 	if (IS_ERR(inode)) {
549 		err = PTR_ERR(inode);
550 		goto err_fops;
551 	}
552 
553 	inode->i_op = &kvm_gmem_iops;
554 	inode->i_mapping->a_ops = &kvm_gmem_aops;
555 	inode->i_mode |= S_IFREG;
556 	inode->i_size = size;
557 	mapping_set_gfp_mask(inode->i_mapping, GFP_HIGHUSER);
558 	mapping_set_inaccessible(inode->i_mapping);
559 	/* Unmovable mappings are supposed to be marked unevictable as well. */
560 	WARN_ON_ONCE(!mapping_unevictable(inode->i_mapping));
561 
562 	GMEM_I(inode)->flags = flags;
563 
564 	file = alloc_file_pseudo(inode, kvm_gmem_mnt, name, O_RDWR, &kvm_gmem_fops);
565 	if (IS_ERR(file)) {
566 		err = PTR_ERR(file);
567 		goto err_inode;
568 	}
569 
570 	file->f_flags |= O_LARGEFILE;
571 	file->private_data = f;
572 
573 	kvm_get_kvm(kvm);
574 	f->kvm = kvm;
575 	xa_init(&f->bindings);
576 	list_add(&f->entry, &GMEM_I(inode)->gmem_file_list);
577 
578 	fd_install(fd, file);
579 	return fd;
580 
581 err_inode:
582 	iput(inode);
583 err_fops:
584 	fops_put(&kvm_gmem_fops);
585 err_gmem:
586 	kfree(f);
587 err_fd:
588 	put_unused_fd(fd);
589 	return err;
590 }
591 
592 int kvm_gmem_create(struct kvm *kvm, struct kvm_create_guest_memfd *args)
593 {
594 	loff_t size = args->size;
595 	u64 flags = args->flags;
596 
597 	if (flags & ~kvm_gmem_get_supported_flags(kvm))
598 		return -EINVAL;
599 
600 	if (size <= 0 || !PAGE_ALIGNED(size))
601 		return -EINVAL;
602 
603 	return __kvm_gmem_create(kvm, size, flags);
604 }
605 
606 int kvm_gmem_bind(struct kvm *kvm, struct kvm_memory_slot *slot,
607 		  unsigned int fd, uoff_t offset)
608 {
609 	uoff_t size = slot->npages << PAGE_SHIFT;
610 	unsigned long start, end;
611 	struct gmem_file *f;
612 	struct inode *inode;
613 	struct file *file;
614 	int r = -EINVAL;
615 
616 	BUILD_BUG_ON(sizeof(gpa_t) != sizeof(offset));
617 	BUILD_BUG_ON(sizeof(gfn_t) != sizeof(slot->gmem.pgoff));
618 
619 	file = fget(fd);
620 	if (!file)
621 		return -EBADF;
622 
623 	if (file->f_op != &kvm_gmem_fops)
624 		goto err;
625 
626 	f = file->private_data;
627 	if (f->kvm != kvm)
628 		goto err;
629 
630 	inode = file_inode(file);
631 
632 	if (!PAGE_ALIGNED(offset) || offset + size > i_size_read(inode))
633 		goto err;
634 
635 	filemap_invalidate_lock(inode->i_mapping);
636 
637 	start = offset >> PAGE_SHIFT;
638 	end = start + slot->npages;
639 
640 	if (!xa_empty(&f->bindings) &&
641 	    xa_find(&f->bindings, &start, end - 1, XA_PRESENT)) {
642 		r = -EEXIST;
643 		filemap_invalidate_unlock(inode->i_mapping);
644 		goto err;
645 	}
646 
647 	/*
648 	 * memslots of flag KVM_MEM_GUEST_MEMFD are immutable to change, so
649 	 * kvm_gmem_bind() must occur on a new memslot.  Because the memslot
650 	 * is not visible yet, kvm_gmem_get_pfn() is guaranteed to see the file.
651 	 */
652 	WRITE_ONCE(slot->gmem.file, file);
653 	slot->gmem.pgoff = start;
654 	if (kvm_gmem_supports_mmap(inode))
655 		slot->flags |= KVM_MEMSLOT_GMEM_ONLY;
656 
657 	xa_store_range(&f->bindings, start, end - 1, slot, GFP_KERNEL);
658 	filemap_invalidate_unlock(inode->i_mapping);
659 
660 	/*
661 	 * Drop the reference to the file, even on success.  The file pins KVM,
662 	 * not the other way 'round.  Active bindings are invalidated if the
663 	 * file is closed before memslots are destroyed.
664 	 */
665 	r = 0;
666 err:
667 	fput(file);
668 	return r;
669 }
670 
671 static void __kvm_gmem_unbind(struct kvm_memory_slot *slot, struct gmem_file *f)
672 {
673 	unsigned long start = slot->gmem.pgoff;
674 	unsigned long end = start + slot->npages;
675 
676 	xa_store_range(&f->bindings, start, end - 1, NULL, GFP_KERNEL);
677 
678 	/*
679 	 * synchronize_srcu(&kvm->srcu) ensured that kvm_gmem_get_pfn()
680 	 * cannot see this memslot.
681 	 */
682 	WRITE_ONCE(slot->gmem.file, NULL);
683 }
684 
685 void kvm_gmem_unbind(struct kvm_memory_slot *slot)
686 {
687 	/*
688 	 * Nothing to do if the underlying file was _already_ closed, as
689 	 * kvm_gmem_release() invalidates and nullifies all bindings.
690 	 */
691 	if (!slot->gmem.file)
692 		return;
693 
694 	CLASS(gmem_get_file, file)(slot);
695 
696 	/*
697 	 * However, if the file is _being_ closed, then the bindings need to be
698 	 * removed as kvm_gmem_release() might not run until after the memslot
699 	 * is freed.  Note, modifying the bindings is safe even though the file
700 	 * is dying as kvm_gmem_release() nullifies slot->gmem.file under
701 	 * slots_lock, and only puts its reference to KVM after destroying all
702 	 * bindings.  I.e. reaching this point means kvm_gmem_release() hasn't
703 	 * yet destroyed the bindings or freed the gmem_file, and can't do so
704 	 * until the caller drops slots_lock.
705 	 */
706 	if (!file) {
707 		__kvm_gmem_unbind(slot, slot->gmem.file->private_data);
708 		return;
709 	}
710 
711 	filemap_invalidate_lock(file->f_mapping);
712 	__kvm_gmem_unbind(slot, file->private_data);
713 	filemap_invalidate_unlock(file->f_mapping);
714 }
715 
716 /* Returns a locked folio on success.  */
717 static struct folio *__kvm_gmem_get_pfn(struct file *file,
718 					struct kvm_memory_slot *slot,
719 					pgoff_t index, kvm_pfn_t *pfn,
720 					int *max_order)
721 {
722 	struct file *slot_file = READ_ONCE(slot->gmem.file);
723 	struct gmem_file *f = file->private_data;
724 	struct folio *folio;
725 
726 	if (file != slot_file) {
727 		WARN_ON_ONCE(slot_file);
728 		return ERR_PTR(-EFAULT);
729 	}
730 
731 	if (xa_load(&f->bindings, index) != slot) {
732 		WARN_ON_ONCE(xa_load(&f->bindings, index));
733 		return ERR_PTR(-EIO);
734 	}
735 
736 	folio = kvm_gmem_get_folio(file_inode(file), index);
737 	if (IS_ERR(folio))
738 		return folio;
739 
740 	if (folio_test_hwpoison(folio)) {
741 		folio_unlock(folio);
742 		folio_put(folio);
743 		return ERR_PTR(-EHWPOISON);
744 	}
745 
746 	*pfn = folio_file_pfn(folio, index);
747 	if (max_order)
748 		*max_order = 0;
749 
750 	return folio;
751 }
752 
753 int kvm_gmem_get_pfn(struct kvm *kvm, struct kvm_memory_slot *slot,
754 		     gfn_t gfn, kvm_pfn_t *pfn, struct page **page,
755 		     int *max_order)
756 {
757 	pgoff_t index = kvm_gmem_get_index(slot, gfn);
758 	struct folio *folio;
759 	int r = 0, __order;
760 
761 	max_order = max_order ?: &__order;
762 
763 	CLASS(gmem_get_file, file)(slot);
764 	if (!file)
765 		return -EFAULT;
766 
767 	folio = __kvm_gmem_get_pfn(file, slot, index, pfn, max_order);
768 	if (IS_ERR(folio))
769 		return PTR_ERR(folio);
770 
771 	if (!folio_test_uptodate(folio)) {
772 		clear_highpage(folio_page(folio, 0));
773 		folio_mark_uptodate(folio);
774 	}
775 
776 #ifdef CONFIG_HAVE_KVM_ARCH_GMEM_CONVERT
777 	if (kvm_gmem_is_private_mem(file_inode(file), index))
778 		r = kvm_arch_gmem_make_private(kvm, gfn, *pfn,
779 					       (kvm_pfn_t)1 << *max_order);
780 #endif
781 
782 	folio_unlock(folio);
783 
784 	if (!r)
785 		*page = folio_file_page(folio, index);
786 	else
787 		folio_put(folio);
788 
789 	return r;
790 }
791 EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_gmem_get_pfn);
792 
793 #ifdef CONFIG_HAVE_KVM_ARCH_GMEM_POPULATE
794 
795 static long __kvm_gmem_populate(struct kvm *kvm, struct kvm_memory_slot *slot,
796 				struct file *file, gfn_t gfn, struct page *src_page,
797 				kvm_gmem_populate_cb post_populate, void *opaque)
798 {
799 	pgoff_t index = kvm_gmem_get_index(slot, gfn);
800 	struct folio *folio;
801 	kvm_pfn_t pfn;
802 	int ret;
803 
804 	filemap_invalidate_lock(file->f_mapping);
805 
806 	folio = __kvm_gmem_get_pfn(file, slot, index, &pfn, NULL);
807 	if (IS_ERR(folio)) {
808 		ret = PTR_ERR(folio);
809 		goto out_unlock;
810 	}
811 
812 	folio_unlock(folio);
813 
814 	if (!kvm_range_has_memory_attributes(kvm, gfn, gfn + 1,
815 					     KVM_MEMORY_ATTRIBUTE_PRIVATE,
816 					     KVM_MEMORY_ATTRIBUTE_PRIVATE)) {
817 		ret = -EINVAL;
818 		goto out_put_folio;
819 	}
820 
821 	ret = post_populate(kvm, gfn, pfn, src_page, opaque);
822 	if (!ret)
823 		folio_mark_uptodate(folio);
824 
825 out_put_folio:
826 	folio_put(folio);
827 out_unlock:
828 	filemap_invalidate_unlock(file->f_mapping);
829 	return ret;
830 }
831 
832 long kvm_gmem_populate(struct kvm *kvm, gfn_t start_gfn, void __user *src,
833 		       long npages, bool may_writeback_src,
834 		       kvm_gmem_populate_cb post_populate, void *opaque)
835 {
836 	struct kvm_memory_slot *slot;
837 	int ret = 0;
838 	long i;
839 
840 	lockdep_assert_held(&kvm->slots_lock);
841 
842 	if (WARN_ON_ONCE(npages <= 0))
843 		return -EINVAL;
844 
845 	if (WARN_ON_ONCE(!PAGE_ALIGNED(src)))
846 		return -EINVAL;
847 
848 	slot = gfn_to_memslot(kvm, start_gfn);
849 	if (!kvm_slot_has_gmem(slot))
850 		return -EINVAL;
851 
852 	CLASS(gmem_get_file, file)(slot);
853 	if (!file)
854 		return -EFAULT;
855 
856 	npages = min_t(ulong, slot->npages - (start_gfn - slot->base_gfn), npages);
857 	for (i = 0; i < npages; i++) {
858 		struct page *src_page = NULL;
859 
860 		if (signal_pending(current)) {
861 			ret = -EINTR;
862 			break;
863 		}
864 
865 		if (src) {
866 			unsigned long uaddr = (unsigned long)src + i * PAGE_SIZE;
867 			unsigned int flags = may_writeback_src ? FOLL_WRITE : 0;
868 
869 			ret = get_user_pages_fast(uaddr, 1, flags, &src_page);
870 			if (ret < 0)
871 				break;
872 			if (ret != 1) {
873 				ret = -ENOMEM;
874 				break;
875 			}
876 		}
877 
878 		ret = __kvm_gmem_populate(kvm, slot, file, start_gfn + i, src_page,
879 					  post_populate, opaque);
880 
881 		if (src_page)
882 			put_page(src_page);
883 
884 		if (ret)
885 			break;
886 	}
887 
888 	return ret && !i ? ret : i;
889 }
890 EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_gmem_populate);
891 #endif
892 
893 static struct kmem_cache *kvm_gmem_inode_cachep;
894 
895 static void kvm_gmem_init_inode_once(void *__gi)
896 {
897 	struct gmem_inode *gi = __gi;
898 
899 	/*
900 	 * Note!  Don't initialize the inode with anything specific to the
901 	 * guest_memfd instance, or that might be specific to how the inode is
902 	 * used (from the VFS-layer's perspective).  This hook is called only
903 	 * during the initial slab allocation, i.e. only fields/state that are
904 	 * idempotent across _all_ use of the inode _object_ can be initialized
905 	 * at this time!
906 	 */
907 	inode_init_once(&gi->vfs_inode);
908 }
909 
910 static struct inode *kvm_gmem_alloc_inode(struct super_block *sb)
911 {
912 	struct gmem_inode *gi;
913 
914 	gi = alloc_inode_sb(sb, kvm_gmem_inode_cachep, GFP_KERNEL);
915 	if (!gi)
916 		return NULL;
917 
918 	mpol_shared_policy_init(&gi->policy, NULL);
919 
920 	gi->flags = 0;
921 	INIT_LIST_HEAD(&gi->gmem_file_list);
922 	return &gi->vfs_inode;
923 }
924 
925 static void kvm_gmem_destroy_inode(struct inode *inode)
926 {
927 	mpol_free_shared_policy(&GMEM_I(inode)->policy);
928 }
929 
930 static void kvm_gmem_free_inode(struct inode *inode)
931 {
932 	kmem_cache_free(kvm_gmem_inode_cachep, GMEM_I(inode));
933 }
934 
935 static const struct super_operations kvm_gmem_super_operations = {
936 	.statfs		= simple_statfs,
937 	.alloc_inode	= kvm_gmem_alloc_inode,
938 	.destroy_inode	= kvm_gmem_destroy_inode,
939 	.free_inode	= kvm_gmem_free_inode,
940 };
941 
942 static int kvm_gmem_init_fs_context(struct fs_context *fc)
943 {
944 	struct pseudo_fs_context *ctx;
945 
946 	if (!init_pseudo(fc, GUEST_MEMFD_MAGIC))
947 		return -ENOMEM;
948 
949 	ctx = fc->fs_private;
950 	ctx->ops = &kvm_gmem_super_operations;
951 
952 	return 0;
953 }
954 
955 static struct file_system_type kvm_gmem_fs = {
956 	.name		 = "guest_memfd",
957 	.init_fs_context = kvm_gmem_init_fs_context,
958 	.kill_sb	 = kill_anon_super,
959 };
960 
961 static int kvm_gmem_init_mount(void)
962 {
963 	kvm_gmem_mnt = kern_mount(&kvm_gmem_fs);
964 
965 	if (IS_ERR(kvm_gmem_mnt))
966 		return PTR_ERR(kvm_gmem_mnt);
967 
968 	kvm_gmem_mnt->mnt_flags |= MNT_NOEXEC;
969 	return 0;
970 }
971 
972 int kvm_gmem_init(struct module *module)
973 {
974 	struct kmem_cache_args args = {
975 		.align = 0,
976 		.ctor = kvm_gmem_init_inode_once,
977 	};
978 	int ret;
979 
980 	kvm_gmem_fops.owner = module;
981 	kvm_gmem_inode_cachep = kmem_cache_create("kvm_gmem_inode_cache",
982 						  sizeof(struct gmem_inode),
983 						  &args, SLAB_ACCOUNT);
984 	if (!kvm_gmem_inode_cachep)
985 		return -ENOMEM;
986 
987 	ret = kvm_gmem_init_mount();
988 	if (ret) {
989 		kmem_cache_destroy(kvm_gmem_inode_cachep);
990 		return ret;
991 	}
992 	return 0;
993 }
994 
995 void kvm_gmem_exit(void)
996 {
997 	kern_unmount(kvm_gmem_mnt);
998 	kvm_gmem_mnt = NULL;
999 	rcu_barrier();
1000 	kmem_cache_destroy(kvm_gmem_inode_cachep);
1001 }
1002