1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * NTFS kernel inode handling. 4 * 5 * Copyright (c) 2001-2014 Anton Altaparmakov and Tuxera Inc. 6 * Copyright (c) 2025 LG Electronics Co., Ltd. 7 */ 8 9 #include <linux/writeback.h> 10 #include <linux/seq_file.h> 11 12 #include "lcnalloc.h" 13 #include "time.h" 14 #include "ntfs.h" 15 #include "index.h" 16 #include "attrlist.h" 17 #include "reparse.h" 18 #include "ea.h" 19 #include "attrib.h" 20 #include "iomap.h" 21 #include "object_id.h" 22 23 /* 24 * ntfs_test_inode - compare two (possibly fake) inodes for equality 25 * @vi: vfs inode which to test 26 * @data: data which is being tested with 27 * 28 * Compare the ntfs attribute embedded in the ntfs specific part of the vfs 29 * inode @vi for equality with the ntfs attribute @data. 30 * 31 * If searching for the normal file/directory inode, set @na->type to AT_UNUSED. 32 * @na->name and @na->name_len are then ignored. 33 * 34 * Return 1 if the attributes match and 0 if not. 35 * 36 * NOTE: This function runs with the inode_hash_lock spin lock held so it is not 37 * allowed to sleep. 38 */ 39 int ntfs_test_inode(struct inode *vi, void *data) 40 { 41 struct ntfs_attr *na = data; 42 struct ntfs_inode *ni = NTFS_I(vi); 43 44 if (vi->i_ino != na->mft_no) 45 return 0; 46 47 /* If !NInoAttr(ni), @vi is a normal file or directory inode. */ 48 if (likely(!NInoAttr(ni))) { 49 /* If not looking for a normal inode this is a mismatch. */ 50 if (unlikely(na->type != AT_UNUSED)) 51 return 0; 52 } else { 53 /* A fake inode describing an attribute. */ 54 if (ni->type != na->type) 55 return 0; 56 if (ni->name_len != na->name_len) 57 return 0; 58 if (na->name_len && memcmp(ni->name, na->name, 59 na->name_len * sizeof(__le16))) 60 return 0; 61 if (!ni->ext.base_ntfs_ino) 62 return 0; 63 } 64 65 /* Match! */ 66 return 1; 67 } 68 69 /* 70 * ntfs_init_locked_inode - initialize an inode 71 * @vi: vfs inode to initialize 72 * @data: data which to initialize @vi to 73 * 74 * Initialize the vfs inode @vi with the values from the ntfs attribute @data in 75 * order to enable ntfs_test_inode() to do its work. 76 * 77 * If initializing the normal file/directory inode, set @na->type to AT_UNUSED. 78 * In that case, @na->name and @na->name_len should be set to NULL and 0, 79 * respectively. Although that is not strictly necessary as 80 * ntfs_read_locked_inode() will fill them in later. 81 * 82 * Return 0 on success and error. 83 * 84 * NOTE: This function runs with the inode->i_lock spin lock held so it is not 85 * allowed to sleep. (Hence the GFP_ATOMIC allocation.) 86 */ 87 static int ntfs_init_locked_inode(struct inode *vi, void *data) 88 { 89 struct ntfs_attr *na = data; 90 struct ntfs_inode *ni = NTFS_I(vi); 91 92 vi->i_ino = (unsigned long)na->mft_no; 93 94 if (na->type == AT_INDEX_ALLOCATION) 95 NInoSetMstProtected(ni); 96 else 97 ni->type = na->type; 98 99 ni->name = na->name; 100 ni->name_len = na->name_len; 101 ni->folio = NULL; 102 atomic_set(&ni->count, 1); 103 104 /* If initializing a normal inode, we are done. */ 105 if (likely(na->type == AT_UNUSED)) 106 return 0; 107 108 /* It is a fake inode. */ 109 NInoSetAttr(ni); 110 111 /* 112 * We have I30 global constant as an optimization as it is the name 113 * in >99.9% of named attributes! The other <0.1% incur a GFP_ATOMIC 114 * allocation but that is ok. And most attributes are unnamed anyway, 115 * thus the fraction of named attributes with name != I30 is actually 116 * absolutely tiny. 117 */ 118 if (na->name_len && na->name != I30) { 119 unsigned int i; 120 121 i = na->name_len * sizeof(__le16); 122 ni->name = kmalloc(i + sizeof(__le16), GFP_ATOMIC); 123 if (!ni->name) 124 return -ENOMEM; 125 memcpy(ni->name, na->name, i); 126 ni->name[na->name_len] = 0; 127 } 128 return 0; 129 } 130 131 static int ntfs_read_locked_inode(struct inode *vi); 132 static int ntfs_read_locked_attr_inode(struct inode *base_vi, struct inode *vi); 133 static int ntfs_read_locked_index_inode(struct inode *base_vi, 134 struct inode *vi); 135 136 /* 137 * ntfs_iget - obtain a struct inode corresponding to a specific normal inode 138 * @sb: super block of mounted volume 139 * @mft_no: mft record number / inode number to obtain 140 * 141 * Obtain the struct inode corresponding to a specific normal inode (i.e. a 142 * file or directory). 143 * 144 * If the inode is in the cache, it is just returned with an increased 145 * reference count. Otherwise, a new struct inode is allocated and initialized, 146 * and finally ntfs_read_locked_inode() is called to read in the inode and 147 * fill in the remainder of the inode structure. 148 * 149 * Return the struct inode on success. Check the return value with IS_ERR() and 150 * if true, the function failed and the error code is obtained from PTR_ERR(). 151 */ 152 struct inode *ntfs_iget(struct super_block *sb, u64 mft_no) 153 { 154 struct inode *vi; 155 int err; 156 struct ntfs_attr na; 157 158 na.mft_no = mft_no; 159 na.type = AT_UNUSED; 160 na.name = NULL; 161 na.name_len = 0; 162 163 vi = iget5_locked(sb, mft_no, ntfs_test_inode, 164 ntfs_init_locked_inode, &na); 165 if (unlikely(!vi)) 166 return ERR_PTR(-ENOMEM); 167 168 err = 0; 169 170 /* If this is a freshly allocated inode, need to read it now. */ 171 if (inode_state_read_once(vi) & I_NEW) { 172 err = ntfs_read_locked_inode(vi); 173 if (err) { 174 remove_inode_hash(vi); 175 discard_new_inode(vi); 176 } else 177 unlock_new_inode(vi); 178 } 179 /* 180 * There is no point in keeping bad inodes around. This also 181 * simplifies things in that we never need to check for bad inodes 182 * elsewhere. 183 */ 184 if (unlikely(err)) 185 vi = ERR_PTR(err); 186 return vi; 187 } 188 189 /* 190 * ntfs_attr_iget - obtain a struct inode corresponding to an attribute 191 * @base_vi: vfs base inode containing the attribute 192 * @type: attribute type 193 * @name: Unicode name of the attribute (NULL if unnamed) 194 * @name_len: length of @name in Unicode characters (0 if unnamed) 195 * 196 * Obtain the (fake) struct inode corresponding to the attribute specified by 197 * @type, @name, and @name_len, which is present in the base mft record 198 * specified by the vfs inode @base_vi. 199 * 200 * If the attribute inode is in the cache, it is just returned with an 201 * increased reference count. Otherwise, a new struct inode is allocated and 202 * initialized, and finally ntfs_read_locked_attr_inode() is called to read the 203 * attribute and fill in the inode structure. 204 * 205 * Note, for index allocation attributes, you need to use ntfs_index_iget() 206 * instead of ntfs_attr_iget() as working with indices is a lot more complex. 207 * 208 * Return the struct inode of the attribute inode on success. Check the return 209 * value with IS_ERR() and if true, the function failed and the error code is 210 * obtained from PTR_ERR(). 211 */ 212 struct inode *ntfs_attr_iget(struct inode *base_vi, __le32 type, 213 __le16 *name, u32 name_len) 214 { 215 struct inode *vi; 216 int err; 217 struct ntfs_attr na; 218 219 /* Make sure no one calls ntfs_attr_iget() for indices. */ 220 WARN_ON(type == AT_INDEX_ALLOCATION); 221 222 na.mft_no = base_vi->i_ino; 223 na.type = type; 224 na.name = name; 225 na.name_len = name_len; 226 227 vi = iget5_locked(base_vi->i_sb, na.mft_no, ntfs_test_inode, 228 ntfs_init_locked_inode, &na); 229 if (unlikely(!vi)) 230 return ERR_PTR(-ENOMEM); 231 err = 0; 232 233 /* If this is a freshly allocated inode, need to read it now. */ 234 if (inode_state_read_once(vi) & I_NEW) { 235 err = ntfs_read_locked_attr_inode(base_vi, vi); 236 if (err) { 237 remove_inode_hash(vi); 238 discard_new_inode(vi); 239 } else 240 unlock_new_inode(vi); 241 } 242 /* 243 * There is no point in keeping bad attribute inodes around. This also 244 * simplifies things in that we never need to check for bad attribute 245 * inodes elsewhere. 246 */ 247 if (unlikely(err)) 248 vi = ERR_PTR(err); 249 return vi; 250 } 251 252 /* 253 * ntfs_index_iget - obtain a struct inode corresponding to an index 254 * @base_vi: vfs base inode containing the index related attributes 255 * @name: Unicode name of the index 256 * @name_len: length of @name in Unicode characters 257 * 258 * Obtain the (fake) struct inode corresponding to the index specified by @name 259 * and @name_len, which is present in the base mft record specified by the vfs 260 * inode @base_vi. 261 * 262 * If the index inode is in the cache, it is just returned with an increased 263 * reference count. Otherwise, a new struct inode is allocated and 264 * initialized, and finally ntfs_read_locked_index_inode() is called to read 265 * the index related attributes and fill in the inode structure. 266 * 267 * Return the struct inode of the index inode on success. Check the return 268 * value with IS_ERR() and if true, the function failed and the error code is 269 * obtained from PTR_ERR(). 270 */ 271 struct inode *ntfs_index_iget(struct inode *base_vi, __le16 *name, 272 u32 name_len) 273 { 274 struct inode *vi; 275 int err; 276 struct ntfs_attr na; 277 278 na.mft_no = base_vi->i_ino; 279 na.type = AT_INDEX_ALLOCATION; 280 na.name = name; 281 na.name_len = name_len; 282 283 vi = iget5_locked(base_vi->i_sb, na.mft_no, ntfs_test_inode, 284 ntfs_init_locked_inode, &na); 285 if (unlikely(!vi)) 286 return ERR_PTR(-ENOMEM); 287 288 err = 0; 289 290 /* If this is a freshly allocated inode, need to read it now. */ 291 if (inode_state_read_once(vi) & I_NEW) { 292 err = ntfs_read_locked_index_inode(base_vi, vi); 293 if (err) { 294 remove_inode_hash(vi); 295 discard_new_inode(vi); 296 } else 297 unlock_new_inode(vi); 298 } 299 /* 300 * There is no point in keeping bad index inodes around. This also 301 * simplifies things in that we never need to check for bad index 302 * inodes elsewhere. 303 */ 304 if (unlikely(err)) 305 vi = ERR_PTR(err); 306 return vi; 307 } 308 309 struct inode *ntfs_alloc_big_inode(struct super_block *sb) 310 { 311 struct ntfs_inode *ni; 312 313 ntfs_debug("Entering."); 314 ni = alloc_inode_sb(sb, ntfs_big_inode_cache, GFP_NOFS); 315 if (likely(ni != NULL)) { 316 ni->state = 0; 317 ni->type = 0; 318 ni->mft_no = 0; 319 return VFS_I(ni); 320 } 321 ntfs_error(sb, "Allocation of NTFS big inode structure failed."); 322 return NULL; 323 } 324 325 void ntfs_free_big_inode(struct inode *inode) 326 { 327 kmem_cache_free(ntfs_big_inode_cache, NTFS_I(inode)); 328 } 329 330 static int ntfs_non_resident_dealloc_clusters(struct ntfs_inode *ni) 331 { 332 struct super_block *sb = ni->vol->sb; 333 struct ntfs_attr_search_ctx *actx; 334 int err = 0; 335 336 actx = ntfs_attr_get_search_ctx(ni, NULL); 337 if (!actx) 338 return -ENOMEM; 339 WARN_ON(actx->mrec->link_count != 0); 340 341 /** 342 * ntfs_truncate_vfs cannot be called in evict() context due 343 * to some limitations, which are the @ni vfs inode is marked 344 * with I_FREEING, and etc. 345 */ 346 if (NInoRunlistDirty(ni)) { 347 err = ntfs_cluster_free_from_rl(ni->vol, ni->runlist.rl); 348 if (err) 349 ntfs_error(sb, 350 "Failed to free clusters. Leaving inconsistent metadata.\n"); 351 } 352 353 while ((err = ntfs_attrs_walk(actx)) == 0) { 354 if (actx->attr->non_resident && 355 (!NInoRunlistDirty(ni) || actx->attr->type != AT_DATA)) { 356 struct runlist_element *rl; 357 size_t new_rl_count; 358 359 rl = ntfs_mapping_pairs_decompress(ni->vol, actx->attr, NULL, 360 &new_rl_count); 361 if (IS_ERR(rl)) { 362 err = PTR_ERR(rl); 363 ntfs_error(sb, 364 "Failed to decompress runlist. Leaving inconsistent metadata.\n"); 365 continue; 366 } 367 368 err = ntfs_cluster_free_from_rl(ni->vol, rl); 369 if (err) 370 ntfs_error(sb, 371 "Failed to free attribute clusters. Leaving inconsistent metadata.\n"); 372 kvfree(rl); 373 } 374 } 375 376 ntfs_release_dirty_clusters(ni->vol, ni->i_dealloc_clusters); 377 ntfs_attr_put_search_ctx(actx); 378 return err; 379 } 380 381 int ntfs_drop_big_inode(struct inode *inode) 382 { 383 struct ntfs_inode *ni = NTFS_I(inode); 384 385 if (!inode_unhashed(inode) && inode_state_read_once(inode) & I_SYNC) { 386 if (ni->type == AT_DATA || ni->type == AT_INDEX_ALLOCATION) { 387 if (!inode->i_nlink) { 388 struct ntfs_inode *ni = NTFS_I(inode); 389 390 if (ni->data_size == 0) 391 return 0; 392 393 /* To avoid evict_inode call simultaneously */ 394 atomic_inc(&inode->i_count); 395 spin_unlock(&inode->i_lock); 396 397 truncate_setsize(VFS_I(ni), 0); 398 ntfs_truncate_vfs(VFS_I(ni), 0, 1); 399 400 sb_start_intwrite(inode->i_sb); 401 i_size_write(inode, 0); 402 ni->allocated_size = ni->initialized_size = ni->data_size = 0; 403 404 truncate_inode_pages_final(inode->i_mapping); 405 sb_end_intwrite(inode->i_sb); 406 407 spin_lock(&inode->i_lock); 408 atomic_dec(&inode->i_count); 409 } 410 } 411 return 0; 412 } 413 414 return inode_generic_drop(inode); 415 } 416 417 static inline struct ntfs_inode *ntfs_alloc_extent_inode(void) 418 { 419 struct ntfs_inode *ni; 420 421 ntfs_debug("Entering."); 422 ni = kmem_cache_alloc(ntfs_inode_cache, GFP_NOFS); 423 if (likely(ni != NULL)) { 424 ni->state = 0; 425 return ni; 426 } 427 ntfs_error(NULL, "Allocation of NTFS inode structure failed."); 428 return NULL; 429 } 430 431 static void ntfs_destroy_extent_inode(struct ntfs_inode *ni) 432 { 433 ntfs_debug("Entering."); 434 435 if (!atomic_dec_and_test(&ni->count)) 436 WARN_ON(1); 437 if (ni->folio) 438 folio_put(ni->folio); 439 kfree(ni->mrec); 440 kmem_cache_free(ntfs_inode_cache, ni); 441 } 442 443 static struct lock_class_key attr_inode_mrec_lock_class; 444 static struct lock_class_key attr_list_inode_mrec_lock_class; 445 446 /* 447 * The attribute runlist lock has separate locking rules from the 448 * normal runlist lock, so split the two lock-classes: 449 */ 450 static struct lock_class_key attr_list_rl_lock_class; 451 452 /* 453 * __ntfs_init_inode - initialize ntfs specific part of an inode 454 * @sb: super block of mounted volume 455 * @ni: freshly allocated ntfs inode which to initialize 456 * 457 * Initialize an ntfs inode to defaults. 458 * 459 * NOTE: ni->mft_no, ni->state, ni->type, ni->name, and ni->name_len are left 460 * untouched. Make sure to initialize them elsewhere. 461 */ 462 void __ntfs_init_inode(struct super_block *sb, struct ntfs_inode *ni) 463 { 464 ntfs_debug("Entering."); 465 rwlock_init(&ni->size_lock); 466 ni->initialized_size = ni->allocated_size = 0; 467 ni->seq_no = 0; 468 atomic_set(&ni->count, 1); 469 ni->vol = NTFS_SB(sb); 470 ntfs_init_runlist(&ni->runlist); 471 mutex_init(&ni->mrec_lock); 472 if (ni->type == AT_ATTRIBUTE_LIST) { 473 lockdep_set_class(&ni->mrec_lock, 474 &attr_list_inode_mrec_lock_class); 475 lockdep_set_class(&ni->runlist.lock, 476 &attr_list_rl_lock_class); 477 } else if (NInoAttr(ni)) { 478 lockdep_set_class(&ni->mrec_lock, 479 &attr_inode_mrec_lock_class); 480 } 481 482 ni->folio = NULL; 483 ni->folio_ofs = 0; 484 ni->mrec = NULL; 485 ni->attr_list_size = 0; 486 ni->attr_list = NULL; 487 ni->itype.index.block_size = 0; 488 ni->itype.index.vcn_size = 0; 489 ni->itype.index.collation_rule = 0; 490 ni->itype.index.block_size_bits = 0; 491 ni->itype.index.vcn_size_bits = 0; 492 mutex_init(&ni->extent_lock); 493 ni->nr_extents = 0; 494 ni->ext.base_ntfs_ino = NULL; 495 ni->flags = 0; 496 ni->mft_lcn[0] = LCN_RL_NOT_MAPPED; 497 ni->mft_lcn_count = 0; 498 ni->reparse_tag = 0; 499 ni->reparse_flags = 0; 500 ni->target = NULL; 501 ni->i_dealloc_clusters = 0; 502 } 503 504 /* 505 * Extent inodes get MFT-mapped in a nested way, while the base inode 506 * is still mapped. Teach this nesting to the lock validator by creating 507 * a separate class for nested inode's mrec_lock's: 508 */ 509 static struct lock_class_key extent_inode_mrec_lock_key; 510 511 inline struct ntfs_inode *ntfs_new_extent_inode(struct super_block *sb, 512 u64 mft_no) 513 { 514 struct ntfs_inode *ni = ntfs_alloc_extent_inode(); 515 516 ntfs_debug("Entering."); 517 if (likely(ni != NULL)) { 518 __ntfs_init_inode(sb, ni); 519 lockdep_set_class(&ni->mrec_lock, &extent_inode_mrec_lock_key); 520 ni->mft_no = mft_no; 521 ni->type = AT_UNUSED; 522 ni->name = NULL; 523 ni->name_len = 0; 524 } 525 return ni; 526 } 527 528 /* 529 * ntfs_is_extended_system_file - check if a file is in the $Extend directory 530 * @ctx: initialized attribute search context 531 * 532 * Search all file name attributes in the inode described by the attribute 533 * search context @ctx and check if any of the names are in the $Extend system 534 * directory. 535 * 536 * Return values: 537 * 3: file is $ObjId in $Extend directory 538 * 2: file is $Reparse in $Extend directory 539 * 1: file is in $Extend directory 540 * 0: file is not in $Extend directory 541 * -errno: failed to determine if the file is in the $Extend directory 542 */ 543 static int ntfs_is_extended_system_file(struct ntfs_attr_search_ctx *ctx) 544 { 545 int nr_links, err; 546 547 /* Restart search. */ 548 ntfs_attr_reinit_search_ctx(ctx); 549 550 /* Get number of hard links. */ 551 nr_links = le16_to_cpu(ctx->mrec->link_count); 552 553 /* Loop through all hard links. */ 554 while (!(err = ntfs_attr_lookup(AT_FILE_NAME, NULL, 0, 0, 0, NULL, 0, 555 ctx))) { 556 struct file_name_attr *file_name_attr; 557 struct attr_record *attr = ctx->attr; 558 u8 *p, *p2; 559 560 nr_links--; 561 /* 562 * Maximum sanity checking as we are called on an inode that 563 * we suspect might be corrupt. 564 */ 565 p = (u8 *)attr + le32_to_cpu(attr->length); 566 if (p < (u8 *)ctx->mrec || (u8 *)p > (u8 *)ctx->mrec + 567 le32_to_cpu(ctx->mrec->bytes_in_use)) { 568 err_corrupt_attr: 569 ntfs_error(ctx->ntfs_ino->vol->sb, 570 "Corrupt file name attribute. You should run chkdsk."); 571 return -EIO; 572 } 573 if (attr->non_resident) { 574 ntfs_error(ctx->ntfs_ino->vol->sb, 575 "Non-resident file name. You should run chkdsk."); 576 return -EIO; 577 } 578 if (attr->flags) { 579 ntfs_error(ctx->ntfs_ino->vol->sb, 580 "File name with invalid flags. You should run chkdsk."); 581 return -EIO; 582 } 583 if (!(attr->data.resident.flags & RESIDENT_ATTR_IS_INDEXED)) { 584 ntfs_error(ctx->ntfs_ino->vol->sb, 585 "Unindexed file name. You should run chkdsk."); 586 return -EIO; 587 } 588 file_name_attr = (struct file_name_attr *)((u8 *)attr + 589 le16_to_cpu(attr->data.resident.value_offset)); 590 p2 = (u8 *)file_name_attr + le32_to_cpu(attr->data.resident.value_length); 591 if (p2 < (u8 *)attr || p2 > p) 592 goto err_corrupt_attr; 593 /* This attribute is ok, but is it in the $Extend directory? */ 594 if (MREF_LE(file_name_attr->parent_directory) == FILE_Extend) { 595 unsigned char *s; 596 597 s = ntfs_attr_name_get(ctx->ntfs_ino->vol, 598 file_name_attr->file_name, 599 file_name_attr->file_name_length); 600 if (!s) 601 return 1; 602 if (!strcmp("$Reparse", s)) { 603 ntfs_attr_name_free(&s); 604 return 2; /* it's reparse point file */ 605 } 606 if (!strcmp("$ObjId", s)) { 607 ntfs_attr_name_free(&s); 608 return 3; /* it's object id file */ 609 } 610 ntfs_attr_name_free(&s); 611 return 1; /* YES, it's an extended system file. */ 612 } 613 } 614 if (unlikely(err != -ENOENT)) 615 return err; 616 if (unlikely(nr_links)) { 617 ntfs_error(ctx->ntfs_ino->vol->sb, 618 "Inode hard link count doesn't match number of name attributes. You should run chkdsk."); 619 return -EIO; 620 } 621 return 0; /* NO, it is not an extended system file. */ 622 } 623 624 static struct lock_class_key ntfs_dir_inval_lock_key; 625 626 void ntfs_set_vfs_operations(struct inode *inode, mode_t mode, dev_t dev) 627 { 628 if (S_ISDIR(mode)) { 629 if (!NInoAttr(NTFS_I(inode))) { 630 inode->i_op = &ntfs_dir_inode_ops; 631 inode->i_fop = &ntfs_dir_ops; 632 } 633 inode->i_mapping->a_ops = &ntfs_aops; 634 lockdep_set_class(&inode->i_mapping->invalidate_lock, 635 &ntfs_dir_inval_lock_key); 636 } else if (S_ISLNK(mode)) { 637 inode->i_op = &ntfs_symlink_inode_operations; 638 inode->i_mapping->a_ops = &ntfs_aops; 639 } else if (S_ISCHR(mode) || S_ISBLK(mode) || S_ISFIFO(mode) || S_ISSOCK(mode)) { 640 inode->i_op = &ntfs_special_inode_operations; 641 init_special_inode(inode, inode->i_mode, dev); 642 } else { 643 if (!NInoAttr(NTFS_I(inode))) { 644 inode->i_op = &ntfs_file_inode_ops; 645 inode->i_fop = &ntfs_file_ops; 646 } 647 if (inode->i_ino == FILE_MFT) 648 inode->i_mapping->a_ops = &ntfs_mft_aops; 649 else 650 inode->i_mapping->a_ops = &ntfs_aops; 651 } 652 } 653 654 /* 655 * ntfs_read_locked_inode - read an inode from its device 656 * @vi: inode to read 657 * 658 * ntfs_read_locked_inode() is called from ntfs_iget() to read the inode 659 * described by @vi into memory from the device. 660 * 661 * The only fields in @vi that we need to/can look at when the function is 662 * called are i_sb, pointing to the mounted device's super block, and i_ino, 663 * the number of the inode to load. 664 * 665 * ntfs_read_locked_inode() maps, pins and locks the mft record number i_ino 666 * for reading and sets up the necessary @vi fields as well as initializing 667 * the ntfs inode. 668 * 669 * Q: What locks are held when the function is called? 670 * A: i_state has I_NEW set, hence the inode is locked, also 671 * i_count is set to 1, so it is not going to go away 672 * i_flags is set to 0 and we have no business touching it. Only an ioctl() 673 * is allowed to write to them. We should of course be honouring them but 674 * we need to do that using the IS_* macros defined in include/linux/fs.h. 675 * In any case ntfs_read_locked_inode() has nothing to do with i_flags. 676 * 677 * Return 0 on success and -errno on error. 678 */ 679 static int ntfs_read_locked_inode(struct inode *vi) 680 { 681 struct ntfs_volume *vol = NTFS_SB(vi->i_sb); 682 struct ntfs_inode *ni = NTFS_I(vi); 683 struct mft_record *m; 684 struct attr_record *a; 685 struct standard_information *si; 686 struct ntfs_attr_search_ctx *ctx; 687 int err = 0; 688 __le16 *name = I30; 689 unsigned int name_len = 4, flags = 0; 690 int extend_sys = 0; 691 dev_t dev = 0; 692 bool has_lxmod = false; 693 bool vol_err = true; 694 695 ntfs_debug("Entering for i_ino 0x%llx.", ni->mft_no); 696 697 if (uid_valid(vol->uid)) { 698 vi->i_uid = vol->uid; 699 flags |= NTFS_VOL_UID; 700 } else 701 vi->i_uid = GLOBAL_ROOT_UID; 702 703 if (gid_valid(vol->gid)) { 704 vi->i_gid = vol->gid; 705 flags |= NTFS_VOL_GID; 706 } else 707 vi->i_gid = GLOBAL_ROOT_GID; 708 709 vi->i_mode = 0777; 710 711 /* 712 * Initialize the ntfs specific part of @vi special casing 713 * FILE_MFT which we need to do at mount time. 714 */ 715 if (vi->i_ino != FILE_MFT) 716 ntfs_init_big_inode(vi); 717 718 m = map_mft_record(ni); 719 if (IS_ERR(m)) { 720 err = PTR_ERR(m); 721 goto err_out; 722 } 723 724 ctx = ntfs_attr_get_search_ctx(ni, m); 725 if (!ctx) { 726 err = -ENOMEM; 727 goto unm_err_out; 728 } 729 730 if (!(m->flags & MFT_RECORD_IN_USE)) { 731 err = -ENOENT; 732 vol_err = false; 733 goto unm_err_out; 734 } 735 736 if (m->base_mft_record) { 737 ntfs_error(vi->i_sb, "Inode is an extent inode!"); 738 goto unm_err_out; 739 } 740 741 /* Transfer information from mft record into vfs and ntfs inodes. */ 742 vi->i_generation = ni->seq_no = le16_to_cpu(m->sequence_number); 743 744 if (le16_to_cpu(m->link_count) < 1) { 745 ntfs_error(vi->i_sb, "Inode link count is 0!"); 746 goto unm_err_out; 747 } 748 set_nlink(vi, le16_to_cpu(m->link_count)); 749 750 /* If read-only, no one gets write permissions. */ 751 if (IS_RDONLY(vi)) 752 vi->i_mode &= ~0222; 753 754 /* 755 * Find the standard information attribute in the mft record. At this 756 * stage we haven't setup the attribute list stuff yet, so this could 757 * in fact fail if the standard information is in an extent record, but 758 * I don't think this actually ever happens. 759 */ 760 ntfs_attr_reinit_search_ctx(ctx); 761 err = ntfs_attr_lookup(AT_STANDARD_INFORMATION, NULL, 0, 0, 0, NULL, 0, 762 ctx); 763 if (unlikely(err)) { 764 if (err == -ENOENT) 765 ntfs_error(vi->i_sb, "$STANDARD_INFORMATION attribute is missing."); 766 goto unm_err_out; 767 } 768 a = ctx->attr; 769 /* Get the standard information attribute value. */ 770 si = (struct standard_information *)((u8 *)a + 771 le16_to_cpu(a->data.resident.value_offset)); 772 773 /* Transfer information from the standard information into vi. */ 774 /* 775 * Note: The i_?times do not quite map perfectly onto the NTFS times, 776 * but they are close enough, and in the end it doesn't really matter 777 * that much... 778 */ 779 /* 780 * mtime is the last change of the data within the file. Not changed 781 * when only metadata is changed, e.g. a rename doesn't affect mtime. 782 */ 783 ni->i_crtime = ntfs2utc(si->creation_time); 784 785 inode_set_mtime_to_ts(vi, ntfs2utc(si->last_data_change_time)); 786 /* 787 * ctime is the last change of the metadata of the file. This obviously 788 * always changes, when mtime is changed. ctime can be changed on its 789 * own, mtime is then not changed, e.g. when a file is renamed. 790 */ 791 inode_set_ctime_to_ts(vi, ntfs2utc(si->last_mft_change_time)); 792 /* 793 * Last access to the data within the file. Not changed during a rename 794 * for example but changed whenever the file is written to. 795 */ 796 inode_set_atime_to_ts(vi, ntfs2utc(si->last_access_time)); 797 ni->flags = si->file_attributes; 798 799 /* Find the attribute list attribute if present. */ 800 ntfs_attr_reinit_search_ctx(ctx); 801 err = ntfs_attr_lookup(AT_ATTRIBUTE_LIST, NULL, 0, 0, 0, NULL, 0, ctx); 802 if (err) { 803 if (unlikely(err != -ENOENT)) { 804 ntfs_error(vi->i_sb, "Failed to lookup attribute list attribute."); 805 goto unm_err_out; 806 } 807 } else { 808 if (vi->i_ino == FILE_MFT) 809 goto skip_attr_list_load; 810 ntfs_debug("Attribute list found in inode 0x%llx.", ni->mft_no); 811 NInoSetAttrList(ni); 812 a = ctx->attr; 813 if (a->flags & ATTR_COMPRESSION_MASK) { 814 ntfs_error(vi->i_sb, 815 "Attribute list attribute is compressed."); 816 goto unm_err_out; 817 } 818 if (a->flags & ATTR_IS_ENCRYPTED || 819 a->flags & ATTR_IS_SPARSE) { 820 if (a->non_resident) { 821 ntfs_error(vi->i_sb, 822 "Non-resident attribute list attribute is encrypted/sparse."); 823 goto unm_err_out; 824 } 825 ntfs_warning(vi->i_sb, 826 "Resident attribute list attribute in inode 0x%llx is marked encrypted/sparse which is not true. However, Windows allows this and chkdsk does not detect or correct it so we will just ignore the invalid flags and pretend they are not set.", 827 ni->mft_no); 828 } 829 /* Now allocate memory for the attribute list. */ 830 ni->attr_list_size = (u32)ntfs_attr_size(a); 831 if (!ni->attr_list_size) { 832 ntfs_error(vi->i_sb, "Attr_list_size is zero"); 833 goto unm_err_out; 834 } 835 ni->attr_list = kvzalloc(ni->attr_list_size, GFP_NOFS); 836 if (!ni->attr_list) { 837 ntfs_error(vi->i_sb, 838 "Not enough memory to allocate buffer for attribute list."); 839 err = -ENOMEM; 840 goto unm_err_out; 841 } 842 if (a->non_resident) { 843 NInoSetAttrListNonResident(ni); 844 if (a->data.non_resident.lowest_vcn) { 845 ntfs_error(vi->i_sb, "Attribute list has non zero lowest_vcn."); 846 goto unm_err_out; 847 } 848 849 /* Now load the attribute list. */ 850 err = load_attribute_list(ni, ni->attr_list, ni->attr_list_size); 851 if (err) { 852 ntfs_error(vi->i_sb, "Failed to load attribute list attribute."); 853 goto unm_err_out; 854 } 855 } else /* if (!a->non_resident) */ { 856 /* Now copy the attribute list. */ 857 memcpy(ni->attr_list, (u8 *)a + le16_to_cpu( 858 a->data.resident.value_offset), 859 le32_to_cpu( 860 a->data.resident.value_length)); 861 /* A resident list is not validated on load; check it now. */ 862 if (!ntfs_attr_list_is_valid(ni->attr_list, 863 ni->attr_list_size)) { 864 ntfs_error(vi->i_sb, "Corrupt attribute list."); 865 goto unm_err_out; 866 } 867 } 868 } 869 skip_attr_list_load: 870 err = ntfs_attr_lookup(AT_EA_INFORMATION, NULL, 0, 0, 0, NULL, 0, ctx); 871 if (!err) { 872 NInoSetHasEA(ni); 873 ntfs_ea_get_wsl_inode(vi, &dev, flags, &has_lxmod); 874 } 875 876 if (ni->flags & FILE_ATTR_REPARSE_POINT) { 877 unsigned int mode; 878 879 err = ntfs_parse_reparse(ni, &mode); 880 if (err) 881 goto unm_err_out; 882 if (mode) 883 vi->i_mode |= mode; 884 else { 885 vi->i_mode &= ~S_IFLNK; 886 if (m->flags & MFT_RECORD_IS_DIRECTORY) 887 vi->i_mode |= S_IFDIR; 888 else 889 vi->i_mode |= S_IFREG; 890 } 891 } else if (m->flags & MFT_RECORD_IS_DIRECTORY) { 892 vi->i_mode |= S_IFDIR; 893 } else { 894 vi->i_mode |= S_IFREG; 895 } 896 897 if (S_ISDIR(vi->i_mode)) { 898 /* 899 * Apply the directory permissions mask set in the mount options 900 * when no per-file WSL mode is present. 901 */ 902 if (!has_lxmod) 903 vi->i_mode &= ~vol->dmask; 904 /* Things break without this kludge! */ 905 if (vi->i_nlink > 1) 906 set_nlink(vi, 1); 907 } else { 908 /* Apply the file permissions mask when no WSL mode is present. */ 909 if (!has_lxmod) 910 vi->i_mode &= ~vol->fmask; 911 } 912 913 /* 914 * If an attribute list is present we now have the attribute list value 915 * in ntfs_ino->attr_list and it is ntfs_ino->attr_list_size bytes. 916 */ 917 if (m->flags & MFT_RECORD_IS_DIRECTORY) { 918 struct index_root *ir; 919 920 view_index_meta: 921 /* It is a directory, find index root attribute. */ 922 ntfs_attr_reinit_search_ctx(ctx); 923 err = ntfs_attr_lookup(AT_INDEX_ROOT, name, name_len, CASE_SENSITIVE, 924 0, NULL, 0, ctx); 925 if (unlikely(err)) { 926 if (err == -ENOENT) 927 ntfs_error(vi->i_sb, "$INDEX_ROOT attribute is missing."); 928 goto unm_err_out; 929 } 930 a = ctx->attr; 931 /* Set up the state. */ 932 if (unlikely(a->non_resident)) { 933 ntfs_error(vol->sb, 934 "$INDEX_ROOT attribute is not resident."); 935 goto unm_err_out; 936 } 937 /* Ensure the attribute name is placed before the value. */ 938 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >= 939 le16_to_cpu(a->data.resident.value_offset)))) { 940 ntfs_error(vol->sb, 941 "$INDEX_ROOT attribute name is placed after the attribute value."); 942 goto unm_err_out; 943 } 944 /* 945 * Compressed/encrypted index root just means that the newly 946 * created files in that directory should be created compressed/ 947 * encrypted. However index root cannot be both compressed and 948 * encrypted. 949 */ 950 if (a->flags & ATTR_COMPRESSION_MASK) { 951 NInoSetCompressed(ni); 952 ni->flags |= FILE_ATTR_COMPRESSED; 953 } 954 if (a->flags & ATTR_IS_ENCRYPTED) { 955 if (a->flags & ATTR_COMPRESSION_MASK) { 956 ntfs_error(vi->i_sb, "Found encrypted and compressed attribute."); 957 goto unm_err_out; 958 } 959 NInoSetEncrypted(ni); 960 ni->flags |= FILE_ATTR_ENCRYPTED; 961 } 962 if (a->flags & ATTR_IS_SPARSE) { 963 NInoSetSparse(ni); 964 ni->flags |= FILE_ATTR_SPARSE_FILE; 965 } 966 ir = (struct index_root *)((u8 *)a + 967 le16_to_cpu(a->data.resident.value_offset)); 968 if (ntfs_index_root_inconsistent(ni->vol, a, ir, ni->mft_no) || 969 ntfs_index_entries_inconsistent(ni->vol, &ir->index, 970 ir->collation_rule, ni->mft_no)) { 971 ntfs_error(vi->i_sb, "Directory index is corrupt."); 972 goto unm_err_out; 973 } 974 975 if (extend_sys) { 976 if (ir->type) { 977 ntfs_error(vi->i_sb, "Indexed attribute is not zero."); 978 goto unm_err_out; 979 } 980 } else { 981 if (ir->type != AT_FILE_NAME) { 982 ntfs_error(vi->i_sb, "Indexed attribute is not $FILE_NAME."); 983 goto unm_err_out; 984 } 985 986 if (ir->collation_rule != COLLATION_FILE_NAME) { 987 ntfs_error(vi->i_sb, 988 "Index collation rule is not COLLATION_FILE_NAME."); 989 goto unm_err_out; 990 } 991 } 992 993 ni->itype.index.collation_rule = ir->collation_rule; 994 ni->itype.index.block_size = le32_to_cpu(ir->index_block_size); 995 if (ni->itype.index.block_size & 996 (ni->itype.index.block_size - 1)) { 997 ntfs_error(vi->i_sb, "Index block size (%u) is not a power of two.", 998 ni->itype.index.block_size); 999 goto unm_err_out; 1000 } 1001 if (ni->itype.index.block_size > PAGE_SIZE) { 1002 ntfs_error(vi->i_sb, 1003 "Index block size (%u) > PAGE_SIZE (%ld) is not supported.", 1004 ni->itype.index.block_size, 1005 PAGE_SIZE); 1006 err = -EOPNOTSUPP; 1007 goto unm_err_out; 1008 } 1009 if (ni->itype.index.block_size < NTFS_BLOCK_SIZE) { 1010 ntfs_error(vi->i_sb, 1011 "Index block size (%u) < NTFS_BLOCK_SIZE (%i) is not supported.", 1012 ni->itype.index.block_size, 1013 NTFS_BLOCK_SIZE); 1014 err = -EOPNOTSUPP; 1015 goto unm_err_out; 1016 } 1017 ni->itype.index.block_size_bits = 1018 ffs(ni->itype.index.block_size) - 1; 1019 /* Determine the size of a vcn in the directory index. */ 1020 if (vol->cluster_size <= ni->itype.index.block_size) { 1021 ni->itype.index.vcn_size = vol->cluster_size; 1022 ni->itype.index.vcn_size_bits = vol->cluster_size_bits; 1023 } else { 1024 ni->itype.index.vcn_size = vol->sector_size; 1025 ni->itype.index.vcn_size_bits = vol->sector_size_bits; 1026 } 1027 1028 /* Setup the index allocation attribute, even if not present. */ 1029 ni->type = AT_INDEX_ROOT; 1030 ni->name = name; 1031 ni->name_len = name_len; 1032 vi->i_size = ni->initialized_size = ni->data_size = 1033 le32_to_cpu(a->data.resident.value_length); 1034 ni->allocated_size = (ni->data_size + 7) & ~7; 1035 /* We are done with the mft record, so we release it. */ 1036 ntfs_attr_put_search_ctx(ctx); 1037 unmap_mft_record(ni); 1038 m = NULL; 1039 ctx = NULL; 1040 /* Setup the operations for this inode. */ 1041 ntfs_set_vfs_operations(vi, vi->i_mode, 0); 1042 if (ir->index.flags & LARGE_INDEX) 1043 NInoSetIndexAllocPresent(ni); 1044 } else { 1045 /* It is a file. */ 1046 ntfs_attr_reinit_search_ctx(ctx); 1047 1048 /* Setup the data attribute, even if not present. */ 1049 ni->type = AT_DATA; 1050 ni->name = AT_UNNAMED; 1051 ni->name_len = 0; 1052 1053 /* Find first extent of the unnamed data attribute. */ 1054 err = ntfs_attr_lookup(AT_DATA, NULL, 0, 0, 0, NULL, 0, ctx); 1055 if (unlikely(err)) { 1056 vi->i_size = ni->initialized_size = 1057 ni->allocated_size = 0; 1058 if (err != -ENOENT) { 1059 ntfs_error(vi->i_sb, "Failed to lookup $DATA attribute."); 1060 goto unm_err_out; 1061 } 1062 /* 1063 * FILE_Secure does not have an unnamed $DATA 1064 * attribute, so we special case it here. 1065 */ 1066 if (vi->i_ino == FILE_Secure) 1067 goto no_data_attr_special_case; 1068 /* 1069 * Most if not all the system files in the $Extend 1070 * system directory do not have unnamed data 1071 * attributes so we need to check if the parent 1072 * directory of the file is FILE_Extend and if it is 1073 * ignore this error. To do this we need to get the 1074 * name of this inode from the mft record as the name 1075 * contains the back reference to the parent directory. 1076 */ 1077 extend_sys = ntfs_is_extended_system_file(ctx); 1078 if (extend_sys > 0) { 1079 if (m->flags & MFT_RECORD_IS_VIEW_INDEX) { 1080 if (extend_sys == 2) { 1081 name = reparse_index_name; 1082 name_len = 2; 1083 goto view_index_meta; 1084 } else if (extend_sys == 3) { 1085 name = objid_index_name; 1086 name_len = 2; 1087 goto view_index_meta; 1088 } 1089 } 1090 goto no_data_attr_special_case; 1091 } 1092 1093 err = extend_sys; 1094 ntfs_error(vi->i_sb, "$DATA attribute is missing, err : %d", err); 1095 goto unm_err_out; 1096 } 1097 a = ctx->attr; 1098 /* Setup the state. */ 1099 if (a->flags & (ATTR_COMPRESSION_MASK | ATTR_IS_SPARSE)) { 1100 if (a->flags & ATTR_COMPRESSION_MASK) { 1101 if (NInoWofCompressed(ni)) { 1102 ntfs_error(vi->i_sb, 1103 "Found native compression on a WOF file."); 1104 goto unm_err_out; 1105 } 1106 NInoSetCompressed(ni); 1107 ni->flags |= FILE_ATTR_COMPRESSED; 1108 if (vol->cluster_size > 4096) { 1109 ntfs_error(vi->i_sb, 1110 "Found compressed data but compression is disabled due to cluster size (%i) > 4kiB.", 1111 vol->cluster_size); 1112 goto unm_err_out; 1113 } 1114 if ((a->flags & ATTR_COMPRESSION_MASK) 1115 != ATTR_IS_COMPRESSED) { 1116 ntfs_error(vi->i_sb, 1117 "Found unknown compression method or corrupt file."); 1118 goto unm_err_out; 1119 } 1120 } 1121 if (a->flags & ATTR_IS_SPARSE) { 1122 NInoSetSparse(ni); 1123 ni->flags |= FILE_ATTR_SPARSE_FILE; 1124 } 1125 } 1126 if (a->flags & ATTR_IS_ENCRYPTED) { 1127 if (NInoCompressed(ni)) { 1128 ntfs_error(vi->i_sb, "Found encrypted and compressed data."); 1129 goto unm_err_out; 1130 } 1131 NInoSetEncrypted(ni); 1132 ni->flags |= FILE_ATTR_ENCRYPTED; 1133 } 1134 if (a->non_resident) { 1135 NInoSetNonResident(ni); 1136 if (NInoCompressed(ni) || (NInoSparse(ni) && !NInoWofCompressed(ni))) { 1137 if (NInoCompressed(ni) && 1138 a->data.non_resident.compression_unit != 4) { 1139 ntfs_error(vi->i_sb, 1140 "Found non-standard compression unit (%u instead of 4). Cannot handle this.", 1141 a->data.non_resident.compression_unit); 1142 err = -EOPNOTSUPP; 1143 goto unm_err_out; 1144 } 1145 1146 if (NInoSparse(ni) && 1147 a->data.non_resident.compression_unit && 1148 a->data.non_resident.compression_unit != 1149 vol->sparse_compression_unit) { 1150 ntfs_error(vi->i_sb, 1151 "Found non-standard compression unit (%u instead of 0 or %d). Cannot handle this.", 1152 a->data.non_resident.compression_unit, 1153 vol->sparse_compression_unit); 1154 err = -EOPNOTSUPP; 1155 goto unm_err_out; 1156 } 1157 1158 1159 if (a->data.non_resident.compression_unit) { 1160 ni->itype.compressed.block_size = 1U << 1161 (a->data.non_resident.compression_unit + 1162 vol->cluster_size_bits); 1163 ni->itype.compressed.block_size_bits = 1164 ffs(ni->itype.compressed.block_size) - 1; 1165 ni->itype.compressed.block_clusters = 1166 1U << a->data.non_resident.compression_unit; 1167 } else { 1168 ni->itype.compressed.block_size = 0; 1169 ni->itype.compressed.block_size_bits = 1170 0; 1171 ni->itype.compressed.block_clusters = 1172 0; 1173 } 1174 ni->itype.compressed.size = le64_to_cpu( 1175 a->data.non_resident.compressed_size); 1176 } 1177 if (a->data.non_resident.lowest_vcn) { 1178 ntfs_error(vi->i_sb, 1179 "First extent of $DATA attribute has non zero lowest_vcn."); 1180 goto unm_err_out; 1181 } 1182 vi->i_size = ni->data_size = le64_to_cpu(a->data.non_resident.data_size); 1183 ni->initialized_size = le64_to_cpu(a->data.non_resident.initialized_size); 1184 ni->allocated_size = le64_to_cpu(a->data.non_resident.allocated_size); 1185 } else { /* Resident attribute. */ 1186 vi->i_size = ni->data_size = ni->initialized_size = le32_to_cpu( 1187 a->data.resident.value_length); 1188 ni->allocated_size = le32_to_cpu(a->length) - 1189 le16_to_cpu( 1190 a->data.resident.value_offset); 1191 if (vi->i_size > ni->allocated_size) { 1192 ntfs_error(vi->i_sb, 1193 "Resident data attribute is corrupt (size exceeds allocation)."); 1194 goto unm_err_out; 1195 } 1196 } 1197 no_data_attr_special_case: 1198 /* We are done with the mft record, so we release it. */ 1199 ntfs_attr_put_search_ctx(ctx); 1200 unmap_mft_record(ni); 1201 m = NULL; 1202 ctx = NULL; 1203 /* Setup the operations for this inode. */ 1204 ntfs_set_vfs_operations(vi, vi->i_mode, dev); 1205 } 1206 1207 if (NVolSysImmutable(vol) && (ni->flags & FILE_ATTR_SYSTEM) && 1208 !S_ISFIFO(vi->i_mode) && !S_ISSOCK(vi->i_mode) && !S_ISLNK(vi->i_mode)) 1209 vi->i_flags |= S_IMMUTABLE; 1210 1211 /* 1212 * System files such as $Bitmap and $MFT are maintained by the driver 1213 * itself, and writing them from userspace corrupts the volume. 1214 * Always make them immutable regardless of the sys_immutable option. 1215 * Directories are skipped so the root and $Extend stay usable. 1216 */ 1217 if (ni->mft_no < FILE_first_user && S_ISREG(vi->i_mode)) 1218 vi->i_flags |= S_IMMUTABLE; 1219 1220 /* 1221 * The number of 512-byte blocks used on disk (for stat). This is in so 1222 * far inaccurate as it doesn't account for any named streams or other 1223 * special non-resident attributes, but that is how Windows works, too, 1224 * so we are at least consistent with Windows, if not entirely 1225 * consistent with the Linux Way. Doing it the Linux Way would cause a 1226 * significant slowdown as it would involve iterating over all 1227 * attributes in the mft record and adding the allocated/compressed 1228 * sizes of all non-resident attributes present to give us the Linux 1229 * correct size that should go into i_blocks (after division by 512). 1230 */ 1231 if (S_ISREG(vi->i_mode) && 1232 (NInoCompressed(ni) || (NInoSparse(ni) && !NInoWofCompressed(ni)))) 1233 vi->i_blocks = ni->itype.compressed.size >> 9; 1234 else 1235 vi->i_blocks = ni->allocated_size >> 9; 1236 1237 if (S_ISLNK(vi->i_mode) && ni->target) 1238 vi->i_size = strlen(ni->target); 1239 1240 ntfs_debug("Done."); 1241 return 0; 1242 unm_err_out: 1243 if (!err) 1244 err = -EIO; 1245 if (ctx) 1246 ntfs_attr_put_search_ctx(ctx); 1247 if (m) 1248 unmap_mft_record(ni); 1249 err_out: 1250 if (err != -EOPNOTSUPP && err != -ENOMEM && 1251 err != -EINTR && err != -ERESTARTSYS && vol_err == true) { 1252 ntfs_error(vol->sb, 1253 "Failed with error code %i. Marking corrupt inode 0x%llx as bad. Run chkdsk.", 1254 err, ni->mft_no); 1255 NVolSetErrors(vol); 1256 } 1257 return err; 1258 } 1259 1260 /* 1261 * ntfs_read_locked_attr_inode - read an attribute inode from its base inode 1262 * @base_vi: base inode 1263 * @vi: attribute inode to read 1264 * 1265 * ntfs_read_locked_attr_inode() is called from ntfs_attr_iget() to read the 1266 * attribute inode described by @vi into memory from the base mft record 1267 * described by @base_ni. 1268 * 1269 * ntfs_read_locked_attr_inode() maps, pins and locks the base inode for 1270 * reading and looks up the attribute described by @vi before setting up the 1271 * necessary fields in @vi as well as initializing the ntfs inode. 1272 * 1273 * Q: What locks are held when the function is called? 1274 * A: i_state has I_NEW set, hence the inode is locked, also 1275 * i_count is set to 1, so it is not going to go away 1276 * 1277 * Return 0 on success and -errno on error. 1278 * 1279 * Note this cannot be called for AT_INDEX_ALLOCATION. 1280 */ 1281 static int ntfs_read_locked_attr_inode(struct inode *base_vi, struct inode *vi) 1282 { 1283 struct ntfs_volume *vol = NTFS_SB(vi->i_sb); 1284 struct ntfs_inode *ni = NTFS_I(vi), *base_ni = NTFS_I(base_vi); 1285 struct mft_record *m; 1286 struct attr_record *a; 1287 struct ntfs_attr_search_ctx *ctx; 1288 int err = 0; 1289 1290 ntfs_debug("Entering for i_ino 0x%llx.", ni->mft_no); 1291 1292 ntfs_init_big_inode(vi); 1293 1294 /* Just mirror the values from the base inode. */ 1295 vi->i_uid = base_vi->i_uid; 1296 vi->i_gid = base_vi->i_gid; 1297 set_nlink(vi, base_vi->i_nlink); 1298 inode_set_mtime_to_ts(vi, inode_get_mtime(base_vi)); 1299 inode_set_ctime_to_ts(vi, inode_get_ctime(base_vi)); 1300 inode_set_atime_to_ts(vi, inode_get_atime(base_vi)); 1301 vi->i_generation = ni->seq_no = base_ni->seq_no; 1302 1303 /* Set inode type to zero but preserve permissions. */ 1304 vi->i_mode = base_vi->i_mode & ~S_IFMT; 1305 1306 m = map_mft_record(base_ni); 1307 if (IS_ERR(m)) { 1308 err = PTR_ERR(m); 1309 goto err_out; 1310 } 1311 ctx = ntfs_attr_get_search_ctx(base_ni, m); 1312 if (!ctx) { 1313 err = -ENOMEM; 1314 goto unm_err_out; 1315 } 1316 /* Find the attribute. */ 1317 err = ntfs_attr_lookup(ni->type, ni->name, ni->name_len, 1318 CASE_SENSITIVE, 0, NULL, 0, ctx); 1319 if (unlikely(err)) 1320 goto unm_err_out; 1321 a = ctx->attr; 1322 if (a->flags & (ATTR_COMPRESSION_MASK | ATTR_IS_SPARSE)) { 1323 if (a->flags & ATTR_COMPRESSION_MASK) { 1324 NInoSetCompressed(ni); 1325 ni->flags |= FILE_ATTR_COMPRESSED; 1326 if ((ni->type != AT_DATA) || (ni->type == AT_DATA && 1327 ni->name_len)) { 1328 ntfs_error(vi->i_sb, 1329 "Found compressed non-data or named data attribute."); 1330 goto unm_err_out; 1331 } 1332 if (vol->cluster_size > 4096) { 1333 ntfs_error(vi->i_sb, 1334 "Found compressed attribute but compression is disabled due to cluster size (%i) > 4kiB.", 1335 vol->cluster_size); 1336 goto unm_err_out; 1337 } 1338 if ((a->flags & ATTR_COMPRESSION_MASK) != 1339 ATTR_IS_COMPRESSED) { 1340 ntfs_error(vi->i_sb, "Found unknown compression method."); 1341 goto unm_err_out; 1342 } 1343 } 1344 /* 1345 * The compressed/sparse flag set in an index root just means 1346 * to compress all files. 1347 */ 1348 if (NInoMstProtected(ni) && ni->type != AT_INDEX_ROOT) { 1349 ntfs_error(vi->i_sb, 1350 "Found mst protected attribute but the attribute is %s.", 1351 NInoCompressed(ni) ? "compressed" : "sparse"); 1352 goto unm_err_out; 1353 } 1354 if (a->flags & ATTR_IS_SPARSE) { 1355 NInoSetSparse(ni); 1356 ni->flags |= FILE_ATTR_SPARSE_FILE; 1357 } 1358 } 1359 if (a->flags & ATTR_IS_ENCRYPTED) { 1360 if (NInoCompressed(ni)) { 1361 ntfs_error(vi->i_sb, "Found encrypted and compressed data."); 1362 goto unm_err_out; 1363 } 1364 /* 1365 * The encryption flag set in an index root just means to 1366 * encrypt all files. 1367 */ 1368 if (NInoMstProtected(ni) && ni->type != AT_INDEX_ROOT) { 1369 ntfs_error(vi->i_sb, 1370 "Found mst protected attribute but the attribute is encrypted."); 1371 goto unm_err_out; 1372 } 1373 if (ni->type != AT_DATA) { 1374 ntfs_error(vi->i_sb, 1375 "Found encrypted non-data attribute."); 1376 goto unm_err_out; 1377 } 1378 NInoSetEncrypted(ni); 1379 ni->flags |= FILE_ATTR_ENCRYPTED; 1380 } 1381 if (!a->non_resident) { 1382 /* Ensure the attribute name is placed before the value. */ 1383 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >= 1384 le16_to_cpu(a->data.resident.value_offset)))) { 1385 ntfs_error(vol->sb, 1386 "Attribute name is placed after the attribute value."); 1387 goto unm_err_out; 1388 } 1389 if (NInoMstProtected(ni)) { 1390 ntfs_error(vi->i_sb, 1391 "Found mst protected attribute but the attribute is resident."); 1392 goto unm_err_out; 1393 } 1394 vi->i_size = ni->initialized_size = ni->data_size = le32_to_cpu( 1395 a->data.resident.value_length); 1396 ni->allocated_size = le32_to_cpu(a->length) - 1397 le16_to_cpu(a->data.resident.value_offset); 1398 if (vi->i_size > ni->allocated_size) { 1399 ntfs_error(vi->i_sb, 1400 "Resident attribute is corrupt (size exceeds allocation)."); 1401 goto unm_err_out; 1402 } 1403 } else { 1404 NInoSetNonResident(ni); 1405 /* 1406 * Ensure the attribute name is placed before the mapping pairs 1407 * array. 1408 */ 1409 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >= 1410 le16_to_cpu( 1411 a->data.non_resident.mapping_pairs_offset)))) { 1412 ntfs_error(vol->sb, 1413 "Attribute name is placed after the mapping pairs array."); 1414 goto unm_err_out; 1415 } 1416 if (NInoCompressed(ni) || (NInoSparse(ni) && !NInoWofCompressed(ni))) { 1417 if (NInoCompressed(ni) && a->data.non_resident.compression_unit != 4) { 1418 ntfs_error(vi->i_sb, 1419 "Found non-standard compression unit (%u instead of 4). Cannot handle this.", 1420 a->data.non_resident.compression_unit); 1421 err = -EOPNOTSUPP; 1422 goto unm_err_out; 1423 } 1424 if (a->data.non_resident.compression_unit) { 1425 ni->itype.compressed.block_size = 1U << 1426 (a->data.non_resident.compression_unit + 1427 vol->cluster_size_bits); 1428 ni->itype.compressed.block_size_bits = 1429 ffs(ni->itype.compressed.block_size) - 1; 1430 ni->itype.compressed.block_clusters = 1U << 1431 a->data.non_resident.compression_unit; 1432 } else { 1433 ni->itype.compressed.block_size = 0; 1434 ni->itype.compressed.block_size_bits = 0; 1435 ni->itype.compressed.block_clusters = 0; 1436 } 1437 ni->itype.compressed.size = le64_to_cpu( 1438 a->data.non_resident.compressed_size); 1439 } 1440 if (a->data.non_resident.lowest_vcn) { 1441 ntfs_error(vi->i_sb, "First extent of attribute has non-zero lowest_vcn."); 1442 goto unm_err_out; 1443 } 1444 vi->i_size = ni->data_size = le64_to_cpu(a->data.non_resident.data_size); 1445 ni->initialized_size = le64_to_cpu(a->data.non_resident.initialized_size); 1446 ni->allocated_size = le64_to_cpu(a->data.non_resident.allocated_size); 1447 } 1448 vi->i_mapping->a_ops = &ntfs_aops; 1449 if ((NInoCompressed(ni) || NInoSparse(ni)) && ni->type != AT_INDEX_ROOT) 1450 vi->i_blocks = ni->itype.compressed.size >> 9; 1451 else 1452 vi->i_blocks = ni->allocated_size >> 9; 1453 /* 1454 * Make sure the base inode does not go away and attach it to the 1455 * attribute inode. 1456 */ 1457 if (!igrab(base_vi)) { 1458 err = -ENOENT; 1459 goto unm_err_out; 1460 } 1461 ni->ext.base_ntfs_ino = base_ni; 1462 ni->nr_extents = -1; 1463 1464 ntfs_attr_put_search_ctx(ctx); 1465 unmap_mft_record(base_ni); 1466 1467 ntfs_debug("Done."); 1468 return 0; 1469 1470 unm_err_out: 1471 if (!err) 1472 err = -EIO; 1473 if (ctx) 1474 ntfs_attr_put_search_ctx(ctx); 1475 unmap_mft_record(base_ni); 1476 err_out: 1477 if (err != -ENOENT && err != -EINTR && err != -ERESTARTSYS) 1478 ntfs_error(vol->sb, 1479 "Failed with error code %i while reading attribute inode (mft_no 0x%llx, type 0x%x, name_len %i). Marking corrupt inode and base inode 0x%llx as bad. Run chkdsk.", 1480 err, ni->mft_no, ni->type, ni->name_len, 1481 base_ni->mft_no); 1482 if (err != -ENOENT && err != -ENOMEM && 1483 err != -EINTR && err != -ERESTARTSYS) 1484 NVolSetErrors(vol); 1485 return err; 1486 } 1487 1488 /* 1489 * ntfs_read_locked_index_inode - read an index inode from its base inode 1490 * @base_vi: base inode 1491 * @vi: index inode to read 1492 * 1493 * ntfs_read_locked_index_inode() is called from ntfs_index_iget() to read the 1494 * index inode described by @vi into memory from the base mft record described 1495 * by @base_ni. 1496 * 1497 * ntfs_read_locked_index_inode() maps, pins and locks the base inode for 1498 * reading and looks up the attributes relating to the index described by @vi 1499 * before setting up the necessary fields in @vi as well as initializing the 1500 * ntfs inode. 1501 * 1502 * Note, index inodes are essentially attribute inodes (NInoAttr() is true) 1503 * with the attribute type set to AT_INDEX_ALLOCATION. Apart from that, they 1504 * are setup like directory inodes since directories are a special case of 1505 * indices ao they need to be treated in much the same way. Most importantly, 1506 * for small indices the index allocation attribute might not actually exist. 1507 * However, the index root attribute always exists but this does not need to 1508 * have an inode associated with it and this is why we define a new inode type 1509 * index. Also, like for directories, we need to have an attribute inode for 1510 * the bitmap attribute corresponding to the index allocation attribute and we 1511 * can store this in the appropriate field of the inode, just like we do for 1512 * normal directory inodes. 1513 * 1514 * Q: What locks are held when the function is called? 1515 * A: i_state has I_NEW set, hence the inode is locked, also 1516 * i_count is set to 1, so it is not going to go away 1517 * 1518 * Return 0 on success and -errno on error. 1519 */ 1520 static int ntfs_read_locked_index_inode(struct inode *base_vi, struct inode *vi) 1521 { 1522 loff_t bvi_size; 1523 struct ntfs_volume *vol = NTFS_SB(vi->i_sb); 1524 struct ntfs_inode *ni = NTFS_I(vi), *base_ni = NTFS_I(base_vi), *bni; 1525 struct inode *bvi; 1526 struct mft_record *m; 1527 struct attr_record *a; 1528 struct ntfs_attr_search_ctx *ctx; 1529 struct index_root *ir; 1530 int err = 0; 1531 1532 ntfs_debug("Entering for i_ino 0x%llx.", ni->mft_no); 1533 lockdep_assert_held(&base_ni->mrec_lock); 1534 1535 ntfs_init_big_inode(vi); 1536 /* Just mirror the values from the base inode. */ 1537 vi->i_uid = base_vi->i_uid; 1538 vi->i_gid = base_vi->i_gid; 1539 set_nlink(vi, base_vi->i_nlink); 1540 inode_set_mtime_to_ts(vi, inode_get_mtime(base_vi)); 1541 inode_set_ctime_to_ts(vi, inode_get_ctime(base_vi)); 1542 inode_set_atime_to_ts(vi, inode_get_atime(base_vi)); 1543 vi->i_generation = ni->seq_no = base_ni->seq_no; 1544 /* Set inode type to zero but preserve permissions. */ 1545 vi->i_mode = base_vi->i_mode & ~S_IFMT; 1546 /* Map the mft record for the base inode. */ 1547 m = map_mft_record(base_ni); 1548 if (IS_ERR(m)) { 1549 err = PTR_ERR(m); 1550 goto err_out; 1551 } 1552 ctx = ntfs_attr_get_search_ctx(base_ni, m); 1553 if (!ctx) { 1554 err = -ENOMEM; 1555 goto unm_err_out; 1556 } 1557 /* Find the index root attribute. */ 1558 err = ntfs_attr_lookup(AT_INDEX_ROOT, ni->name, ni->name_len, 1559 CASE_SENSITIVE, 0, NULL, 0, ctx); 1560 if (unlikely(err)) { 1561 if (err == -ENOENT) 1562 ntfs_error(vi->i_sb, "$INDEX_ROOT attribute is missing."); 1563 goto unm_err_out; 1564 } 1565 a = ctx->attr; 1566 /* Set up the state. */ 1567 if (unlikely(a->non_resident)) { 1568 ntfs_error(vol->sb, "$INDEX_ROOT attribute is not resident."); 1569 goto unm_err_out; 1570 } 1571 /* Ensure the attribute name is placed before the value. */ 1572 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >= 1573 le16_to_cpu(a->data.resident.value_offset)))) { 1574 ntfs_error(vol->sb, 1575 "$INDEX_ROOT attribute name is placed after the attribute value."); 1576 goto unm_err_out; 1577 } 1578 1579 ir = (struct index_root *)((u8 *)a + le16_to_cpu(a->data.resident.value_offset)); 1580 if (ntfs_index_root_inconsistent(vol, a, ir, ni->mft_no) || 1581 ntfs_index_entries_inconsistent(vol, &ir->index, 1582 ir->collation_rule, ni->mft_no)) { 1583 ntfs_error(vi->i_sb, "Index is corrupt."); 1584 goto unm_err_out; 1585 } 1586 1587 ni->itype.index.collation_rule = ir->collation_rule; 1588 ntfs_debug("Index collation rule is 0x%x.", 1589 le32_to_cpu(ir->collation_rule)); 1590 ni->itype.index.block_size = le32_to_cpu(ir->index_block_size); 1591 if (!is_power_of_2(ni->itype.index.block_size)) { 1592 ntfs_error(vi->i_sb, "Index block size (%u) is not a power of two.", 1593 ni->itype.index.block_size); 1594 goto unm_err_out; 1595 } 1596 if (ni->itype.index.block_size > PAGE_SIZE) { 1597 ntfs_error(vi->i_sb, "Index block size (%u) > PAGE_SIZE (%ld) is not supported.", 1598 ni->itype.index.block_size, PAGE_SIZE); 1599 err = -EOPNOTSUPP; 1600 goto unm_err_out; 1601 } 1602 if (ni->itype.index.block_size < NTFS_BLOCK_SIZE) { 1603 ntfs_error(vi->i_sb, 1604 "Index block size (%u) < NTFS_BLOCK_SIZE (%i) is not supported.", 1605 ni->itype.index.block_size, NTFS_BLOCK_SIZE); 1606 err = -EOPNOTSUPP; 1607 goto unm_err_out; 1608 } 1609 ni->itype.index.block_size_bits = ffs(ni->itype.index.block_size) - 1; 1610 /* Determine the size of a vcn in the index. */ 1611 if (vol->cluster_size <= ni->itype.index.block_size) { 1612 ni->itype.index.vcn_size = vol->cluster_size; 1613 ni->itype.index.vcn_size_bits = vol->cluster_size_bits; 1614 } else { 1615 ni->itype.index.vcn_size = vol->sector_size; 1616 ni->itype.index.vcn_size_bits = vol->sector_size_bits; 1617 } 1618 1619 /* Find index allocation attribute. */ 1620 ntfs_attr_reinit_search_ctx(ctx); 1621 err = ntfs_attr_lookup(AT_INDEX_ALLOCATION, ni->name, ni->name_len, 1622 CASE_SENSITIVE, 0, NULL, 0, ctx); 1623 if (unlikely(err)) { 1624 if (err == -ENOENT) { 1625 /* No index allocation. */ 1626 vi->i_size = ni->initialized_size = ni->allocated_size = 0; 1627 /* We are done with the mft record, so we release it. */ 1628 ntfs_attr_put_search_ctx(ctx); 1629 unmap_mft_record(base_ni); 1630 m = NULL; 1631 ctx = NULL; 1632 goto skip_large_index_stuff; 1633 } else 1634 ntfs_error(vi->i_sb, "Failed to lookup $INDEX_ALLOCATION attribute."); 1635 goto unm_err_out; 1636 } 1637 NInoSetIndexAllocPresent(ni); 1638 NInoSetNonResident(ni); 1639 ni->type = AT_INDEX_ALLOCATION; 1640 1641 a = ctx->attr; 1642 if (!a->non_resident) { 1643 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is resident."); 1644 goto unm_err_out; 1645 } 1646 /* 1647 * Ensure the attribute name is placed before the mapping pairs array. 1648 */ 1649 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >= 1650 le16_to_cpu(a->data.non_resident.mapping_pairs_offset)))) { 1651 ntfs_error(vol->sb, 1652 "$INDEX_ALLOCATION attribute name is placed after the mapping pairs array."); 1653 goto unm_err_out; 1654 } 1655 if (a->flags & ATTR_IS_ENCRYPTED) { 1656 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is encrypted."); 1657 goto unm_err_out; 1658 } 1659 if (a->flags & ATTR_IS_SPARSE) { 1660 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is sparse."); 1661 goto unm_err_out; 1662 } 1663 if (a->flags & ATTR_COMPRESSION_MASK) { 1664 ntfs_error(vi->i_sb, 1665 "$INDEX_ALLOCATION attribute is compressed."); 1666 goto unm_err_out; 1667 } 1668 if (a->data.non_resident.lowest_vcn) { 1669 ntfs_error(vi->i_sb, 1670 "First extent of $INDEX_ALLOCATION attribute has non zero lowest_vcn."); 1671 goto unm_err_out; 1672 } 1673 vi->i_size = ni->data_size = le64_to_cpu(a->data.non_resident.data_size); 1674 ni->initialized_size = le64_to_cpu(a->data.non_resident.initialized_size); 1675 ni->allocated_size = le64_to_cpu(a->data.non_resident.allocated_size); 1676 /* 1677 * We are done with the mft record, so we release it. Otherwise 1678 * we would deadlock in ntfs_attr_iget(). 1679 */ 1680 ntfs_attr_put_search_ctx(ctx); 1681 unmap_mft_record(base_ni); 1682 m = NULL; 1683 ctx = NULL; 1684 /* Get the index bitmap attribute inode. */ 1685 bvi = ntfs_attr_iget(base_vi, AT_BITMAP, ni->name, ni->name_len); 1686 if (IS_ERR(bvi)) { 1687 err = PTR_ERR(bvi); 1688 if (err != -EINTR && err != -ERESTARTSYS) 1689 ntfs_error(vi->i_sb, "Failed to get bitmap attribute."); 1690 goto unm_err_out; 1691 } 1692 bni = NTFS_I(bvi); 1693 if (NInoCompressed(bni) || NInoEncrypted(bni) || 1694 NInoSparse(bni)) { 1695 ntfs_error(vi->i_sb, 1696 "$BITMAP attribute is compressed and/or encrypted and/or sparse."); 1697 goto iput_unm_err_out; 1698 } 1699 /* Consistency check bitmap size vs. index allocation size. */ 1700 bvi_size = i_size_read(bvi); 1701 if ((bvi_size << 3) < (vi->i_size >> ni->itype.index.block_size_bits)) { 1702 ntfs_error(vi->i_sb, 1703 "Index bitmap too small (0x%llx) for index allocation (0x%llx).", 1704 bvi_size << 3, vi->i_size); 1705 goto iput_unm_err_out; 1706 } 1707 iput(bvi); 1708 skip_large_index_stuff: 1709 /* Setup the operations for this index inode. */ 1710 ntfs_set_vfs_operations(vi, S_IFDIR, 0); 1711 vi->i_blocks = ni->allocated_size >> 9; 1712 /* 1713 * Make sure the base inode doesn't go away and attach it to the 1714 * index inode. 1715 */ 1716 if (!igrab(base_vi)) 1717 goto unm_err_out; 1718 ni->ext.base_ntfs_ino = base_ni; 1719 ni->nr_extents = -1; 1720 1721 ntfs_debug("Done."); 1722 return 0; 1723 iput_unm_err_out: 1724 iput(bvi); 1725 unm_err_out: 1726 if (!err) 1727 err = -EIO; 1728 if (ctx) 1729 ntfs_attr_put_search_ctx(ctx); 1730 if (m) 1731 unmap_mft_record(base_ni); 1732 err_out: 1733 if (err != -EINTR && err != -ERESTARTSYS) 1734 ntfs_error(vi->i_sb, 1735 "Failed with error code %i while reading index inode (mft_no 0x%llx, name_len %i.", 1736 err, ni->mft_no, ni->name_len); 1737 if (err != -EOPNOTSUPP && err != -ENOMEM && 1738 err != -EINTR && err != -ERESTARTSYS) 1739 NVolSetErrors(vol); 1740 return err; 1741 } 1742 1743 /* 1744 * load_attribute_list_mount - load an attribute list into memory 1745 * @vol: ntfs volume from which to read 1746 * @rl: runlist of the attribute list 1747 * @al_start: destination buffer 1748 * @size: size of the destination buffer in bytes 1749 * @initialized_size: initialized size of the attribute list 1750 * 1751 * Walk the runlist @rl and load all clusters from it copying them into 1752 * the linear buffer @al. The maximum number of bytes copied to @al is @size 1753 * bytes. Note, @size does not need to be a multiple of the cluster size. If 1754 * @initialized_size is less than @size, the region in @al between 1755 * @initialized_size and @size will be zeroed and not read from disk. 1756 * 1757 * Return 0 on success or -errno on error. 1758 */ 1759 static int load_attribute_list_mount(struct ntfs_volume *vol, 1760 struct runlist_element *rl, u8 *al_start, const s64 size, 1761 const s64 initialized_size) 1762 { 1763 s64 lcn; 1764 u8 *al = al_start; 1765 u8 *al_end = al + initialized_size; 1766 struct super_block *sb; 1767 int err = 0; 1768 loff_t rl_byte_off, rl_byte_len; 1769 1770 ntfs_debug("Entering."); 1771 if (!vol || !rl || !al || size <= 0 || initialized_size < 0 || 1772 initialized_size > size) 1773 return -EINVAL; 1774 if (!initialized_size) { 1775 memset(al, 0, size); 1776 return 0; 1777 } 1778 sb = vol->sb; 1779 1780 /* Read all clusters specified by the runlist one run at a time. */ 1781 while (rl->length) { 1782 lcn = ntfs_rl_vcn_to_lcn(rl, rl->vcn); 1783 ntfs_debug("Reading vcn = 0x%llx, lcn = 0x%llx.", 1784 (unsigned long long)rl->vcn, 1785 (unsigned long long)lcn); 1786 /* The attribute list cannot be sparse. */ 1787 if (lcn < 0) { 1788 ntfs_error(sb, "ntfs_rl_vcn_to_lcn() failed. Cannot read attribute list."); 1789 return -EIO; 1790 } 1791 1792 rl_byte_off = ntfs_cluster_to_bytes(vol, lcn); 1793 rl_byte_len = ntfs_cluster_to_bytes(vol, rl->length); 1794 1795 if (al + rl_byte_len > al_end) 1796 rl_byte_len = al_end - al; 1797 1798 err = ntfs_bdev_read(sb->s_bdev, al, rl_byte_off, 1799 round_up(rl_byte_len, SECTOR_SIZE)); 1800 if (err) { 1801 ntfs_error(sb, "Cannot read attribute list."); 1802 return -EIO; 1803 } 1804 1805 if (al + rl_byte_len >= al_end) { 1806 if (initialized_size < size) 1807 goto initialize; 1808 goto done; 1809 } 1810 1811 al += rl_byte_len; 1812 rl++; 1813 } 1814 if (initialized_size < size) { 1815 initialize: 1816 memset(al_start + initialized_size, 0, size - initialized_size); 1817 } 1818 done: 1819 return err; 1820 } 1821 1822 /* 1823 * The MFT inode has special locking, so teach the lock validator 1824 * about this by splitting off the locking rules of the MFT from 1825 * the locking rules of other inodes. The MFT inode can never be 1826 * accessed from the VFS side (or even internally), only by the 1827 * map_mft functions. 1828 */ 1829 static struct lock_class_key mft_ni_runlist_lock_key, mft_ni_mrec_lock_key; 1830 1831 /* 1832 * ntfs_read_inode_mount - special read_inode for mount time use only 1833 * @vi: inode to read 1834 * 1835 * Read inode FILE_MFT at mount time, only called with super_block lock 1836 * held from within the read_super() code path. 1837 * 1838 * This function exists because when it is called the page cache for $MFT/$DATA 1839 * is not initialized and hence we cannot get at the contents of mft records 1840 * by calling map_mft_record*(). 1841 * 1842 * Further it needs to cope with the circular references problem, i.e. cannot 1843 * load any attributes other than $ATTRIBUTE_LIST until $DATA is loaded, because 1844 * we do not know where the other extent mft records are yet and again, because 1845 * we cannot call map_mft_record*() yet. Obviously this applies only when an 1846 * attribute list is actually present in $MFT inode. 1847 * 1848 * We solve these problems by starting with the $DATA attribute before anything 1849 * else and iterating using ntfs_attr_lookup($DATA) over all extents. As each 1850 * extent is found, we ntfs_mapping_pairs_decompress() including the implied 1851 * ntfs_runlists_merge(). Each step of the iteration necessarily provides 1852 * sufficient information for the next step to complete. 1853 * 1854 * This should work but there are two possible pit falls (see inline comments 1855 * below), but only time will tell if they are real pits or just smoke... 1856 */ 1857 int ntfs_read_inode_mount(struct inode *vi) 1858 { 1859 s64 next_vcn, last_vcn, highest_vcn; 1860 struct super_block *sb = vi->i_sb; 1861 struct ntfs_volume *vol = NTFS_SB(sb); 1862 struct ntfs_inode *ni = NTFS_I(vi); 1863 struct mft_record *m = NULL; 1864 struct attr_record *a; 1865 struct ntfs_attr_search_ctx *ctx; 1866 unsigned int i; 1867 int err; 1868 size_t new_rl_count; 1869 1870 ntfs_debug("Entering."); 1871 1872 /* Initialize the ntfs specific part of @vi. */ 1873 ntfs_init_big_inode(vi); 1874 1875 1876 /* Setup the data attribute. It is special as it is mst protected. */ 1877 NInoSetNonResident(ni); 1878 NInoSetMstProtected(ni); 1879 NInoSetSparseDisabled(ni); 1880 ni->type = AT_DATA; 1881 ni->name = AT_UNNAMED; 1882 ni->name_len = 0; 1883 /* 1884 * This sets up our little cheat allowing us to reuse the async read io 1885 * completion handler for directories. 1886 */ 1887 ni->itype.index.block_size = vol->mft_record_size; 1888 ni->itype.index.block_size_bits = vol->mft_record_size_bits; 1889 1890 /* Very important! Needed to be able to call map_mft_record*(). */ 1891 vol->mft_ino = vi; 1892 1893 /* Allocate enough memory to read the first mft record. */ 1894 if (vol->mft_record_size > 64 * 1024) { 1895 ntfs_error(sb, "Unsupported mft record size %i (max 64kiB).", 1896 vol->mft_record_size); 1897 goto err_out; 1898 } 1899 1900 i = vol->mft_record_size; 1901 if (i < sb->s_blocksize) 1902 i = sb->s_blocksize; 1903 1904 m = kzalloc(i, GFP_NOFS); 1905 if (!m) { 1906 ntfs_error(sb, "Failed to allocate buffer for $MFT record 0."); 1907 goto err_out; 1908 } 1909 1910 /* Load $MFT/$DATA's first mft record. */ 1911 err = ntfs_bdev_read(sb->s_bdev, (char *)m, 1912 ntfs_cluster_to_bytes(vol, vol->mft_lcn), i); 1913 if (err) { 1914 ntfs_error(sb, "Device read failed."); 1915 goto err_out; 1916 } 1917 1918 if (le32_to_cpu(m->bytes_allocated) != vol->mft_record_size) { 1919 ntfs_error(sb, "Incorrect mft record size %u in superblock, should be %u.", 1920 le32_to_cpu(m->bytes_allocated), vol->mft_record_size); 1921 goto err_out; 1922 } 1923 1924 /* Apply the mst fixups. */ 1925 if (post_read_mst_fixup((struct ntfs_record *)m, vol->mft_record_size)) { 1926 ntfs_error(sb, "MST fixup failed. $MFT is corrupt."); 1927 goto err_out; 1928 } 1929 1930 if (ntfs_mft_record_check(vol, m, FILE_MFT)) { 1931 ntfs_error(sb, "ntfs_mft_record_check failed. $MFT is corrupt."); 1932 goto err_out; 1933 } 1934 1935 /* Need this to sanity check attribute list references to $MFT. */ 1936 vi->i_generation = ni->seq_no = le16_to_cpu(m->sequence_number); 1937 1938 /* Provides read_folio() for map_mft_record(). */ 1939 vi->i_mapping->a_ops = &ntfs_mft_aops; 1940 1941 ctx = ntfs_attr_get_search_ctx(ni, m); 1942 if (!ctx) { 1943 err = -ENOMEM; 1944 goto err_out; 1945 } 1946 1947 /* Find the attribute list attribute if present. */ 1948 err = ntfs_attr_lookup(AT_ATTRIBUTE_LIST, NULL, 0, 0, 0, NULL, 0, ctx); 1949 if (err) { 1950 if (unlikely(err != -ENOENT)) { 1951 ntfs_error(sb, 1952 "Failed to lookup attribute list attribute. You should run chkdsk."); 1953 goto put_err_out; 1954 } 1955 } else /* if (!err) */ { 1956 struct attr_list_entry *al_entry, *next_al_entry; 1957 u8 *al_end; 1958 static const char *es = " Not allowed. $MFT is corrupt. You should run chkdsk."; 1959 1960 ntfs_debug("Attribute list attribute found in $MFT."); 1961 NInoSetAttrList(ni); 1962 a = ctx->attr; 1963 if (a->flags & ATTR_COMPRESSION_MASK) { 1964 ntfs_error(sb, 1965 "Attribute list attribute is compressed.%s", 1966 es); 1967 goto put_err_out; 1968 } 1969 if (a->flags & ATTR_IS_ENCRYPTED || 1970 a->flags & ATTR_IS_SPARSE) { 1971 if (a->non_resident) { 1972 ntfs_error(sb, 1973 "Non-resident attribute list attribute is encrypted/sparse.%s", 1974 es); 1975 goto put_err_out; 1976 } 1977 ntfs_warning(sb, 1978 "Resident attribute list attribute in $MFT system file is marked encrypted/sparse which is not true. However, Windows allows this and chkdsk does not detect or correct it so we will just ignore the invalid flags and pretend they are not set."); 1979 } 1980 /* Now allocate memory for the attribute list. */ 1981 ni->attr_list_size = (u32)ntfs_attr_size(a); 1982 if (!ni->attr_list_size) { 1983 ntfs_error(sb, "Attr_list_size is zero"); 1984 goto put_err_out; 1985 } 1986 ni->attr_list = kvzalloc(round_up(ni->attr_list_size, SECTOR_SIZE), 1987 GFP_NOFS); 1988 if (!ni->attr_list) { 1989 ntfs_error(sb, "Not enough memory to allocate buffer for attribute list."); 1990 goto put_err_out; 1991 } 1992 if (a->non_resident) { 1993 struct runlist_element *rl; 1994 size_t new_rl_count; 1995 1996 NInoSetAttrListNonResident(ni); 1997 if (a->data.non_resident.lowest_vcn) { 1998 ntfs_error(sb, 1999 "Attribute list has non zero lowest_vcn. $MFT is corrupt. You should run chkdsk."); 2000 goto put_err_out; 2001 } 2002 2003 rl = ntfs_mapping_pairs_decompress(vol, a, NULL, &new_rl_count); 2004 if (IS_ERR(rl)) { 2005 err = PTR_ERR(rl); 2006 ntfs_error(sb, 2007 "Mapping pairs decompression failed with error code %i.", 2008 -err); 2009 goto put_err_out; 2010 } 2011 2012 err = load_attribute_list_mount(vol, rl, ni->attr_list, ni->attr_list_size, 2013 le64_to_cpu(a->data.non_resident.initialized_size)); 2014 kvfree(rl); 2015 if (err) { 2016 ntfs_error(sb, 2017 "Failed to load attribute list with error code %i.", 2018 -err); 2019 goto put_err_out; 2020 } 2021 } else /* if (!ctx.attr->non_resident) */ { 2022 /* Now copy the attribute list. */ 2023 memcpy(ni->attr_list, (u8 *)a + le16_to_cpu( 2024 a->data.resident.value_offset), 2025 le32_to_cpu(a->data.resident.value_length)); 2026 } 2027 /* The attribute list is now setup in memory. */ 2028 al_entry = (struct attr_list_entry *)ni->attr_list; 2029 al_end = (u8 *)al_entry + ni->attr_list_size; 2030 for (;; al_entry = next_al_entry) { 2031 /* Out of bounds check. */ 2032 if ((u8 *)al_entry < ni->attr_list || 2033 (u8 *)al_entry > al_end) 2034 goto em_put_err_out; 2035 /* Catch the end of the attribute list. */ 2036 if ((u8 *)al_entry == al_end) 2037 goto em_put_err_out; 2038 if (!ntfs_attr_list_entry_is_valid(al_entry, al_end)) 2039 goto em_put_err_out; 2040 next_al_entry = (struct attr_list_entry *)((u8 *)al_entry + 2041 le16_to_cpu(al_entry->length)); 2042 if (le32_to_cpu(al_entry->type) > le32_to_cpu(AT_DATA)) 2043 goto em_put_err_out; 2044 if (al_entry->type != AT_DATA) 2045 continue; 2046 /* We want an unnamed attribute. */ 2047 if (al_entry->name_length) 2048 goto em_put_err_out; 2049 /* Want the first entry, i.e. lowest_vcn == 0. */ 2050 if (al_entry->lowest_vcn) 2051 goto em_put_err_out; 2052 /* First entry has to be in the base mft record. */ 2053 if (MREF_LE(al_entry->mft_reference) != vi->i_ino) { 2054 /* MFT references do not match, logic fails. */ 2055 ntfs_error(sb, 2056 "BUG: The first $DATA extent of $MFT is not in the base mft record."); 2057 goto put_err_out; 2058 } else { 2059 /* Sequence numbers must match. */ 2060 if (MSEQNO_LE(al_entry->mft_reference) != 2061 ni->seq_no) 2062 goto em_put_err_out; 2063 /* Got it. All is ok. We can stop now. */ 2064 break; 2065 } 2066 } 2067 } 2068 2069 ntfs_attr_reinit_search_ctx(ctx); 2070 2071 /* Now load all attribute extents. */ 2072 a = NULL; 2073 next_vcn = last_vcn = highest_vcn = 0; 2074 while (!(err = ntfs_attr_lookup(AT_DATA, NULL, 0, 0, next_vcn, NULL, 0, 2075 ctx))) { 2076 struct runlist_element *nrl; 2077 2078 /* Cache the current attribute. */ 2079 a = ctx->attr; 2080 /* $MFT must be non-resident. */ 2081 if (!a->non_resident) { 2082 ntfs_error(sb, 2083 "$MFT must be non-resident but a resident extent was found. $MFT is corrupt. Run chkdsk."); 2084 goto put_err_out; 2085 } 2086 /* $MFT must be uncompressed and unencrypted. */ 2087 if (a->flags & ATTR_COMPRESSION_MASK || 2088 a->flags & ATTR_IS_ENCRYPTED || 2089 a->flags & ATTR_IS_SPARSE) { 2090 ntfs_error(sb, 2091 "$MFT must be uncompressed, non-sparse, and unencrypted but a compressed/sparse/encrypted extent was found. $MFT is corrupt. Run chkdsk."); 2092 goto put_err_out; 2093 } 2094 /* 2095 * Decompress the mapping pairs array of this extent and merge 2096 * the result into the existing runlist. No need for locking 2097 * as we have exclusive access to the inode at this time and we 2098 * are a mount in progress task, too. 2099 */ 2100 nrl = ntfs_mapping_pairs_decompress(vol, a, &ni->runlist, 2101 &new_rl_count); 2102 if (IS_ERR(nrl)) { 2103 ntfs_error(sb, 2104 "ntfs_mapping_pairs_decompress() failed with error code %ld.", 2105 PTR_ERR(nrl)); 2106 goto put_err_out; 2107 } 2108 ni->runlist.rl = nrl; 2109 ni->runlist.count = new_rl_count; 2110 2111 /* Are we in the first extent? */ 2112 if (!next_vcn) { 2113 if (a->data.non_resident.lowest_vcn) { 2114 ntfs_error(sb, 2115 "First extent of $DATA attribute has non zero lowest_vcn. $MFT is corrupt. You should run chkdsk."); 2116 goto put_err_out; 2117 } 2118 /* Get the last vcn in the $DATA attribute. */ 2119 last_vcn = ntfs_bytes_to_cluster(vol, 2120 le64_to_cpu(a->data.non_resident.allocated_size)); 2121 /* Fill in the inode size. */ 2122 vi->i_size = le64_to_cpu(a->data.non_resident.data_size); 2123 ni->initialized_size = le64_to_cpu(a->data.non_resident.initialized_size); 2124 ni->allocated_size = le64_to_cpu(a->data.non_resident.allocated_size); 2125 /* 2126 * Verify the number of mft records does not exceed 2127 * 2^32 - 1. 2128 */ 2129 if ((vi->i_size >> vol->mft_record_size_bits) >= 2130 (1ULL << 32)) { 2131 ntfs_error(sb, "$MFT is too big! Aborting."); 2132 goto put_err_out; 2133 } 2134 /* 2135 * We have got the first extent of the runlist for 2136 * $MFT which means it is now relatively safe to call 2137 * the normal ntfs_read_inode() function. 2138 * Complete reading the inode, this will actually 2139 * re-read the mft record for $MFT, this time entering 2140 * it into the page cache with which we complete the 2141 * kick start of the volume. It should be safe to do 2142 * this now as the first extent of $MFT/$DATA is 2143 * already known and we would hope that we don't need 2144 * further extents in order to find the other 2145 * attributes belonging to $MFT. Only time will tell if 2146 * this is really the case. If not we will have to play 2147 * magic at this point, possibly duplicating a lot of 2148 * ntfs_read_inode() at this point. We will need to 2149 * ensure we do enough of its work to be able to call 2150 * ntfs_read_inode() on extents of $MFT/$DATA. But lets 2151 * hope this never happens... 2152 */ 2153 err = ntfs_read_locked_inode(vi); 2154 if (err) { 2155 ntfs_error(sb, "ntfs_read_inode() of $MFT failed.\n"); 2156 ntfs_attr_put_search_ctx(ctx); 2157 /* Revert to the safe super operations. */ 2158 kfree(m); 2159 return -1; 2160 } 2161 /* 2162 * Re-initialize some specifics about $MFT's inode as 2163 * ntfs_read_inode() will have set up the default ones. 2164 */ 2165 /* Set uid and gid to root. */ 2166 vi->i_uid = GLOBAL_ROOT_UID; 2167 vi->i_gid = GLOBAL_ROOT_GID; 2168 /* Regular file. No access for anyone. */ 2169 vi->i_mode = S_IFREG; 2170 /* No VFS initiated operations allowed for $MFT. */ 2171 vi->i_op = &ntfs_empty_inode_ops; 2172 vi->i_fop = &ntfs_empty_file_ops; 2173 } 2174 2175 /* Get the lowest vcn for the next extent. */ 2176 highest_vcn = le64_to_cpu(a->data.non_resident.highest_vcn); 2177 next_vcn = highest_vcn + 1; 2178 2179 /* Only one extent or error, which we catch below. */ 2180 if (next_vcn <= 0) 2181 break; 2182 2183 /* Avoid endless loops due to corruption. */ 2184 if (next_vcn < le64_to_cpu(a->data.non_resident.lowest_vcn)) { 2185 ntfs_error(sb, "$MFT has corrupt attribute list attribute. Run chkdsk."); 2186 goto put_err_out; 2187 } 2188 } 2189 if (err != -ENOENT) { 2190 ntfs_error(sb, "Failed to lookup $MFT/$DATA attribute extent. Run chkdsk.\n"); 2191 goto put_err_out; 2192 } 2193 if (!a) { 2194 ntfs_error(sb, "$MFT/$DATA attribute not found. $MFT is corrupt. Run chkdsk."); 2195 goto put_err_out; 2196 } 2197 if (highest_vcn && highest_vcn != last_vcn - 1) { 2198 ntfs_error(sb, "Failed to load the complete runlist for $MFT/$DATA. Run chkdsk."); 2199 ntfs_debug("highest_vcn = 0x%llx, last_vcn - 1 = 0x%llx", 2200 (unsigned long long)highest_vcn, 2201 (unsigned long long)last_vcn - 1); 2202 goto put_err_out; 2203 } 2204 ntfs_attr_put_search_ctx(ctx); 2205 ntfs_debug("Done."); 2206 kfree(m); 2207 2208 /* 2209 * Split the locking rules of the MFT inode from the 2210 * locking rules of other inodes: 2211 */ 2212 lockdep_set_class(&ni->runlist.lock, &mft_ni_runlist_lock_key); 2213 lockdep_set_class(&ni->mrec_lock, &mft_ni_mrec_lock_key); 2214 2215 return 0; 2216 2217 em_put_err_out: 2218 ntfs_error(sb, 2219 "Couldn't find first extent of $DATA attribute in attribute list. $MFT is corrupt. Run chkdsk."); 2220 put_err_out: 2221 ntfs_attr_put_search_ctx(ctx); 2222 err_out: 2223 ntfs_error(sb, "Failed. Marking inode as bad."); 2224 kfree(m); 2225 return -1; 2226 } 2227 2228 static void __ntfs_clear_inode(struct ntfs_inode *ni) 2229 { 2230 /* Free all alocated memory. */ 2231 if (NInoNonResident(ni) && ni->runlist.rl) { 2232 kvfree(ni->runlist.rl); 2233 ni->runlist.rl = NULL; 2234 } 2235 2236 if (ni->attr_list) { 2237 kvfree(ni->attr_list); 2238 ni->attr_list = NULL; 2239 } 2240 2241 if (ni->name_len && ni->name != I30 && 2242 ni->name != reparse_index_name && 2243 ni->name != objid_index_name) { 2244 WARN_ON(!ni->name); 2245 kfree(ni->name); 2246 } 2247 } 2248 2249 void ntfs_clear_extent_inode(struct ntfs_inode *ni) 2250 { 2251 ntfs_debug("Entering for inode 0x%llx.", ni->mft_no); 2252 2253 WARN_ON(NInoAttr(ni)); 2254 WARN_ON(ni->nr_extents != -1); 2255 2256 __ntfs_clear_inode(ni); 2257 ntfs_destroy_extent_inode(ni); 2258 } 2259 2260 static int ntfs_delete_base_inode(struct ntfs_inode *ni) 2261 { 2262 struct super_block *sb = ni->vol->sb; 2263 int err; 2264 2265 if (NInoAttr(ni) || ni->nr_extents == -1) 2266 return 0; 2267 2268 err = ntfs_non_resident_dealloc_clusters(ni); 2269 2270 /* 2271 * Deallocate extent mft records and free extent inodes. 2272 * No need to lock as no one else has a reference. 2273 */ 2274 while (ni->nr_extents) { 2275 err = ntfs_mft_record_free(ni->vol, *(ni->ext.extent_ntfs_inos)); 2276 if (err) 2277 ntfs_error(sb, 2278 "Failed to free extent MFT record. Leaving inconsistent metadata.\n"); 2279 ntfs_inode_close(*(ni->ext.extent_ntfs_inos)); 2280 } 2281 2282 /* Deallocate base mft record */ 2283 err = ntfs_mft_record_free(ni->vol, ni); 2284 if (err) 2285 ntfs_error(sb, "Failed to free base MFT record. Leaving inconsistent metadata.\n"); 2286 return err; 2287 } 2288 2289 /* 2290 * ntfs_evict_big_inode - clean up the ntfs specific part of an inode 2291 * @vi: vfs inode pending annihilation 2292 * 2293 * When the VFS is going to remove an inode from memory, ntfs_clear_big_inode() 2294 * is called, which deallocates all memory belonging to the NTFS specific part 2295 * of the inode and returns. 2296 * 2297 * If the MFT record is dirty, we commit it before doing anything else. 2298 */ 2299 void ntfs_evict_big_inode(struct inode *vi) 2300 { 2301 struct ntfs_inode *ni = NTFS_I(vi); 2302 2303 truncate_inode_pages_final(&vi->i_data); 2304 2305 if (!vi->i_nlink) { 2306 if (!NInoAttr(ni)) { 2307 /* Never called with extent inodes */ 2308 WARN_ON(ni->nr_extents == -1); 2309 ntfs_delete_base_inode(ni); 2310 } 2311 goto release; 2312 } 2313 2314 if (NInoDirty(ni)) { 2315 /* Committing the inode also commits all extent inodes. */ 2316 ntfs_commit_inode(vi); 2317 2318 if (NInoDirty(ni)) { 2319 ntfs_debug("Failed to commit dirty inode 0x%llx. Losing data!", 2320 ni->mft_no); 2321 NInoClearAttrListDirty(ni); 2322 NInoClearDirty(ni); 2323 } 2324 } 2325 2326 /* No need to lock at this stage as no one else has a reference. */ 2327 if (ni->nr_extents > 0) { 2328 int i; 2329 2330 for (i = 0; i < ni->nr_extents; i++) { 2331 if (ni->ext.extent_ntfs_inos[i]) 2332 ntfs_clear_extent_inode(ni->ext.extent_ntfs_inos[i]); 2333 } 2334 ni->nr_extents = 0; 2335 kvfree(ni->ext.extent_ntfs_inos); 2336 } 2337 2338 release: 2339 clear_inode(vi); 2340 __ntfs_clear_inode(ni); 2341 2342 if (NInoAttr(ni)) { 2343 /* Release the base inode if we are holding it. */ 2344 if (ni->nr_extents == -1) { 2345 iput(VFS_I(ni->ext.base_ntfs_ino)); 2346 ni->nr_extents = 0; 2347 ni->ext.base_ntfs_ino = NULL; 2348 } 2349 } 2350 2351 if (!atomic_dec_and_test(&ni->count)) 2352 WARN_ON(1); 2353 if (ni->folio) 2354 folio_put(ni->folio); 2355 kfree(ni->mrec); 2356 kvfree(ni->target); 2357 } 2358 2359 /* 2360 * ntfs_show_options - show mount options in /proc/mounts 2361 * @sf: seq_file in which to write our mount options 2362 * @root: root of the mounted tree whose mount options to display 2363 * 2364 * Called by the VFS once for each mounted ntfs volume when someone reads 2365 * /proc/mounts in order to display the NTFS specific mount options of each 2366 * mount. The mount options of fs specified by @root are written to the seq file 2367 * @sf and success is returned. 2368 */ 2369 int ntfs_show_options(struct seq_file *sf, struct dentry *root) 2370 { 2371 struct ntfs_volume *vol = NTFS_SB(root->d_sb); 2372 int i; 2373 2374 if (uid_valid(vol->uid)) 2375 seq_printf(sf, ",uid=%i", from_kuid_munged(&init_user_ns, vol->uid)); 2376 if (gid_valid(vol->gid)) 2377 seq_printf(sf, ",gid=%i", from_kgid_munged(&init_user_ns, vol->gid)); 2378 if (vol->fmask == vol->dmask) 2379 seq_printf(sf, ",umask=0%o", vol->fmask); 2380 else { 2381 seq_printf(sf, ",fmask=0%o", vol->fmask); 2382 seq_printf(sf, ",dmask=0%o", vol->dmask); 2383 } 2384 seq_printf(sf, ",iocharset=%s", vol->nls_map->charset); 2385 if (NVolCaseSensitive(vol)) 2386 seq_puts(sf, ",case_sensitive"); 2387 else 2388 seq_puts(sf, ",nocase"); 2389 if (NVolShowSystemFiles(vol)) 2390 seq_puts(sf, ",show_sys_files,showmeta"); 2391 for (i = 0; on_errors_arr[i].val; i++) { 2392 if (on_errors_arr[i].val == vol->on_errors) 2393 seq_printf(sf, ",errors=%s", on_errors_arr[i].str); 2394 } 2395 seq_printf(sf, ",mft_zone_multiplier=%i", vol->mft_zone_multiplier); 2396 if (NVolSysImmutable(vol)) 2397 seq_puts(sf, ",sys_immutable"); 2398 if (!NVolShowHiddenFiles(vol)) 2399 seq_puts(sf, ",nohidden"); 2400 if (NVolHideDotFiles(vol)) 2401 seq_puts(sf, ",hide_dot_files"); 2402 if (NVolCheckWindowsNames(vol)) 2403 seq_puts(sf, ",windows_names"); 2404 if (NVolDiscard(vol)) 2405 seq_puts(sf, ",discard"); 2406 if (NVolDisableSparse(vol)) 2407 seq_puts(sf, ",disable_sparse"); 2408 if (NVolNativeSymlinkRel(vol)) 2409 seq_puts(sf, ",native_symlink=rel"); 2410 else 2411 seq_puts(sf, ",native_symlink=raw"); 2412 if (NVolSymlinkNative(vol)) 2413 seq_puts(sf, ",symlink=native"); 2414 else 2415 seq_puts(sf, ",symlink=wsl"); 2416 if (vol->sb->s_flags & SB_POSIXACL) 2417 seq_puts(sf, ",acl"); 2418 return 0; 2419 } 2420 2421 int ntfs_extend_initialized_size(struct inode *vi, const loff_t offset, 2422 const loff_t new_size) 2423 { 2424 struct ntfs_inode *ni = NTFS_I(vi); 2425 loff_t old_init_size; 2426 unsigned long flags; 2427 int err; 2428 2429 read_lock_irqsave(&ni->size_lock, flags); 2430 old_init_size = ni->initialized_size; 2431 read_unlock_irqrestore(&ni->size_lock, flags); 2432 2433 if (!NInoNonResident(ni)) 2434 return -EINVAL; 2435 if (old_init_size >= new_size) 2436 return 0; 2437 2438 err = ntfs_attr_map_whole_runlist(ni); 2439 if (err) 2440 return err; 2441 2442 if (!NInoCompressed(ni) && old_init_size < offset) { 2443 err = iomap_zero_range(vi, old_init_size, 2444 offset - old_init_size, 2445 NULL, &ntfs_seek_iomap_ops, 2446 &ntfs_iomap_folio_ops, NULL); 2447 if (err) 2448 return err; 2449 } 2450 2451 2452 mutex_lock(&ni->mrec_lock); 2453 err = ntfs_attr_set_initialized_size(ni, new_size); 2454 mutex_unlock(&ni->mrec_lock); 2455 if (err) 2456 truncate_setsize(vi, old_init_size); 2457 return err; 2458 } 2459 2460 int ntfs_truncate_vfs(struct inode *vi, loff_t new_size, loff_t i_size) 2461 { 2462 struct ntfs_inode *ni = NTFS_I(vi); 2463 int err; 2464 2465 mutex_lock(&ni->mrec_lock); 2466 err = __ntfs_attr_truncate_vfs(ni, new_size, i_size); 2467 mutex_unlock(&ni->mrec_lock); 2468 if (err < 0) 2469 return err; 2470 2471 inode_set_mtime_to_ts(vi, inode_set_ctime_current(vi)); 2472 return 0; 2473 } 2474 2475 /* 2476 * ntfs_inode_sync_standard_information - update standard information attribute 2477 * @vi: inode to update standard information 2478 * @m: mft record 2479 * 2480 * Return 0 on success or -errno on error. 2481 */ 2482 static int ntfs_inode_sync_standard_information(struct inode *vi, struct mft_record *m) 2483 { 2484 struct ntfs_inode *ni = NTFS_I(vi); 2485 struct ntfs_attr_search_ctx *ctx; 2486 struct standard_information *si; 2487 __le64 nt; 2488 int err = 0; 2489 bool modified = false; 2490 2491 /* Update the access times in the standard information attribute. */ 2492 ctx = ntfs_attr_get_search_ctx(ni, m); 2493 if (unlikely(!ctx)) 2494 return -ENOMEM; 2495 err = ntfs_attr_lookup(AT_STANDARD_INFORMATION, NULL, 0, 2496 CASE_SENSITIVE, 0, NULL, 0, ctx); 2497 if (unlikely(err)) { 2498 ntfs_attr_put_search_ctx(ctx); 2499 return err; 2500 } 2501 si = (struct standard_information *)((u8 *)ctx->attr + 2502 le16_to_cpu(ctx->attr->data.resident.value_offset)); 2503 if (si->file_attributes != ni->flags) { 2504 si->file_attributes = ni->flags; 2505 modified = true; 2506 } 2507 2508 /* Update the creation times if they have changed. */ 2509 nt = utc2ntfs(ni->i_crtime); 2510 if (si->creation_time != nt) { 2511 ntfs_debug("Updating creation time for inode 0x%llx: old = 0x%llx, new = 0x%llx", 2512 ni->mft_no, le64_to_cpu(si->creation_time), 2513 le64_to_cpu(nt)); 2514 si->creation_time = nt; 2515 modified = true; 2516 } 2517 2518 /* Update the access times if they have changed. */ 2519 nt = utc2ntfs(inode_get_mtime(vi)); 2520 if (si->last_data_change_time != nt) { 2521 ntfs_debug("Updating mtime for inode 0x%llx: old = 0x%llx, new = 0x%llx", 2522 ni->mft_no, le64_to_cpu(si->last_data_change_time), 2523 le64_to_cpu(nt)); 2524 si->last_data_change_time = nt; 2525 modified = true; 2526 } 2527 2528 nt = utc2ntfs(inode_get_ctime(vi)); 2529 if (si->last_mft_change_time != nt) { 2530 ntfs_debug("Updating ctime for inode 0x%llx: old = 0x%llx, new = 0x%llx", 2531 ni->mft_no, le64_to_cpu(si->last_mft_change_time), 2532 le64_to_cpu(nt)); 2533 si->last_mft_change_time = nt; 2534 modified = true; 2535 } 2536 nt = utc2ntfs(inode_get_atime(vi)); 2537 if (si->last_access_time != nt) { 2538 ntfs_debug("Updating atime for inode 0x%llx: old = 0x%llx, new = 0x%llx", 2539 ni->mft_no, 2540 le64_to_cpu(si->last_access_time), 2541 le64_to_cpu(nt)); 2542 si->last_access_time = nt; 2543 modified = true; 2544 } 2545 2546 /* 2547 * If we just modified the standard information attribute we need to 2548 * mark the mft record it is in dirty. We do this manually so that 2549 * mark_inode_dirty() is not called which would redirty the inode and 2550 * hence result in an infinite loop of trying to write the inode. 2551 * There is no need to mark the base inode nor the base mft record 2552 * dirty, since we are going to write this mft record below in any case 2553 * and the base mft record may actually not have been modified so it 2554 * might not need to be written out. 2555 * NOTE: It is not a problem when the inode for $MFT itself is being 2556 * written out as ntfs_mft_mark_dirty() will only set I_DIRTY_PAGES 2557 * on the $MFT inode and hence ntfs_write_inode() will not be 2558 * re-invoked because of it which in turn is ok since the dirtied mft 2559 * record will be cleaned and written out to disk below, i.e. before 2560 * this function returns. 2561 */ 2562 if (modified) 2563 NInoSetDirty(ctx->ntfs_ino); 2564 ntfs_attr_put_search_ctx(ctx); 2565 2566 return err; 2567 } 2568 2569 /* 2570 * ntfs_inode_sync_filename - update FILE_NAME attributes 2571 * @ni: ntfs inode to update FILE_NAME attributes 2572 * 2573 * Update all FILE_NAME attributes for inode @ni in the index. 2574 * 2575 * Return 0 on success or error. 2576 */ 2577 int ntfs_inode_sync_filename(struct ntfs_inode *ni) 2578 { 2579 struct inode *index_vi; 2580 struct super_block *sb = VFS_I(ni)->i_sb; 2581 struct ntfs_attr_search_ctx *ctx = NULL; 2582 struct ntfs_index_context *ictx; 2583 struct ntfs_inode *index_ni; 2584 struct file_name_attr *fn; 2585 struct file_name_attr *fnx; 2586 struct reparse_point *rpp; 2587 __le32 reparse_tag; 2588 int err = 0; 2589 unsigned long flags; 2590 2591 ntfs_debug("Entering for inode %llu\n", ni->mft_no); 2592 2593 ctx = ntfs_attr_get_search_ctx(ni, NULL); 2594 if (!ctx) 2595 return -ENOMEM; 2596 2597 /* Collect the reparse tag, if any */ 2598 reparse_tag = cpu_to_le32(0); 2599 if (ni->flags & FILE_ATTR_REPARSE_POINT) { 2600 if (!ntfs_attr_lookup(AT_REPARSE_POINT, NULL, 2601 0, CASE_SENSITIVE, 0, NULL, 0, ctx)) { 2602 rpp = (struct reparse_point *)((u8 *)ctx->attr + 2603 le16_to_cpu(ctx->attr->data.resident.value_offset)); 2604 reparse_tag = rpp->reparse_tag; 2605 } 2606 ntfs_attr_reinit_search_ctx(ctx); 2607 } 2608 2609 /* Walk through all FILE_NAME attributes and update them. */ 2610 while (!(err = ntfs_attr_lookup(AT_FILE_NAME, NULL, 0, 0, 0, NULL, 0, ctx))) { 2611 fn = (struct file_name_attr *)((u8 *)ctx->attr + 2612 le16_to_cpu(ctx->attr->data.resident.value_offset)); 2613 if (MREF_LE(fn->parent_directory) == ni->mft_no) 2614 continue; 2615 2616 index_vi = ntfs_iget(sb, MREF_LE(fn->parent_directory)); 2617 if (IS_ERR(index_vi)) { 2618 ntfs_error(sb, "Failed to open inode %lld with index", 2619 (long long)MREF_LE(fn->parent_directory)); 2620 continue; 2621 } 2622 2623 index_ni = NTFS_I(index_vi); 2624 2625 mutex_lock_nested(&index_ni->mrec_lock, NTFS_INODE_MUTEX_PARENT); 2626 if (NInoBeingDeleted(ni)) { 2627 mutex_unlock(&index_ni->mrec_lock); 2628 iput(index_vi); 2629 continue; 2630 } 2631 2632 ictx = ntfs_index_ctx_get(index_ni, I30, 4); 2633 if (!ictx) { 2634 ntfs_error(sb, "Failed to get index ctx, inode %llu", 2635 index_ni->mft_no); 2636 mutex_unlock(&index_ni->mrec_lock); 2637 iput(index_vi); 2638 continue; 2639 } 2640 2641 err = ntfs_index_lookup(fn, sizeof(struct file_name_attr), ictx); 2642 if (err) { 2643 ntfs_debug("Index lookup failed, inode %llu", 2644 index_ni->mft_no); 2645 ntfs_index_ctx_put(ictx); 2646 mutex_unlock(&index_ni->mrec_lock); 2647 iput(index_vi); 2648 continue; 2649 } 2650 /* Update flags and file size. */ 2651 fnx = (struct file_name_attr *)ictx->data; 2652 fnx->file_attributes = 2653 (fnx->file_attributes & ~FILE_ATTR_VALID_FLAGS) | 2654 (ni->flags & FILE_ATTR_VALID_FLAGS); 2655 if (ctx->mrec->flags & MFT_RECORD_IS_DIRECTORY) 2656 fnx->data_size = fnx->allocated_size = 0; 2657 else { 2658 read_lock_irqsave(&ni->size_lock, flags); 2659 if (NInoSparse(ni) || NInoCompressed(ni)) 2660 fnx->allocated_size = cpu_to_le64(ni->itype.compressed.size); 2661 else 2662 fnx->allocated_size = cpu_to_le64(ni->allocated_size); 2663 fnx->data_size = cpu_to_le64(ni->data_size); 2664 2665 /* 2666 * The file name record has also to be fixed if some 2667 * attribute update implied the unnamed data to be 2668 * made non-resident 2669 */ 2670 fn->allocated_size = fnx->allocated_size; 2671 fn->data_size = fnx->data_size; 2672 read_unlock_irqrestore(&ni->size_lock, flags); 2673 } 2674 2675 /* update or clear the reparse tag in the index */ 2676 fnx->type.rp.reparse_point_tag = reparse_tag; 2677 fnx->creation_time = fn->creation_time; 2678 fnx->last_data_change_time = fn->last_data_change_time; 2679 fnx->last_mft_change_time = fn->last_mft_change_time; 2680 fnx->last_access_time = fn->last_access_time; 2681 ntfs_index_entry_mark_dirty(ictx); 2682 ntfs_icx_ib_sync_write(ictx); 2683 NInoSetDirty(ctx->ntfs_ino); 2684 ntfs_index_ctx_put(ictx); 2685 mutex_unlock(&index_ni->mrec_lock); 2686 iput(index_vi); 2687 } 2688 /* Check for real error occurred. */ 2689 if (err != -ENOENT) { 2690 ntfs_error(sb, "Attribute lookup failed, err : %d, inode %llu", err, 2691 ni->mft_no); 2692 } else 2693 err = 0; 2694 2695 ntfs_attr_put_search_ctx(ctx); 2696 return err; 2697 } 2698 2699 int ntfs_get_block_mft_record(struct ntfs_inode *mft_ni, struct ntfs_inode *ni) 2700 { 2701 s64 vcn; 2702 struct runlist_element *rl; 2703 2704 if (ni->mft_lcn[0] != LCN_RL_NOT_MAPPED) 2705 return 0; 2706 2707 vcn = (s64)ni->mft_no << mft_ni->vol->mft_record_size_bits >> 2708 mft_ni->vol->cluster_size_bits; 2709 2710 rl = mft_ni->runlist.rl; 2711 if (!rl) { 2712 ntfs_error(mft_ni->vol->sb, "$MFT runlist is not present"); 2713 return -EIO; 2714 } 2715 2716 /* Seek to element containing target vcn. */ 2717 while (rl->length && rl[1].vcn <= vcn) 2718 rl++; 2719 ni->mft_lcn[0] = ntfs_rl_vcn_to_lcn(rl, vcn); 2720 ni->mft_lcn_count = 1; 2721 2722 if (mft_ni->vol->cluster_size < mft_ni->vol->mft_record_size && 2723 (rl->length - (vcn - rl->vcn)) <= 1) { 2724 rl++; 2725 ni->mft_lcn[1] = ntfs_rl_vcn_to_lcn(rl, vcn + 1); 2726 ni->mft_lcn_count++; 2727 } 2728 return 0; 2729 } 2730 2731 /* 2732 * __ntfs_write_inode - write out a dirty inode 2733 * @vi: inode to write out 2734 * @sync: if true, write out synchronously 2735 * 2736 * Write out a dirty inode to disk including any extent inodes if present. 2737 * 2738 * If @sync is true, commit the inode to disk and wait for io completion. This 2739 * is done using write_mft_record(). 2740 * 2741 * If @sync is false, just schedule the write to happen but do not wait for i/o 2742 * completion. 2743 * 2744 * Return 0 on success and -errno on error. 2745 */ 2746 int __ntfs_write_inode(struct inode *vi, int sync) 2747 { 2748 struct ntfs_inode *ni = NTFS_I(vi); 2749 struct ntfs_inode *mft_ni = NTFS_I(ni->vol->mft_ino); 2750 struct mft_record *m; 2751 int err = 0; 2752 bool need_iput = false; 2753 2754 ntfs_debug("Entering for %sinode 0x%llx.", NInoAttr(ni) ? "attr " : "", 2755 ni->mft_no); 2756 2757 if (NVolShutdown(ni->vol)) 2758 return -EIO; 2759 2760 /* 2761 * Dirty attribute inodes are written via their real inodes so just 2762 * clean them here. Access time updates are taken care off when the 2763 * real inode is written. 2764 */ 2765 if (NInoAttr(ni) || ni->nr_extents == -1) { 2766 NInoClearDirty(ni); 2767 ntfs_debug("Done."); 2768 return 0; 2769 } 2770 2771 /* igrab prevents vi from being evicted while mrec_lock is hold. */ 2772 if (igrab(vi) != NULL) 2773 need_iput = true; 2774 2775 mutex_lock_nested(&ni->mrec_lock, NTFS_INODE_MUTEX_NORMAL); 2776 /* Map, pin, and lock the mft record belonging to the inode. */ 2777 m = map_mft_record(ni); 2778 if (IS_ERR(m)) { 2779 mutex_unlock(&ni->mrec_lock); 2780 err = PTR_ERR(m); 2781 goto err_out; 2782 } 2783 2784 if (NInoNonResident(ni) && NInoRunlistDirty(ni)) { 2785 down_write(&ni->runlist.lock); 2786 err = ntfs_attr_update_mapping_pairs_locked(ni, 0, ni); 2787 if (!err) 2788 NInoClearRunlistDirty(ni); 2789 up_write(&ni->runlist.lock); 2790 } 2791 2792 err = ntfs_inode_sync_standard_information(vi, m); 2793 if (err) 2794 goto unm_err_out; 2795 2796 /* 2797 * when being umounted and inodes are evicted, write_inode() 2798 * is called with all inodes being marked with I_FREEING. 2799 * then ntfs_inode_sync_filename() waits infinitly because 2800 * of ntfs_iget. This situation happens only where sync_filesysem() 2801 * from umount fails because of a disk unplug and etc. 2802 * the absent of SB_ACTIVE means umounting. 2803 */ 2804 if ((vi->i_sb->s_flags & SB_ACTIVE) && NInoTestClearFileNameDirty(ni)) 2805 ntfs_inode_sync_filename(ni); 2806 2807 /* Now the access times are updated, write the base mft record. */ 2808 if (NInoDirty(ni)) { 2809 down_read(&mft_ni->runlist.lock); 2810 err = ntfs_get_block_mft_record(mft_ni, ni); 2811 up_read(&mft_ni->runlist.lock); 2812 if (err) 2813 goto unm_err_out; 2814 2815 err = write_mft_record(ni, m, sync); 2816 if (err) 2817 ntfs_error(vi->i_sb, "write_mft_record failed, err : %d\n", err); 2818 } 2819 unmap_mft_record(ni); 2820 2821 /* Map any unmapped extent mft records with LCNs. */ 2822 down_read(&mft_ni->runlist.lock); 2823 mutex_lock(&ni->extent_lock); 2824 if (ni->nr_extents > 0) { 2825 int i; 2826 2827 for (i = 0; i < ni->nr_extents; i++) { 2828 err = ntfs_get_block_mft_record(mft_ni, 2829 ni->ext.extent_ntfs_inos[i]); 2830 if (err) { 2831 mutex_unlock(&ni->extent_lock); 2832 up_read(&mft_ni->runlist.lock); 2833 mutex_unlock(&ni->mrec_lock); 2834 goto err_out; 2835 } 2836 } 2837 } 2838 mutex_unlock(&ni->extent_lock); 2839 up_read(&mft_ni->runlist.lock); 2840 2841 /* Write all attached extent mft records. */ 2842 mutex_lock(&ni->extent_lock); 2843 if (ni->nr_extents > 0) { 2844 struct ntfs_inode **extent_nis = ni->ext.extent_ntfs_inos; 2845 int i; 2846 2847 ntfs_debug("Writing %i extent inodes.", ni->nr_extents); 2848 for (i = 0; i < ni->nr_extents; i++) { 2849 struct ntfs_inode *tni = extent_nis[i]; 2850 2851 if (NInoDirty(tni)) { 2852 struct mft_record *tm; 2853 int ret; 2854 2855 mutex_lock(&tni->mrec_lock); 2856 tm = map_mft_record(tni); 2857 if (IS_ERR(tm)) { 2858 mutex_unlock(&tni->mrec_lock); 2859 if (!err || err == -ENOMEM) 2860 err = PTR_ERR(tm); 2861 continue; 2862 } 2863 2864 ret = write_mft_record(tni, tm, sync); 2865 unmap_mft_record(tni); 2866 mutex_unlock(&tni->mrec_lock); 2867 2868 if (unlikely(ret)) { 2869 if (!err || err == -ENOMEM) 2870 err = ret; 2871 } 2872 } 2873 } 2874 } 2875 mutex_unlock(&ni->extent_lock); 2876 mutex_unlock(&ni->mrec_lock); 2877 2878 if (unlikely(err)) 2879 goto err_out; 2880 if (need_iput) 2881 iput(vi); 2882 ntfs_debug("Done."); 2883 return 0; 2884 unm_err_out: 2885 unmap_mft_record(ni); 2886 mutex_unlock(&ni->mrec_lock); 2887 err_out: 2888 if (err == -ENOMEM) 2889 mark_inode_dirty(vi); 2890 else { 2891 ntfs_error(vi->i_sb, "Failed (error %i): Run chkdsk.", -err); 2892 NVolSetErrors(ni->vol); 2893 } 2894 if (need_iput) 2895 iput(vi); 2896 return err; 2897 } 2898 2899 /* 2900 * ntfs_extent_inode_open - load an extent inode and attach it to its base 2901 * @base_ni: base ntfs inode 2902 * @mref: mft reference of the extent inode to load (in little endian) 2903 * 2904 * First check if the extent inode @mref is already attached to the base ntfs 2905 * inode @base_ni, and if so, return a pointer to the attached extent inode. 2906 * 2907 * If the extent inode is not already attached to the base inode, allocate an 2908 * ntfs_inode structure and initialize it for the given inode @mref. @mref 2909 * specifies the inode number / mft record to read, including the sequence 2910 * number, which can be 0 if no sequence number checking is to be performed. 2911 * 2912 * Then, allocate a buffer for the mft record, read the mft record from the 2913 * volume @base_ni->vol, and attach it to the ntfs_inode structure (->mrec). 2914 * The mft record is mst deprotected and sanity checked for validity and we 2915 * abort if deprotection or checks fail. 2916 * 2917 * Finally attach the ntfs inode to its base inode @base_ni and return a 2918 * pointer to the ntfs_inode structure on success or NULL on error, with errno 2919 * set to the error code. 2920 * 2921 * Note, extent inodes are never closed directly. They are automatically 2922 * disposed off by the closing of the base inode. 2923 */ 2924 static struct ntfs_inode *ntfs_extent_inode_open(struct ntfs_inode *base_ni, 2925 const __le64 mref) 2926 { 2927 u64 mft_no = MREF_LE(mref); 2928 struct ntfs_inode *ni = NULL; 2929 struct ntfs_inode **extent_nis; 2930 int i; 2931 struct mft_record *ni_mrec; 2932 struct super_block *sb; 2933 2934 if (!base_ni) 2935 return NULL; 2936 2937 sb = base_ni->vol->sb; 2938 ntfs_debug("Opening extent inode %llu (base mft record %llu).\n", 2939 mft_no, base_ni->mft_no); 2940 2941 /* Is the extent inode already open and attached to the base inode? */ 2942 if (base_ni->nr_extents > 0) { 2943 extent_nis = base_ni->ext.extent_ntfs_inos; 2944 for (i = 0; i < base_ni->nr_extents; i++) { 2945 u16 seq_no; 2946 2947 ni = extent_nis[i]; 2948 if (mft_no != ni->mft_no) 2949 continue; 2950 ni_mrec = map_mft_record(ni); 2951 if (IS_ERR(ni_mrec)) { 2952 ntfs_error(sb, "failed to map mft record for %llu", 2953 ni->mft_no); 2954 goto out; 2955 } 2956 /* Verify the sequence number if given. */ 2957 seq_no = MSEQNO_LE(mref); 2958 if (seq_no && 2959 seq_no != le16_to_cpu(ni_mrec->sequence_number)) { 2960 ntfs_error(sb, "Found stale extent mft reference mft=%llu", 2961 ni->mft_no); 2962 unmap_mft_record(ni); 2963 goto out; 2964 } 2965 unmap_mft_record(ni); 2966 goto out; 2967 } 2968 } 2969 /* Wasn't there, we need to load the extent inode. */ 2970 ni = ntfs_new_extent_inode(base_ni->vol->sb, mft_no); 2971 if (!ni) 2972 goto out; 2973 2974 ni->seq_no = (u16)MSEQNO_LE(mref); 2975 ni->nr_extents = -1; 2976 ni->ext.base_ntfs_ino = base_ni; 2977 /* Attach extent inode to base inode, reallocating memory if needed. */ 2978 if (!(base_ni->nr_extents & 3)) { 2979 i = (base_ni->nr_extents + 4) * sizeof(struct ntfs_inode *); 2980 2981 extent_nis = kvzalloc(i, GFP_NOFS); 2982 if (!extent_nis) 2983 goto err_out; 2984 if (base_ni->nr_extents) { 2985 memcpy(extent_nis, base_ni->ext.extent_ntfs_inos, 2986 i - 4 * sizeof(struct ntfs_inode *)); 2987 kvfree(base_ni->ext.extent_ntfs_inos); 2988 } 2989 base_ni->ext.extent_ntfs_inos = extent_nis; 2990 } 2991 base_ni->ext.extent_ntfs_inos[base_ni->nr_extents++] = ni; 2992 2993 out: 2994 ntfs_debug("\n"); 2995 return ni; 2996 err_out: 2997 ntfs_destroy_ext_inode(ni); 2998 ni = NULL; 2999 goto out; 3000 } 3001 3002 /* 3003 * ntfs_inode_attach_all_extents - attach all extents for target inode 3004 * @ni: opened ntfs inode for which perform attach 3005 * 3006 * Return 0 on success and error. 3007 */ 3008 int ntfs_inode_attach_all_extents(struct ntfs_inode *ni) 3009 { 3010 struct attr_list_entry *ale; 3011 u64 prev_attached = 0; 3012 3013 if (!ni) { 3014 ntfs_debug("Invalid arguments.\n"); 3015 return -EINVAL; 3016 } 3017 3018 if (NInoAttr(ni)) 3019 ni = ni->ext.base_ntfs_ino; 3020 3021 ntfs_debug("Entering for inode 0x%llx.\n", ni->mft_no); 3022 3023 /* Inode haven't got attribute list, thus nothing to attach. */ 3024 if (!NInoAttrList(ni)) 3025 return 0; 3026 3027 if (!ni->attr_list) { 3028 ntfs_debug("Corrupt in-memory struct.\n"); 3029 return -EINVAL; 3030 } 3031 3032 /* Walk through attribute list and attach all extents. */ 3033 ale = (struct attr_list_entry *)ni->attr_list; 3034 while ((u8 *)ale < ni->attr_list + ni->attr_list_size) { 3035 if (ni->mft_no != MREF_LE(ale->mft_reference) && 3036 prev_attached != MREF_LE(ale->mft_reference)) { 3037 if (!ntfs_extent_inode_open(ni, ale->mft_reference)) { 3038 ntfs_debug("Couldn't attach extent inode.\n"); 3039 return -1; 3040 } 3041 prev_attached = MREF_LE(ale->mft_reference); 3042 } 3043 ale = (struct attr_list_entry *)((u8 *)ale + le16_to_cpu(ale->length)); 3044 } 3045 return 0; 3046 } 3047 3048 /* 3049 * ntfs_inode_add_attrlist - add attribute list to inode and fill it 3050 * @ni: opened ntfs inode to which add attribute list 3051 * 3052 * Return 0 on success or error. 3053 */ 3054 int ntfs_inode_add_attrlist(struct ntfs_inode *ni) 3055 { 3056 int err; 3057 struct ntfs_attr_search_ctx *ctx; 3058 u8 *al = NULL, *aln; 3059 int al_len = 0; 3060 struct attr_list_entry *ale = NULL; 3061 struct mft_record *ni_mrec; 3062 u32 attr_al_len; 3063 bool free_empty_extents = true; 3064 3065 if (!ni) 3066 return -EINVAL; 3067 3068 ntfs_debug("inode %llu\n", ni->mft_no); 3069 3070 if (NInoAttrList(ni) || ni->nr_extents) { 3071 ntfs_error(ni->vol->sb, "Inode already has attribute list"); 3072 return -EEXIST; 3073 } 3074 3075 ni_mrec = map_mft_record(ni); 3076 if (IS_ERR(ni_mrec)) 3077 return -EIO; 3078 3079 /* Form attribute list. */ 3080 ctx = ntfs_attr_get_search_ctx(ni, ni_mrec); 3081 if (!ctx) { 3082 err = -ENOMEM; 3083 goto err_out; 3084 } 3085 3086 /* Walk through all attributes. */ 3087 while (!(err = ntfs_attr_lookup(AT_UNUSED, NULL, 0, 0, 0, NULL, 0, ctx))) { 3088 int ale_size; 3089 3090 if (ctx->attr->type == AT_ATTRIBUTE_LIST) { 3091 err = -EIO; 3092 ntfs_error(ni->vol->sb, "Attribute list already present"); 3093 goto put_err_out; 3094 } 3095 3096 ale_size = (sizeof(struct attr_list_entry) + sizeof(__le16) * 3097 ctx->attr->name_length + 7) & ~7; 3098 al_len += ale_size; 3099 3100 aln = kvrealloc(al, al_len, GFP_NOFS); 3101 if (!aln) { 3102 err = -ENOMEM; 3103 ntfs_error(ni->vol->sb, "Failed to realloc %d bytes", al_len); 3104 goto put_err_out; 3105 } 3106 ale = (struct attr_list_entry *)(aln + ((u8 *)ale - al)); 3107 al = aln; 3108 3109 memset(ale, 0, ale_size); 3110 3111 /* Add attribute to attribute list. */ 3112 ale->type = ctx->attr->type; 3113 ale->length = cpu_to_le16((sizeof(struct attr_list_entry) + 3114 sizeof(__le16) * ctx->attr->name_length + 7) & ~7); 3115 ale->name_length = ctx->attr->name_length; 3116 ale->name_offset = (u8 *)ale->name - (u8 *)ale; 3117 if (ctx->attr->non_resident) 3118 ale->lowest_vcn = 3119 ctx->attr->data.non_resident.lowest_vcn; 3120 else 3121 ale->lowest_vcn = 0; 3122 ale->mft_reference = MK_LE_MREF(ni->mft_no, 3123 le16_to_cpu(ni_mrec->sequence_number)); 3124 ale->instance = ctx->attr->instance; 3125 memcpy(ale->name, (u8 *)ctx->attr + 3126 le16_to_cpu(ctx->attr->name_offset), 3127 ctx->attr->name_length * sizeof(__le16)); 3128 ale = (struct attr_list_entry *)(al + al_len); 3129 } 3130 3131 /* Check for real error occurred. */ 3132 if (err != -ENOENT) { 3133 ntfs_error(ni->vol->sb, "%s: Attribute lookup failed, inode %llu", 3134 __func__, ni->mft_no); 3135 goto put_err_out; 3136 } 3137 3138 /* Set in-memory attribute list. */ 3139 ni->attr_list = al; 3140 ni->attr_list_size = al_len; 3141 NInoSetAttrList(ni); 3142 3143 attr_al_len = offsetof(struct attr_record, data.resident.reserved) + 1 + 3144 ((al_len + 7) & ~7); 3145 /* Free space if there is not enough it for $ATTRIBUTE_LIST. */ 3146 if (le32_to_cpu(ni_mrec->bytes_allocated) - 3147 le32_to_cpu(ni_mrec->bytes_in_use) < attr_al_len) { 3148 if (ntfs_inode_free_space(ni, (int)attr_al_len)) { 3149 /* Failed to free space. */ 3150 err = -ENOSPC; 3151 ntfs_error(ni->vol->sb, "Failed to free space for attrlist"); 3152 goto rollback; 3153 } 3154 } 3155 3156 /* Add $ATTRIBUTE_LIST to mft record. */ 3157 err = ntfs_resident_attr_record_add(ni, AT_ATTRIBUTE_LIST, AT_UNNAMED, 0, 3158 NULL, al_len, 0); 3159 if (err < 0) { 3160 ntfs_error(ni->vol->sb, "Couldn't add $ATTRIBUTE_LIST to MFT"); 3161 goto rollback; 3162 } 3163 free_empty_extents = false; 3164 3165 err = ntfs_attrlist_update(ni); 3166 if (err < 0) 3167 goto remove_attrlist_record; 3168 3169 ntfs_attr_put_search_ctx(ctx); 3170 unmap_mft_record(ni); 3171 return 0; 3172 3173 remove_attrlist_record: 3174 /* Prevent ntfs_attr_recorm_rm from freeing attribute list. */ 3175 ni->attr_list = NULL; 3176 NInoClearAttrList(ni); 3177 /* Remove $ATTRIBUTE_LIST record. */ 3178 ntfs_attr_reinit_search_ctx(ctx); 3179 if (!ntfs_attr_lookup(AT_ATTRIBUTE_LIST, NULL, 0, 3180 CASE_SENSITIVE, 0, NULL, 0, ctx)) { 3181 if (ntfs_attr_record_rm(ctx)) 3182 ntfs_error(ni->vol->sb, "Rollback failed to remove attrlist"); 3183 else 3184 free_empty_extents = true; 3185 } else { 3186 ntfs_error(ni->vol->sb, "Rollback failed to find attrlist"); 3187 } 3188 3189 /* Setup back in-memory runlist. */ 3190 ni->attr_list = al; 3191 ni->attr_list_size = al_len; 3192 NInoSetAttrList(ni); 3193 rollback: 3194 /* 3195 * Scan attribute list for attributes that placed not in the base MFT 3196 * record and move them to it. 3197 */ 3198 ntfs_attr_reinit_search_ctx(ctx); 3199 ale = (struct attr_list_entry *)al; 3200 while ((u8 *)ale < al + al_len) { 3201 if (MREF_LE(ale->mft_reference) != ni->mft_no) { 3202 if (!ntfs_attr_lookup(ale->type, ale->name, 3203 ale->name_length, 3204 CASE_SENSITIVE, 3205 le64_to_cpu(ale->lowest_vcn), 3206 NULL, 0, ctx)) { 3207 if (ntfs_attr_record_move_to(ctx, ni)) 3208 ntfs_error(ni->vol->sb, 3209 "Rollback failed to move attribute"); 3210 } else { 3211 ntfs_error(ni->vol->sb, "Rollback failed to find attr"); 3212 } 3213 ntfs_attr_reinit_search_ctx(ctx); 3214 } 3215 ale = (struct attr_list_entry *)((u8 *)ale + le16_to_cpu(ale->length)); 3216 } 3217 3218 /* Remove in-memory attribute list. */ 3219 ni->attr_list = NULL; 3220 ni->attr_list_size = 0; 3221 NInoClearAttrList(ni); 3222 NInoClearAttrListDirty(ni); 3223 ntfs_attr_put_search_ctx(ctx); 3224 ctx = NULL; 3225 if (free_empty_extents && ntfs_inode_free_empty_extents(ni)) 3226 ntfs_error(ni->vol->sb, "Rollback failed to free empty extent"); 3227 goto err_out; 3228 put_err_out: 3229 ntfs_attr_put_search_ctx(ctx); 3230 err_out: 3231 kvfree(al); 3232 unmap_mft_record(ni); 3233 return err; 3234 } 3235 3236 /* 3237 * ntfs_inode_close - close an ntfs inode and free all associated memory 3238 * @ni: ntfs inode to close 3239 * 3240 * Make sure the ntfs inode @ni is clean. 3241 * 3242 * If the ntfs inode @ni is a base inode, close all associated extent inodes, 3243 * then deallocate all memory attached to it, and finally free the ntfs inode 3244 * structure itself. 3245 * 3246 * If it is an extent inode, we disconnect it from its base inode before we 3247 * destroy it. 3248 * 3249 * It is OK to pass NULL to this function, it is just noop in this case. 3250 * 3251 * Return 0 on success or error. 3252 */ 3253 int ntfs_inode_close(struct ntfs_inode *ni) 3254 { 3255 int err = -1; 3256 struct ntfs_inode **tmp_nis; 3257 struct ntfs_inode *base_ni; 3258 s32 i; 3259 3260 if (!ni) 3261 return 0; 3262 3263 ntfs_debug("Entering for inode %llu\n", ni->mft_no); 3264 3265 /* Is this a base inode with mapped extent inodes? */ 3266 /* 3267 * If the inode is an extent inode, disconnect it from the 3268 * base inode before destroying it. 3269 */ 3270 base_ni = ni->ext.base_ntfs_ino; 3271 tmp_nis = base_ni->ext.extent_ntfs_inos; 3272 if (!tmp_nis) 3273 goto out; 3274 for (i = 0; i < base_ni->nr_extents; ++i) { 3275 if (tmp_nis[i] != ni) 3276 continue; 3277 /* Found it. Disconnect. */ 3278 memmove(tmp_nis + i, tmp_nis + i + 1, 3279 (base_ni->nr_extents - i - 1) * 3280 sizeof(struct ntfs_inode *)); 3281 /* Buffer should be for multiple of four extents. */ 3282 if ((--base_ni->nr_extents) & 3) 3283 break; 3284 /* 3285 * ElectricFence is unhappy with realloc(x,0) as free(x) 3286 * thus we explicitly separate these two cases. 3287 */ 3288 if (base_ni->nr_extents) { 3289 /* Resize the memory buffer. */ 3290 tmp_nis = kvrealloc(tmp_nis, base_ni->nr_extents * 3291 sizeof(struct ntfs_inode *), GFP_NOFS); 3292 /* Ignore errors, they don't really matter. */ 3293 if (tmp_nis) 3294 base_ni->ext.extent_ntfs_inos = tmp_nis; 3295 } else if (tmp_nis) { 3296 kvfree(tmp_nis); 3297 base_ni->ext.extent_ntfs_inos = NULL; 3298 } 3299 break; 3300 } 3301 3302 out: 3303 if (NInoDirty(ni)) 3304 ntfs_error(ni->vol->sb, "Releasing dirty inode %llu!\n", 3305 ni->mft_no); 3306 if (NInoAttrList(ni) && ni->attr_list) 3307 kvfree(ni->attr_list); 3308 ntfs_destroy_ext_inode(ni); 3309 err = 0; 3310 ntfs_debug("\n"); 3311 return err; 3312 } 3313 3314 /* 3315 * ntfs_inode_free_empty_extents - free empty extent MFT records 3316 * @ni: base inode whose empty extent records should be freed 3317 * 3318 * The caller must ensure that no on-disk attribute list references an empty 3319 * extent record and must hold @ni->mrec_lock to serialize the extent array. 3320 */ 3321 int ntfs_inode_free_empty_extents(struct ntfs_inode *ni) 3322 { 3323 int err = 0, i = 0; 3324 3325 if (!ni || ni->nr_extents < 0) 3326 return -EINVAL; 3327 3328 mutex_lock(&ni->extent_lock); 3329 while (i < ni->nr_extents) { 3330 struct ntfs_inode *ext_ni = ni->ext.extent_ntfs_inos[i]; 3331 struct mft_record *m; 3332 int ret; 3333 3334 m = map_mft_record(ext_ni); 3335 if (IS_ERR(m)) { 3336 if (!err) 3337 err = PTR_ERR(m); 3338 i++; 3339 continue; 3340 } 3341 if (le32_to_cpu(m->bytes_in_use) - 3342 le16_to_cpu(m->attrs_offset) != 8) { 3343 unmap_mft_record(ext_ni); 3344 i++; 3345 continue; 3346 } 3347 unmap_mft_record(ext_ni); 3348 3349 ret = ntfs_mft_record_free(ni->vol, ext_ni); 3350 if (ret) { 3351 if (!err) 3352 err = ret; 3353 i++; 3354 continue; 3355 } 3356 ntfs_inode_close(ext_ni); 3357 /* ntfs_inode_close() removed this entry from the extent array. */ 3358 } 3359 mutex_unlock(&ni->extent_lock); 3360 return err; 3361 } 3362 3363 void ntfs_destroy_ext_inode(struct ntfs_inode *ni) 3364 { 3365 ntfs_debug("Entering."); 3366 if (ni == NULL) 3367 return; 3368 3369 ntfs_attr_close(ni); 3370 3371 if (NInoDirty(ni)) 3372 ntfs_error(ni->vol->sb, "Releasing dirty ext inode %llu!\n", 3373 ni->mft_no); 3374 if (NInoAttrList(ni) && ni->attr_list) 3375 kvfree(ni->attr_list); 3376 kfree(ni->mrec); 3377 kmem_cache_free(ntfs_inode_cache, ni); 3378 } 3379 3380 static struct ntfs_inode *ntfs_inode_base(struct ntfs_inode *ni) 3381 { 3382 if (ni->nr_extents == -1) 3383 return ni->ext.base_ntfs_ino; 3384 return ni; 3385 } 3386 3387 static int ntfs_attr_position(__le32 type, struct ntfs_attr_search_ctx *ctx) 3388 { 3389 int err; 3390 3391 err = ntfs_attr_lookup(type, NULL, 0, CASE_SENSITIVE, 0, NULL, 3392 0, ctx); 3393 if (err) { 3394 __le32 atype; 3395 3396 if (err != -ENOENT) 3397 return err; 3398 3399 atype = ctx->attr->type; 3400 if (atype == AT_END) 3401 return -ENOSPC; 3402 3403 /* 3404 * if ntfs_external_attr_lookup return -ENOENT, ctx->al_entry 3405 * could point to an attribute in an extent mft record, but 3406 * ctx->attr and ctx->ntfs_ino always points to an attibute in 3407 * a base mft record. 3408 */ 3409 if (ctx->al_entry && 3410 MREF_LE(ctx->al_entry->mft_reference) != ctx->ntfs_ino->mft_no) { 3411 ntfs_attr_reinit_search_ctx(ctx); 3412 err = ntfs_attr_lookup(atype, NULL, 0, CASE_SENSITIVE, 0, NULL, 3413 0, ctx); 3414 if (err) 3415 return err; 3416 } 3417 } 3418 return 0; 3419 } 3420 3421 /* 3422 * ntfs_inode_free_space - free space in the MFT record of inode 3423 * @ni: ntfs inode in which MFT record free space 3424 * @size: amount of space needed to free 3425 * 3426 * Return 0 on success or error. 3427 */ 3428 int ntfs_inode_free_space(struct ntfs_inode *ni, int size) 3429 { 3430 struct ntfs_attr_search_ctx *ctx; 3431 int freed, err; 3432 struct mft_record *ni_mrec; 3433 struct super_block *sb; 3434 3435 if (!ni || size < 0) 3436 return -EINVAL; 3437 ntfs_debug("Entering for inode %llu, size %d\n", ni->mft_no, size); 3438 3439 sb = ni->vol->sb; 3440 ni_mrec = map_mft_record(ni); 3441 if (IS_ERR(ni_mrec)) 3442 return -EIO; 3443 3444 freed = (le32_to_cpu(ni_mrec->bytes_allocated) - 3445 le32_to_cpu(ni_mrec->bytes_in_use)); 3446 3447 unmap_mft_record(ni); 3448 3449 if (size <= freed) 3450 return 0; 3451 3452 ctx = ntfs_attr_get_search_ctx(ni, NULL); 3453 if (!ctx) { 3454 ntfs_error(sb, "%s, Failed to get search context", __func__); 3455 return -ENOMEM; 3456 } 3457 3458 /* 3459 * Chkdsk complain if $STANDARD_INFORMATION is not in the base MFT 3460 * record. 3461 * 3462 * $INDEX_ROOT must remain resident, but its attribute record may be moved 3463 * to an extent MFT record when the base record needs room for the list. 3464 * 3465 * Also we can't move $ATTRIBUTE_LIST from base MFT_RECORD, so position 3466 * search context on first attribute after $STANDARD_INFORMATION and 3467 * $ATTRIBUTE_LIST. 3468 * 3469 * Why we reposition instead of simply skip this attributes during 3470 * enumeration? Because in case we have got only in-memory attribute 3471 * list ntfs_attr_lookup will fail when it will try to find 3472 * $ATTRIBUTE_LIST. 3473 */ 3474 err = ntfs_attr_position(AT_FILE_NAME, ctx); 3475 if (err) 3476 goto put_err_out; 3477 3478 while (1) { 3479 int record_size; 3480 3481 /* 3482 * Check whether attribute is from different MFT record. If so, 3483 * find next, because we don't need such. 3484 */ 3485 while (ctx->ntfs_ino->mft_no != ni->mft_no) { 3486 retry: 3487 err = ntfs_attr_lookup(AT_UNUSED, NULL, 0, CASE_SENSITIVE, 3488 0, NULL, 0, ctx); 3489 if (err) { 3490 if (err != -ENOENT) 3491 ntfs_error(sb, "Attr lookup failed #2"); 3492 else if (ctx->attr->type == AT_END) 3493 err = -ENOSPC; 3494 else 3495 err = 0; 3496 3497 if (err) 3498 goto put_err_out; 3499 } 3500 } 3501 3502 if (ntfs_inode_base(ctx->ntfs_ino)->mft_no == FILE_MFT && 3503 ctx->attr->type == AT_DATA) 3504 goto retry; 3505 3506 record_size = le32_to_cpu(ctx->attr->length); 3507 3508 /* Move away attribute. */ 3509 err = ntfs_attr_record_move_away(ctx, 0); 3510 if (err) { 3511 ntfs_error(sb, "Failed to move out attribute #2"); 3512 break; 3513 } 3514 freed += record_size; 3515 3516 /* Check whether we done. */ 3517 if (size <= freed) { 3518 ntfs_attr_put_search_ctx(ctx); 3519 return 0; 3520 } 3521 3522 /* 3523 * Reposition to first attribute after $STANDARD_INFORMATION and 3524 * $ATTRIBUTE_LIST (see comments upwards). 3525 */ 3526 ntfs_attr_reinit_search_ctx(ctx); 3527 err = ntfs_attr_position(AT_FILE_NAME, ctx); 3528 if (err) 3529 break; 3530 } 3531 put_err_out: 3532 ntfs_attr_put_search_ctx(ctx); 3533 if (err == -ENOSPC) 3534 ntfs_debug("No attributes left that can be moved out.\n"); 3535 return err; 3536 } 3537 3538 s64 ntfs_inode_attr_pread(struct inode *vi, s64 pos, s64 count, u8 *buf) 3539 { 3540 struct address_space *mapping = vi->i_mapping; 3541 struct folio *folio; 3542 struct ntfs_inode *ni = NTFS_I(vi); 3543 s64 isize; 3544 u32 attr_len, total = 0, offset; 3545 pgoff_t index; 3546 int err = 0; 3547 3548 WARN_ON(!NInoAttr(ni)); 3549 if (!count) 3550 return 0; 3551 3552 mutex_lock(&ni->mrec_lock); 3553 isize = i_size_read(vi); 3554 if (pos > isize) { 3555 mutex_unlock(&ni->mrec_lock); 3556 return -EINVAL; 3557 } 3558 if (pos + count > isize) 3559 count = isize - pos; 3560 3561 if (!NInoNonResident(ni)) { 3562 struct ntfs_attr_search_ctx *ctx; 3563 u8 *attr; 3564 3565 ctx = ntfs_attr_get_search_ctx(ni->ext.base_ntfs_ino, NULL); 3566 if (!ctx) { 3567 ntfs_error(vi->i_sb, "Failed to get attr search ctx"); 3568 err = -ENOMEM; 3569 mutex_unlock(&ni->mrec_lock); 3570 goto out; 3571 } 3572 3573 err = ntfs_attr_lookup(ni->type, ni->name, ni->name_len, CASE_SENSITIVE, 3574 0, NULL, 0, ctx); 3575 if (err) { 3576 ntfs_error(vi->i_sb, "Failed to look up attr %#x", ni->type); 3577 ntfs_attr_put_search_ctx(ctx); 3578 mutex_unlock(&ni->mrec_lock); 3579 goto out; 3580 } 3581 3582 attr = (u8 *)ctx->attr + le16_to_cpu(ctx->attr->data.resident.value_offset); 3583 memcpy(buf, (u8 *)attr + pos, count); 3584 ntfs_attr_put_search_ctx(ctx); 3585 mutex_unlock(&ni->mrec_lock); 3586 return count; 3587 } 3588 mutex_unlock(&ni->mrec_lock); 3589 3590 index = pos >> PAGE_SHIFT; 3591 do { 3592 /* Update @index and get the next folio. */ 3593 folio = read_mapping_folio(mapping, index, NULL); 3594 if (IS_ERR(folio)) 3595 break; 3596 3597 offset = offset_in_folio(folio, pos); 3598 attr_len = min_t(size_t, (size_t)count, folio_size(folio) - offset); 3599 3600 folio_lock(folio); 3601 memcpy_from_folio(buf, folio, offset, attr_len); 3602 folio_unlock(folio); 3603 folio_put(folio); 3604 3605 total += attr_len; 3606 buf += attr_len; 3607 pos += attr_len; 3608 count -= attr_len; 3609 index++; 3610 } while (count); 3611 out: 3612 return err ? (s64)err : total; 3613 } 3614 3615 static inline int ntfs_enlarge_attribute(struct inode *vi, s64 pos, s64 count, 3616 struct ntfs_attr_search_ctx *ctx) 3617 { 3618 struct ntfs_inode *ni = NTFS_I(vi); 3619 struct super_block *sb = vi->i_sb; 3620 int ret; 3621 3622 if (pos + count <= ni->initialized_size) 3623 return 0; 3624 3625 if (NInoEncrypted(ni) && NInoNonResident(ni)) 3626 return -EACCES; 3627 3628 if (NInoCompressed(ni)) 3629 return -EOPNOTSUPP; 3630 3631 if (pos + count > ni->data_size) { 3632 if (ntfs_attr_truncate(ni, pos + count)) { 3633 ntfs_debug("Failed to truncate attribute"); 3634 return -1; 3635 } 3636 3637 ntfs_attr_reinit_search_ctx(ctx); 3638 ret = ntfs_attr_lookup(ni->type, 3639 ni->name, ni->name_len, CASE_SENSITIVE, 3640 0, NULL, 0, ctx); 3641 if (ret) { 3642 ntfs_error(sb, "Failed to look up attr %#x", ni->type); 3643 return ret; 3644 } 3645 } 3646 3647 if (!NInoNonResident(ni)) { 3648 if (likely(i_size_read(vi) < ni->data_size)) 3649 i_size_write(vi, ni->data_size); 3650 return 0; 3651 } 3652 3653 if (pos + count > ni->initialized_size) { 3654 ctx->attr->data.non_resident.initialized_size = cpu_to_le64(pos + count); 3655 mark_mft_record_dirty(ctx->ntfs_ino); 3656 ni->initialized_size = pos + count; 3657 if (i_size_read(vi) < ni->initialized_size) 3658 i_size_write(vi, ni->initialized_size); 3659 } 3660 return 0; 3661 } 3662 3663 static s64 __ntfs_inode_resident_attr_pwrite(struct inode *vi, 3664 s64 pos, s64 count, u8 *buf, 3665 struct ntfs_attr_search_ctx *ctx) 3666 { 3667 struct ntfs_inode *ni = NTFS_I(vi); 3668 struct folio *folio; 3669 struct address_space *mapping = vi->i_mapping; 3670 u8 *addr; 3671 int err = 0; 3672 3673 WARN_ON(NInoNonResident(ni)); 3674 if (pos + count > PAGE_SIZE) { 3675 ntfs_error(vi->i_sb, "Out of write into resident attr %#x", ni->type); 3676 return -EINVAL; 3677 } 3678 3679 /* Copy to mft record page */ 3680 addr = (u8 *)ctx->attr + le16_to_cpu(ctx->attr->data.resident.value_offset); 3681 memcpy(addr + pos, buf, count); 3682 mark_mft_record_dirty(ctx->ntfs_ino); 3683 3684 /* Keep the first page clean and uptodate */ 3685 folio = __filemap_get_folio(mapping, 0, FGP_WRITEBEGIN | FGP_NOFS, 3686 mapping_gfp_mask(mapping)); 3687 if (IS_ERR(folio)) { 3688 err = PTR_ERR(folio); 3689 ntfs_error(vi->i_sb, "Failed to read a page 0 for attr %#x: %d", 3690 ni->type, err); 3691 goto out; 3692 } 3693 if (!folio_test_uptodate(folio)) 3694 folio_fill_tail(folio, 0, addr, 3695 le32_to_cpu(ctx->attr->data.resident.value_length)); 3696 else 3697 memcpy_to_folio(folio, offset_in_folio(folio, pos), buf, count); 3698 folio_mark_uptodate(folio); 3699 folio_unlock(folio); 3700 folio_put(folio); 3701 out: 3702 return err ? err : count; 3703 } 3704 3705 static s64 __ntfs_inode_non_resident_attr_pwrite(struct inode *vi, 3706 s64 pos, s64 count, u8 *buf, 3707 struct ntfs_attr_search_ctx *ctx, 3708 bool sync) 3709 { 3710 struct ntfs_inode *ni = NTFS_I(vi); 3711 struct address_space *mapping = vi->i_mapping; 3712 struct folio *folio; 3713 pgoff_t index; 3714 unsigned long offset, length; 3715 size_t attr_len; 3716 s64 ret = 0, written = 0; 3717 3718 WARN_ON(!NInoNonResident(ni)); 3719 3720 index = pos >> PAGE_SHIFT; 3721 while (count) { 3722 if (count == PAGE_SIZE) { 3723 folio = __filemap_get_folio(vi->i_mapping, index, 3724 FGP_CREAT | FGP_LOCK, 3725 mapping_gfp_mask(mapping)); 3726 if (IS_ERR(folio)) { 3727 ret = PTR_ERR(folio); 3728 break; 3729 } 3730 } else { 3731 folio = read_mapping_folio(mapping, index, NULL); 3732 if (IS_ERR(folio)) { 3733 ret = PTR_ERR(folio); 3734 ntfs_error(vi->i_sb, "Failed to read a page %lu for attr %#x: %ld", 3735 index, ni->type, PTR_ERR(folio)); 3736 break; 3737 } 3738 3739 folio_lock(folio); 3740 } 3741 3742 if (count == PAGE_SIZE) { 3743 offset = 0; 3744 attr_len = count; 3745 } else { 3746 offset = offset_in_folio(folio, pos); 3747 attr_len = min_t(size_t, (size_t)count, folio_size(folio) - offset); 3748 } 3749 memcpy_to_folio(folio, offset, buf, attr_len); 3750 3751 if (sync) { 3752 struct ntfs_volume *vol = ni->vol; 3753 s64 lcn, lcn_count; 3754 unsigned int lcn_folio_off = 0; 3755 struct bio *bio; 3756 u64 rl_length = 0; 3757 s64 vcn; 3758 struct runlist_element *rl; 3759 int bio_err; 3760 3761 lcn_count = max_t(s64, 1, ntfs_bytes_to_cluster(vol, attr_len)); 3762 vcn = ntfs_pidx_to_cluster(vol, folio->index); 3763 3764 do { 3765 down_write(&ni->runlist.lock); 3766 rl = ntfs_attr_vcn_to_rl(ni, vcn, &lcn); 3767 if (IS_ERR(rl)) { 3768 ret = PTR_ERR(rl); 3769 up_write(&ni->runlist.lock); 3770 goto err_unlock_folio; 3771 } 3772 3773 rl_length = rl->length - (vcn - rl->vcn); 3774 if (rl_length < lcn_count) { 3775 lcn_count -= rl_length; 3776 } else { 3777 rl_length = lcn_count; 3778 lcn_count = 0; 3779 } 3780 up_write(&ni->runlist.lock); 3781 3782 if (vol->cluster_size_bits > PAGE_SHIFT) { 3783 lcn_folio_off = folio->index << PAGE_SHIFT; 3784 lcn_folio_off &= vol->cluster_size_mask; 3785 } 3786 3787 bio = bio_alloc(vol->sb->s_bdev, 1, REQ_OP_WRITE, 3788 GFP_NOIO); 3789 bio->bi_iter.bi_sector = 3790 ntfs_bytes_to_bio_sector(ntfs_cluster_to_bytes(vol, lcn) + 3791 lcn_folio_off); 3792 3793 length = min_t(unsigned long, 3794 ntfs_cluster_to_bytes(vol, rl_length), 3795 folio_size(folio)); 3796 if (!bio_add_folio(bio, folio, length, offset)) { 3797 ret = -EIO; 3798 bio_put(bio); 3799 goto err_unlock_folio; 3800 } 3801 3802 bio_err = submit_bio_wait(bio); 3803 bio_put(bio); 3804 if (bio_err) { 3805 ntfs_error(vi->i_sb, 3806 "Synchronous attribute write failed (%d)", 3807 bio_err); 3808 ret = bio_err; 3809 goto err_unlock_folio; 3810 } 3811 vcn += rl_length; 3812 offset += length; 3813 } while (lcn_count != 0); 3814 3815 folio_mark_uptodate(folio); 3816 } else { 3817 folio_mark_uptodate(folio); 3818 folio_mark_dirty(folio); 3819 } 3820 err_unlock_folio: 3821 folio_unlock(folio); 3822 folio_put(folio); 3823 3824 if (ret) 3825 break; 3826 3827 written += attr_len; 3828 buf += attr_len; 3829 pos += attr_len; 3830 count -= attr_len; 3831 index++; 3832 3833 cond_resched(); 3834 } 3835 3836 return ret ? ret : written; 3837 } 3838 3839 s64 ntfs_inode_attr_pwrite(struct inode *vi, s64 pos, s64 count, u8 *buf, bool sync) 3840 { 3841 struct ntfs_inode *ni = NTFS_I(vi); 3842 struct ntfs_attr_search_ctx *ctx; 3843 s64 ret; 3844 3845 WARN_ON(!NInoAttr(ni)); 3846 3847 ctx = ntfs_attr_get_search_ctx(ni->ext.base_ntfs_ino, NULL); 3848 if (!ctx) { 3849 ntfs_error(vi->i_sb, "Failed to get attr search ctx"); 3850 return -ENOMEM; 3851 } 3852 3853 ret = ntfs_attr_lookup(ni->type, ni->name, ni->name_len, CASE_SENSITIVE, 3854 0, NULL, 0, ctx); 3855 if (ret) { 3856 ntfs_attr_put_search_ctx(ctx); 3857 ntfs_error(vi->i_sb, "Failed to look up attr %#x", ni->type); 3858 return ret; 3859 } 3860 3861 mutex_lock(&ni->mrec_lock); 3862 ret = ntfs_enlarge_attribute(vi, pos, count, ctx); 3863 mutex_unlock(&ni->mrec_lock); 3864 if (ret) 3865 goto out; 3866 3867 if (NInoNonResident(ni)) 3868 ret = __ntfs_inode_non_resident_attr_pwrite(vi, pos, count, buf, ctx, sync); 3869 else 3870 ret = __ntfs_inode_resident_attr_pwrite(vi, pos, count, buf, ctx); 3871 out: 3872 ntfs_attr_put_search_ctx(ctx); 3873 return ret; 3874 } 3875 3876 struct folio *ntfs_get_locked_folio(struct address_space *mapping, 3877 pgoff_t index, pgoff_t end_index, struct file_ra_state *ra) 3878 { 3879 struct folio *folio; 3880 3881 folio = filemap_lock_folio(mapping, index); 3882 if (IS_ERR(folio)) { 3883 if (PTR_ERR(folio) != -ENOENT) 3884 return folio; 3885 3886 page_cache_sync_readahead(mapping, ra, NULL, index, 3887 end_index - index); 3888 folio = read_mapping_folio(mapping, index, NULL); 3889 if (!IS_ERR(folio)) 3890 folio_lock(folio); 3891 } 3892 3893 return folio; 3894 } 3895