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