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