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