1
2
3
4
5
6
7
8#include <linux/buffer_head.h>
9#include <linux/fs.h>
10#include <linux/mm.h>
11#include <linux/mount.h>
12#include <linux/mutex.h>
13#include <linux/pagemap.h>
14#include <linux/quotaops.h>
15#include <linux/slab.h>
16#include <linux/log2.h>
17
18#include "aops.h"
19#include "attrib.h"
20#include "bitmap.h"
21#include "dir.h"
22#include "debug.h"
23#include "inode.h"
24#include "lcnalloc.h"
25#include "malloc.h"
26#include "mft.h"
27#include "time.h"
28#include "ntfs.h"
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46int ntfs_test_inode(struct inode *vi, void *data)
47{
48 ntfs_attr *na = (ntfs_attr *)data;
49 ntfs_inode *ni;
50
51 if (vi->i_ino != na->mft_no)
52 return 0;
53 ni = NTFS_I(vi);
54
55 if (likely(!NInoAttr(ni))) {
56
57 if (unlikely(na->type != AT_UNUSED))
58 return 0;
59 } else {
60
61 if (ni->type != na->type)
62 return 0;
63 if (ni->name_len != na->name_len)
64 return 0;
65 if (na->name_len && memcmp(ni->name, na->name,
66 na->name_len * sizeof(ntfschar)))
67 return 0;
68 }
69
70 return 1;
71}
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91static int ntfs_init_locked_inode(struct inode *vi, void *data)
92{
93 ntfs_attr *na = (ntfs_attr *)data;
94 ntfs_inode *ni = NTFS_I(vi);
95
96 vi->i_ino = na->mft_no;
97
98 ni->type = na->type;
99 if (na->type == AT_INDEX_ALLOCATION)
100 NInoSetMstProtected(ni);
101
102 ni->name = na->name;
103 ni->name_len = na->name_len;
104
105
106 if (likely(na->type == AT_UNUSED)) {
107 BUG_ON(na->name);
108 BUG_ON(na->name_len);
109 return 0;
110 }
111
112
113 NInoSetAttr(ni);
114
115
116
117
118
119
120
121
122 if (na->name_len && na->name != I30) {
123 unsigned int i;
124
125 BUG_ON(!na->name);
126 i = na->name_len * sizeof(ntfschar);
127 ni->name = kmalloc(i + sizeof(ntfschar), GFP_ATOMIC);
128 if (!ni->name)
129 return -ENOMEM;
130 memcpy(ni->name, na->name, i);
131 ni->name[na->name_len] = 0;
132 }
133 return 0;
134}
135
136static int ntfs_read_locked_inode(struct inode *vi);
137static int ntfs_read_locked_attr_inode(struct inode *base_vi, struct inode *vi);
138static int ntfs_read_locked_index_inode(struct inode *base_vi,
139 struct inode *vi);
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157struct inode *ntfs_iget(struct super_block *sb, unsigned long mft_no)
158{
159 struct inode *vi;
160 int err;
161 ntfs_attr na;
162
163 na.mft_no = mft_no;
164 na.type = AT_UNUSED;
165 na.name = NULL;
166 na.name_len = 0;
167
168 vi = iget5_locked(sb, mft_no, ntfs_test_inode,
169 ntfs_init_locked_inode, &na);
170 if (unlikely(!vi))
171 return ERR_PTR(-ENOMEM);
172
173 err = 0;
174
175
176 if (vi->i_state & I_NEW) {
177 err = ntfs_read_locked_inode(vi);
178 unlock_new_inode(vi);
179 }
180
181
182
183
184 if (unlikely(err == -ENOMEM)) {
185 iput(vi);
186 vi = ERR_PTR(err);
187 }
188 return vi;
189}
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214struct inode *ntfs_attr_iget(struct inode *base_vi, ATTR_TYPE type,
215 ntfschar *name, u32 name_len)
216{
217 struct inode *vi;
218 int err;
219 ntfs_attr na;
220
221
222 BUG_ON(type == AT_INDEX_ALLOCATION);
223
224 na.mft_no = base_vi->i_ino;
225 na.type = type;
226 na.name = name;
227 na.name_len = name_len;
228
229 vi = iget5_locked(base_vi->i_sb, na.mft_no, ntfs_test_inode,
230 ntfs_init_locked_inode, &na);
231 if (unlikely(!vi))
232 return ERR_PTR(-ENOMEM);
233
234 err = 0;
235
236
237 if (vi->i_state & I_NEW) {
238 err = ntfs_read_locked_attr_inode(base_vi, vi);
239 unlock_new_inode(vi);
240 }
241
242
243
244
245
246 if (unlikely(err)) {
247 iput(vi);
248 vi = ERR_PTR(err);
249 }
250 return vi;
251}
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272struct inode *ntfs_index_iget(struct inode *base_vi, ntfschar *name,
273 u32 name_len)
274{
275 struct inode *vi;
276 int err;
277 ntfs_attr na;
278
279 na.mft_no = base_vi->i_ino;
280 na.type = AT_INDEX_ALLOCATION;
281 na.name = name;
282 na.name_len = name_len;
283
284 vi = iget5_locked(base_vi->i_sb, na.mft_no, ntfs_test_inode,
285 ntfs_init_locked_inode, &na);
286 if (unlikely(!vi))
287 return ERR_PTR(-ENOMEM);
288
289 err = 0;
290
291
292 if (vi->i_state & I_NEW) {
293 err = ntfs_read_locked_index_inode(base_vi, vi);
294 unlock_new_inode(vi);
295 }
296
297
298
299
300
301 if (unlikely(err)) {
302 iput(vi);
303 vi = ERR_PTR(err);
304 }
305 return vi;
306}
307
308struct inode *ntfs_alloc_big_inode(struct super_block *sb)
309{
310 ntfs_inode *ni;
311
312 ntfs_debug("Entering.");
313 ni = kmem_cache_alloc(ntfs_big_inode_cache, GFP_NOFS);
314 if (likely(ni != NULL)) {
315 ni->state = 0;
316 return VFS_I(ni);
317 }
318 ntfs_error(sb, "Allocation of NTFS big inode structure failed.");
319 return NULL;
320}
321
322void ntfs_free_big_inode(struct inode *inode)
323{
324 kmem_cache_free(ntfs_big_inode_cache, NTFS_I(inode));
325}
326
327static inline ntfs_inode *ntfs_alloc_extent_inode(void)
328{
329 ntfs_inode *ni;
330
331 ntfs_debug("Entering.");
332 ni = kmem_cache_alloc(ntfs_inode_cache, GFP_NOFS);
333 if (likely(ni != NULL)) {
334 ni->state = 0;
335 return ni;
336 }
337 ntfs_error(NULL, "Allocation of NTFS inode structure failed.");
338 return NULL;
339}
340
341static void ntfs_destroy_extent_inode(ntfs_inode *ni)
342{
343 ntfs_debug("Entering.");
344 BUG_ON(ni->page);
345 if (!atomic_dec_and_test(&ni->count))
346 BUG();
347 kmem_cache_free(ntfs_inode_cache, ni);
348}
349
350
351
352
353
354static struct lock_class_key attr_list_rl_lock_class;
355
356
357
358
359
360
361
362
363
364
365
366
367
368void __ntfs_init_inode(struct super_block *sb, ntfs_inode *ni)
369{
370 ntfs_debug("Entering.");
371 rwlock_init(&ni->size_lock);
372 ni->initialized_size = ni->allocated_size = 0;
373 ni->seq_no = 0;
374 atomic_set(&ni->count, 1);
375 ni->vol = NTFS_SB(sb);
376 ntfs_init_runlist(&ni->runlist);
377 mutex_init(&ni->mrec_lock);
378 ni->page = NULL;
379 ni->page_ofs = 0;
380 ni->attr_list_size = 0;
381 ni->attr_list = NULL;
382 ntfs_init_runlist(&ni->attr_list_rl);
383 lockdep_set_class(&ni->attr_list_rl.lock,
384 &attr_list_rl_lock_class);
385 ni->itype.index.block_size = 0;
386 ni->itype.index.vcn_size = 0;
387 ni->itype.index.collation_rule = 0;
388 ni->itype.index.block_size_bits = 0;
389 ni->itype.index.vcn_size_bits = 0;
390 mutex_init(&ni->extent_lock);
391 ni->nr_extents = 0;
392 ni->ext.base_ntfs_ino = NULL;
393}
394
395
396
397
398
399
400static struct lock_class_key extent_inode_mrec_lock_key;
401
402inline ntfs_inode *ntfs_new_extent_inode(struct super_block *sb,
403 unsigned long mft_no)
404{
405 ntfs_inode *ni = ntfs_alloc_extent_inode();
406
407 ntfs_debug("Entering.");
408 if (likely(ni != NULL)) {
409 __ntfs_init_inode(sb, ni);
410 lockdep_set_class(&ni->mrec_lock, &extent_inode_mrec_lock_key);
411 ni->mft_no = mft_no;
412 ni->type = AT_UNUSED;
413 ni->name = NULL;
414 ni->name_len = 0;
415 }
416 return ni;
417}
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432static int ntfs_is_extended_system_file(ntfs_attr_search_ctx *ctx)
433{
434 int nr_links, err;
435
436
437 ntfs_attr_reinit_search_ctx(ctx);
438
439
440 nr_links = le16_to_cpu(ctx->mrec->link_count);
441
442
443 while (!(err = ntfs_attr_lookup(AT_FILE_NAME, NULL, 0, 0, 0, NULL, 0,
444 ctx))) {
445 FILE_NAME_ATTR *file_name_attr;
446 ATTR_RECORD *attr = ctx->attr;
447 u8 *p, *p2;
448
449 nr_links--;
450
451
452
453
454 p = (u8*)attr + le32_to_cpu(attr->length);
455 if (p < (u8*)ctx->mrec || (u8*)p > (u8*)ctx->mrec +
456 le32_to_cpu(ctx->mrec->bytes_in_use)) {
457err_corrupt_attr:
458 ntfs_error(ctx->ntfs_ino->vol->sb, "Corrupt file name "
459 "attribute. You should run chkdsk.");
460 return -EIO;
461 }
462 if (attr->non_resident) {
463 ntfs_error(ctx->ntfs_ino->vol->sb, "Non-resident file "
464 "name. You should run chkdsk.");
465 return -EIO;
466 }
467 if (attr->flags) {
468 ntfs_error(ctx->ntfs_ino->vol->sb, "File name with "
469 "invalid flags. You should run "
470 "chkdsk.");
471 return -EIO;
472 }
473 if (!(attr->data.resident.flags & RESIDENT_ATTR_IS_INDEXED)) {
474 ntfs_error(ctx->ntfs_ino->vol->sb, "Unindexed file "
475 "name. You should run chkdsk.");
476 return -EIO;
477 }
478 file_name_attr = (FILE_NAME_ATTR*)((u8*)attr +
479 le16_to_cpu(attr->data.resident.value_offset));
480 p2 = (u8 *)file_name_attr + le32_to_cpu(attr->data.resident.value_length);
481 if (p2 < (u8*)attr || p2 > p)
482 goto err_corrupt_attr;
483
484 if (MREF_LE(file_name_attr->parent_directory) == FILE_Extend)
485 return 1;
486 }
487 if (unlikely(err != -ENOENT))
488 return err;
489 if (unlikely(nr_links)) {
490 ntfs_error(ctx->ntfs_ino->vol->sb, "Inode hard link count "
491 "doesn't match number of name attributes. You "
492 "should run chkdsk.");
493 return -EIO;
494 }
495 return 0;
496}
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524static int ntfs_read_locked_inode(struct inode *vi)
525{
526 ntfs_volume *vol = NTFS_SB(vi->i_sb);
527 ntfs_inode *ni;
528 struct inode *bvi;
529 MFT_RECORD *m;
530 ATTR_RECORD *a;
531 STANDARD_INFORMATION *si;
532 ntfs_attr_search_ctx *ctx;
533 int err = 0;
534
535 ntfs_debug("Entering for i_ino 0x%lx.", vi->i_ino);
536
537
538 vi->i_uid = vol->uid;
539 vi->i_gid = vol->gid;
540 vi->i_mode = 0;
541
542
543
544
545
546 if (vi->i_ino != FILE_MFT)
547 ntfs_init_big_inode(vi);
548 ni = NTFS_I(vi);
549
550 m = map_mft_record(ni);
551 if (IS_ERR(m)) {
552 err = PTR_ERR(m);
553 goto err_out;
554 }
555 ctx = ntfs_attr_get_search_ctx(ni, m);
556 if (!ctx) {
557 err = -ENOMEM;
558 goto unm_err_out;
559 }
560
561 if (!(m->flags & MFT_RECORD_IN_USE)) {
562 ntfs_error(vi->i_sb, "Inode is not in use!");
563 goto unm_err_out;
564 }
565 if (m->base_mft_record) {
566 ntfs_error(vi->i_sb, "Inode is an extent inode!");
567 goto unm_err_out;
568 }
569
570
571 vi->i_generation = ni->seq_no = le16_to_cpu(m->sequence_number);
572
573
574
575
576
577
578
579
580
581
582 set_nlink(vi, le16_to_cpu(m->link_count));
583
584
585
586
587
588
589
590
591 vi->i_mode |= S_IRWXUGO;
592
593 if (IS_RDONLY(vi))
594 vi->i_mode &= ~S_IWUGO;
595 if (m->flags & MFT_RECORD_IS_DIRECTORY) {
596 vi->i_mode |= S_IFDIR;
597
598
599
600
601 vi->i_mode &= ~vol->dmask;
602
603 if (vi->i_nlink > 1)
604 set_nlink(vi, 1);
605 } else {
606 vi->i_mode |= S_IFREG;
607
608 vi->i_mode &= ~vol->fmask;
609 }
610
611
612
613
614
615
616 err = ntfs_attr_lookup(AT_STANDARD_INFORMATION, NULL, 0, 0, 0, NULL, 0,
617 ctx);
618 if (unlikely(err)) {
619 if (err == -ENOENT) {
620
621
622
623
624
625 ntfs_error(vi->i_sb, "$STANDARD_INFORMATION attribute "
626 "is missing.");
627 }
628 goto unm_err_out;
629 }
630 a = ctx->attr;
631
632 if ((u8 *)a + le16_to_cpu(a->data.resident.value_offset)
633 + le32_to_cpu(a->data.resident.value_length) >
634 (u8 *)ctx->mrec + vol->mft_record_size) {
635 ntfs_error(vi->i_sb, "Corrupt standard information attribute in inode.");
636 goto unm_err_out;
637 }
638 si = (STANDARD_INFORMATION*)((u8*)a +
639 le16_to_cpu(a->data.resident.value_offset));
640
641
642
643
644
645
646
647
648
649
650
651 vi->i_mtime = ntfs2utc(si->last_data_change_time);
652
653
654
655
656
657 vi->i_ctime = ntfs2utc(si->last_mft_change_time);
658
659
660
661
662 vi->i_atime = ntfs2utc(si->last_access_time);
663
664
665 ntfs_attr_reinit_search_ctx(ctx);
666 err = ntfs_attr_lookup(AT_ATTRIBUTE_LIST, NULL, 0, 0, 0, NULL, 0, ctx);
667 if (err) {
668 if (unlikely(err != -ENOENT)) {
669 ntfs_error(vi->i_sb, "Failed to lookup attribute list "
670 "attribute.");
671 goto unm_err_out;
672 }
673 } else {
674 if (vi->i_ino == FILE_MFT)
675 goto skip_attr_list_load;
676 ntfs_debug("Attribute list found in inode 0x%lx.", vi->i_ino);
677 NInoSetAttrList(ni);
678 a = ctx->attr;
679 if (a->flags & ATTR_COMPRESSION_MASK) {
680 ntfs_error(vi->i_sb, "Attribute list attribute is "
681 "compressed.");
682 goto unm_err_out;
683 }
684 if (a->flags & ATTR_IS_ENCRYPTED ||
685 a->flags & ATTR_IS_SPARSE) {
686 if (a->non_resident) {
687 ntfs_error(vi->i_sb, "Non-resident attribute "
688 "list attribute is encrypted/"
689 "sparse.");
690 goto unm_err_out;
691 }
692 ntfs_warning(vi->i_sb, "Resident attribute list "
693 "attribute in inode 0x%lx is marked "
694 "encrypted/sparse which is not true. "
695 "However, Windows allows this and "
696 "chkdsk does not detect or correct it "
697 "so we will just ignore the invalid "
698 "flags and pretend they are not set.",
699 vi->i_ino);
700 }
701
702 ni->attr_list_size = (u32)ntfs_attr_size(a);
703 ni->attr_list = ntfs_malloc_nofs(ni->attr_list_size);
704 if (!ni->attr_list) {
705 ntfs_error(vi->i_sb, "Not enough memory to allocate "
706 "buffer for attribute list.");
707 err = -ENOMEM;
708 goto unm_err_out;
709 }
710 if (a->non_resident) {
711 NInoSetAttrListNonResident(ni);
712 if (a->data.non_resident.lowest_vcn) {
713 ntfs_error(vi->i_sb, "Attribute list has non "
714 "zero lowest_vcn.");
715 goto unm_err_out;
716 }
717
718
719
720
721 ni->attr_list_rl.rl = ntfs_mapping_pairs_decompress(vol,
722 a, NULL);
723 if (IS_ERR(ni->attr_list_rl.rl)) {
724 err = PTR_ERR(ni->attr_list_rl.rl);
725 ni->attr_list_rl.rl = NULL;
726 ntfs_error(vi->i_sb, "Mapping pairs "
727 "decompression failed.");
728 goto unm_err_out;
729 }
730
731 if ((err = load_attribute_list(vol, &ni->attr_list_rl,
732 ni->attr_list, ni->attr_list_size,
733 sle64_to_cpu(a->data.non_resident.
734 initialized_size)))) {
735 ntfs_error(vi->i_sb, "Failed to load "
736 "attribute list attribute.");
737 goto unm_err_out;
738 }
739 } else {
740 if ((u8*)a + le16_to_cpu(a->data.resident.value_offset)
741 + le32_to_cpu(
742 a->data.resident.value_length) >
743 (u8*)ctx->mrec + vol->mft_record_size) {
744 ntfs_error(vi->i_sb, "Corrupt attribute list "
745 "in inode.");
746 goto unm_err_out;
747 }
748
749 memcpy(ni->attr_list, (u8*)a + le16_to_cpu(
750 a->data.resident.value_offset),
751 le32_to_cpu(
752 a->data.resident.value_length));
753 }
754 }
755skip_attr_list_load:
756
757
758
759
760 if (S_ISDIR(vi->i_mode)) {
761 loff_t bvi_size;
762 ntfs_inode *bni;
763 INDEX_ROOT *ir;
764 u8 *ir_end, *index_end;
765
766
767 ntfs_attr_reinit_search_ctx(ctx);
768 err = ntfs_attr_lookup(AT_INDEX_ROOT, I30, 4, CASE_SENSITIVE,
769 0, NULL, 0, ctx);
770 if (unlikely(err)) {
771 if (err == -ENOENT) {
772
773
774
775 ntfs_error(vi->i_sb, "$INDEX_ROOT attribute "
776 "is missing.");
777 }
778 goto unm_err_out;
779 }
780 a = ctx->attr;
781
782 if (unlikely(a->non_resident)) {
783 ntfs_error(vol->sb, "$INDEX_ROOT attribute is not "
784 "resident.");
785 goto unm_err_out;
786 }
787
788 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
789 le16_to_cpu(a->data.resident.value_offset)))) {
790 ntfs_error(vol->sb, "$INDEX_ROOT attribute name is "
791 "placed after the attribute value.");
792 goto unm_err_out;
793 }
794
795
796
797
798
799
800 if (a->flags & ATTR_COMPRESSION_MASK)
801 NInoSetCompressed(ni);
802 if (a->flags & ATTR_IS_ENCRYPTED) {
803 if (a->flags & ATTR_COMPRESSION_MASK) {
804 ntfs_error(vi->i_sb, "Found encrypted and "
805 "compressed attribute.");
806 goto unm_err_out;
807 }
808 NInoSetEncrypted(ni);
809 }
810 if (a->flags & ATTR_IS_SPARSE)
811 NInoSetSparse(ni);
812 ir = (INDEX_ROOT*)((u8*)a +
813 le16_to_cpu(a->data.resident.value_offset));
814 ir_end = (u8*)ir + le32_to_cpu(a->data.resident.value_length);
815 if (ir_end > (u8*)ctx->mrec + vol->mft_record_size) {
816 ntfs_error(vi->i_sb, "$INDEX_ROOT attribute is "
817 "corrupt.");
818 goto unm_err_out;
819 }
820 index_end = (u8*)&ir->index +
821 le32_to_cpu(ir->index.index_length);
822 if (index_end > ir_end) {
823 ntfs_error(vi->i_sb, "Directory index is corrupt.");
824 goto unm_err_out;
825 }
826 if (ir->type != AT_FILE_NAME) {
827 ntfs_error(vi->i_sb, "Indexed attribute is not "
828 "$FILE_NAME.");
829 goto unm_err_out;
830 }
831 if (ir->collation_rule != COLLATION_FILE_NAME) {
832 ntfs_error(vi->i_sb, "Index collation rule is not "
833 "COLLATION_FILE_NAME.");
834 goto unm_err_out;
835 }
836 ni->itype.index.collation_rule = ir->collation_rule;
837 ni->itype.index.block_size = le32_to_cpu(ir->index_block_size);
838 if (ni->itype.index.block_size &
839 (ni->itype.index.block_size - 1)) {
840 ntfs_error(vi->i_sb, "Index block size (%u) is not a "
841 "power of two.",
842 ni->itype.index.block_size);
843 goto unm_err_out;
844 }
845 if (ni->itype.index.block_size > PAGE_SIZE) {
846 ntfs_error(vi->i_sb, "Index block size (%u) > "
847 "PAGE_SIZE (%ld) is not "
848 "supported. Sorry.",
849 ni->itype.index.block_size,
850 PAGE_SIZE);
851 err = -EOPNOTSUPP;
852 goto unm_err_out;
853 }
854 if (ni->itype.index.block_size < NTFS_BLOCK_SIZE) {
855 ntfs_error(vi->i_sb, "Index block size (%u) < "
856 "NTFS_BLOCK_SIZE (%i) is not "
857 "supported. Sorry.",
858 ni->itype.index.block_size,
859 NTFS_BLOCK_SIZE);
860 err = -EOPNOTSUPP;
861 goto unm_err_out;
862 }
863 ni->itype.index.block_size_bits =
864 ffs(ni->itype.index.block_size) - 1;
865
866 if (vol->cluster_size <= ni->itype.index.block_size) {
867 ni->itype.index.vcn_size = vol->cluster_size;
868 ni->itype.index.vcn_size_bits = vol->cluster_size_bits;
869 } else {
870 ni->itype.index.vcn_size = vol->sector_size;
871 ni->itype.index.vcn_size_bits = vol->sector_size_bits;
872 }
873
874
875 NInoSetMstProtected(ni);
876 ni->type = AT_INDEX_ALLOCATION;
877 ni->name = I30;
878 ni->name_len = 4;
879
880 if (!(ir->index.flags & LARGE_INDEX)) {
881
882 vi->i_size = ni->initialized_size =
883 ni->allocated_size = 0;
884
885 ntfs_attr_put_search_ctx(ctx);
886 unmap_mft_record(ni);
887 m = NULL;
888 ctx = NULL;
889 goto skip_large_dir_stuff;
890 }
891 NInoSetIndexAllocPresent(ni);
892
893 ntfs_attr_reinit_search_ctx(ctx);
894 err = ntfs_attr_lookup(AT_INDEX_ALLOCATION, I30, 4,
895 CASE_SENSITIVE, 0, NULL, 0, ctx);
896 if (unlikely(err)) {
897 if (err == -ENOENT)
898 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION "
899 "attribute is not present but "
900 "$INDEX_ROOT indicated it is.");
901 else
902 ntfs_error(vi->i_sb, "Failed to lookup "
903 "$INDEX_ALLOCATION "
904 "attribute.");
905 goto unm_err_out;
906 }
907 a = ctx->attr;
908 if (!a->non_resident) {
909 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute "
910 "is resident.");
911 goto unm_err_out;
912 }
913
914
915
916
917 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
918 le16_to_cpu(
919 a->data.non_resident.mapping_pairs_offset)))) {
920 ntfs_error(vol->sb, "$INDEX_ALLOCATION attribute name "
921 "is placed after the mapping pairs "
922 "array.");
923 goto unm_err_out;
924 }
925 if (a->flags & ATTR_IS_ENCRYPTED) {
926 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute "
927 "is encrypted.");
928 goto unm_err_out;
929 }
930 if (a->flags & ATTR_IS_SPARSE) {
931 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute "
932 "is sparse.");
933 goto unm_err_out;
934 }
935 if (a->flags & ATTR_COMPRESSION_MASK) {
936 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute "
937 "is compressed.");
938 goto unm_err_out;
939 }
940 if (a->data.non_resident.lowest_vcn) {
941 ntfs_error(vi->i_sb, "First extent of "
942 "$INDEX_ALLOCATION attribute has non "
943 "zero lowest_vcn.");
944 goto unm_err_out;
945 }
946 vi->i_size = sle64_to_cpu(a->data.non_resident.data_size);
947 ni->initialized_size = sle64_to_cpu(
948 a->data.non_resident.initialized_size);
949 ni->allocated_size = sle64_to_cpu(
950 a->data.non_resident.allocated_size);
951
952
953
954
955 ntfs_attr_put_search_ctx(ctx);
956 unmap_mft_record(ni);
957 m = NULL;
958 ctx = NULL;
959
960 bvi = ntfs_attr_iget(vi, AT_BITMAP, I30, 4);
961 if (IS_ERR(bvi)) {
962 ntfs_error(vi->i_sb, "Failed to get bitmap attribute.");
963 err = PTR_ERR(bvi);
964 goto unm_err_out;
965 }
966 bni = NTFS_I(bvi);
967 if (NInoCompressed(bni) || NInoEncrypted(bni) ||
968 NInoSparse(bni)) {
969 ntfs_error(vi->i_sb, "$BITMAP attribute is compressed "
970 "and/or encrypted and/or sparse.");
971 goto iput_unm_err_out;
972 }
973
974 bvi_size = i_size_read(bvi);
975 if ((bvi_size << 3) < (vi->i_size >>
976 ni->itype.index.block_size_bits)) {
977 ntfs_error(vi->i_sb, "Index bitmap too small (0x%llx) "
978 "for index allocation (0x%llx).",
979 bvi_size << 3, vi->i_size);
980 goto iput_unm_err_out;
981 }
982
983 iput(bvi);
984skip_large_dir_stuff:
985
986 vi->i_op = &ntfs_dir_inode_ops;
987 vi->i_fop = &ntfs_dir_ops;
988 vi->i_mapping->a_ops = &ntfs_mst_aops;
989 } else {
990
991 ntfs_attr_reinit_search_ctx(ctx);
992
993
994 ni->type = AT_DATA;
995 ni->name = NULL;
996 ni->name_len = 0;
997
998
999 err = ntfs_attr_lookup(AT_DATA, NULL, 0, 0, 0, NULL, 0, ctx);
1000 if (unlikely(err)) {
1001 vi->i_size = ni->initialized_size =
1002 ni->allocated_size = 0;
1003 if (err != -ENOENT) {
1004 ntfs_error(vi->i_sb, "Failed to lookup $DATA "
1005 "attribute.");
1006 goto unm_err_out;
1007 }
1008
1009
1010
1011
1012 if (vi->i_ino == FILE_Secure)
1013 goto no_data_attr_special_case;
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023 if (ntfs_is_extended_system_file(ctx) > 0)
1024 goto no_data_attr_special_case;
1025
1026
1027 ntfs_error(vi->i_sb, "$DATA attribute is missing.");
1028 goto unm_err_out;
1029 }
1030 a = ctx->attr;
1031
1032 if (a->flags & (ATTR_COMPRESSION_MASK | ATTR_IS_SPARSE)) {
1033 if (a->flags & ATTR_COMPRESSION_MASK) {
1034 NInoSetCompressed(ni);
1035 if (vol->cluster_size > 4096) {
1036 ntfs_error(vi->i_sb, "Found "
1037 "compressed data but "
1038 "compression is "
1039 "disabled due to "
1040 "cluster size (%i) > "
1041 "4kiB.",
1042 vol->cluster_size);
1043 goto unm_err_out;
1044 }
1045 if ((a->flags & ATTR_COMPRESSION_MASK)
1046 != ATTR_IS_COMPRESSED) {
1047 ntfs_error(vi->i_sb, "Found unknown "
1048 "compression method "
1049 "or corrupt file.");
1050 goto unm_err_out;
1051 }
1052 }
1053 if (a->flags & ATTR_IS_SPARSE)
1054 NInoSetSparse(ni);
1055 }
1056 if (a->flags & ATTR_IS_ENCRYPTED) {
1057 if (NInoCompressed(ni)) {
1058 ntfs_error(vi->i_sb, "Found encrypted and "
1059 "compressed data.");
1060 goto unm_err_out;
1061 }
1062 NInoSetEncrypted(ni);
1063 }
1064 if (a->non_resident) {
1065 NInoSetNonResident(ni);
1066 if (NInoCompressed(ni) || NInoSparse(ni)) {
1067 if (NInoCompressed(ni) && a->data.non_resident.
1068 compression_unit != 4) {
1069 ntfs_error(vi->i_sb, "Found "
1070 "non-standard "
1071 "compression unit (%u "
1072 "instead of 4). "
1073 "Cannot handle this.",
1074 a->data.non_resident.
1075 compression_unit);
1076 err = -EOPNOTSUPP;
1077 goto unm_err_out;
1078 }
1079 if (a->data.non_resident.compression_unit) {
1080 ni->itype.compressed.block_size = 1U <<
1081 (a->data.non_resident.
1082 compression_unit +
1083 vol->cluster_size_bits);
1084 ni->itype.compressed.block_size_bits =
1085 ffs(ni->itype.
1086 compressed.
1087 block_size) - 1;
1088 ni->itype.compressed.block_clusters =
1089 1U << a->data.
1090 non_resident.
1091 compression_unit;
1092 } else {
1093 ni->itype.compressed.block_size = 0;
1094 ni->itype.compressed.block_size_bits =
1095 0;
1096 ni->itype.compressed.block_clusters =
1097 0;
1098 }
1099 ni->itype.compressed.size = sle64_to_cpu(
1100 a->data.non_resident.
1101 compressed_size);
1102 }
1103 if (a->data.non_resident.lowest_vcn) {
1104 ntfs_error(vi->i_sb, "First extent of $DATA "
1105 "attribute has non zero "
1106 "lowest_vcn.");
1107 goto unm_err_out;
1108 }
1109 vi->i_size = sle64_to_cpu(
1110 a->data.non_resident.data_size);
1111 ni->initialized_size = sle64_to_cpu(
1112 a->data.non_resident.initialized_size);
1113 ni->allocated_size = sle64_to_cpu(
1114 a->data.non_resident.allocated_size);
1115 } else {
1116 vi->i_size = ni->initialized_size = le32_to_cpu(
1117 a->data.resident.value_length);
1118 ni->allocated_size = le32_to_cpu(a->length) -
1119 le16_to_cpu(
1120 a->data.resident.value_offset);
1121 if (vi->i_size > ni->allocated_size) {
1122 ntfs_error(vi->i_sb, "Resident data attribute "
1123 "is corrupt (size exceeds "
1124 "allocation).");
1125 goto unm_err_out;
1126 }
1127 }
1128no_data_attr_special_case:
1129
1130 ntfs_attr_put_search_ctx(ctx);
1131 unmap_mft_record(ni);
1132 m = NULL;
1133 ctx = NULL;
1134
1135 vi->i_op = &ntfs_file_inode_ops;
1136 vi->i_fop = &ntfs_file_ops;
1137 vi->i_mapping->a_ops = &ntfs_normal_aops;
1138 if (NInoMstProtected(ni))
1139 vi->i_mapping->a_ops = &ntfs_mst_aops;
1140 else if (NInoCompressed(ni))
1141 vi->i_mapping->a_ops = &ntfs_compressed_aops;
1142 }
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154 if (S_ISREG(vi->i_mode) && (NInoCompressed(ni) || NInoSparse(ni)))
1155 vi->i_blocks = ni->itype.compressed.size >> 9;
1156 else
1157 vi->i_blocks = ni->allocated_size >> 9;
1158 ntfs_debug("Done.");
1159 return 0;
1160iput_unm_err_out:
1161 iput(bvi);
1162unm_err_out:
1163 if (!err)
1164 err = -EIO;
1165 if (ctx)
1166 ntfs_attr_put_search_ctx(ctx);
1167 if (m)
1168 unmap_mft_record(ni);
1169err_out:
1170 ntfs_error(vol->sb, "Failed with error code %i. Marking corrupt "
1171 "inode 0x%lx as bad. Run chkdsk.", err, vi->i_ino);
1172 make_bad_inode(vi);
1173 if (err != -EOPNOTSUPP && err != -ENOMEM)
1174 NVolSetErrors(vol);
1175 return err;
1176}
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200static int ntfs_read_locked_attr_inode(struct inode *base_vi, struct inode *vi)
1201{
1202 ntfs_volume *vol = NTFS_SB(vi->i_sb);
1203 ntfs_inode *ni, *base_ni;
1204 MFT_RECORD *m;
1205 ATTR_RECORD *a;
1206 ntfs_attr_search_ctx *ctx;
1207 int err = 0;
1208
1209 ntfs_debug("Entering for i_ino 0x%lx.", vi->i_ino);
1210
1211 ntfs_init_big_inode(vi);
1212
1213 ni = NTFS_I(vi);
1214 base_ni = NTFS_I(base_vi);
1215
1216
1217 vi->i_uid = base_vi->i_uid;
1218 vi->i_gid = base_vi->i_gid;
1219 set_nlink(vi, base_vi->i_nlink);
1220 vi->i_mtime = base_vi->i_mtime;
1221 vi->i_ctime = base_vi->i_ctime;
1222 vi->i_atime = base_vi->i_atime;
1223 vi->i_generation = ni->seq_no = base_ni->seq_no;
1224
1225
1226 vi->i_mode = base_vi->i_mode & ~S_IFMT;
1227
1228 m = map_mft_record(base_ni);
1229 if (IS_ERR(m)) {
1230 err = PTR_ERR(m);
1231 goto err_out;
1232 }
1233 ctx = ntfs_attr_get_search_ctx(base_ni, m);
1234 if (!ctx) {
1235 err = -ENOMEM;
1236 goto unm_err_out;
1237 }
1238
1239 err = ntfs_attr_lookup(ni->type, ni->name, ni->name_len,
1240 CASE_SENSITIVE, 0, NULL, 0, ctx);
1241 if (unlikely(err))
1242 goto unm_err_out;
1243 a = ctx->attr;
1244 if (a->flags & (ATTR_COMPRESSION_MASK | ATTR_IS_SPARSE)) {
1245 if (a->flags & ATTR_COMPRESSION_MASK) {
1246 NInoSetCompressed(ni);
1247 if ((ni->type != AT_DATA) || (ni->type == AT_DATA &&
1248 ni->name_len)) {
1249 ntfs_error(vi->i_sb, "Found compressed "
1250 "non-data or named data "
1251 "attribute. Please report "
1252 "you saw this message to "
1253 "linux-ntfs-dev@lists."
1254 "sourceforge.net");
1255 goto unm_err_out;
1256 }
1257 if (vol->cluster_size > 4096) {
1258 ntfs_error(vi->i_sb, "Found compressed "
1259 "attribute but compression is "
1260 "disabled due to cluster size "
1261 "(%i) > 4kiB.",
1262 vol->cluster_size);
1263 goto unm_err_out;
1264 }
1265 if ((a->flags & ATTR_COMPRESSION_MASK) !=
1266 ATTR_IS_COMPRESSED) {
1267 ntfs_error(vi->i_sb, "Found unknown "
1268 "compression method.");
1269 goto unm_err_out;
1270 }
1271 }
1272
1273
1274
1275
1276 if (NInoMstProtected(ni) && ni->type != AT_INDEX_ROOT) {
1277 ntfs_error(vi->i_sb, "Found mst protected attribute "
1278 "but the attribute is %s. Please "
1279 "report you saw this message to "
1280 "linux-ntfs-dev@lists.sourceforge.net",
1281 NInoCompressed(ni) ? "compressed" :
1282 "sparse");
1283 goto unm_err_out;
1284 }
1285 if (a->flags & ATTR_IS_SPARSE)
1286 NInoSetSparse(ni);
1287 }
1288 if (a->flags & ATTR_IS_ENCRYPTED) {
1289 if (NInoCompressed(ni)) {
1290 ntfs_error(vi->i_sb, "Found encrypted and compressed "
1291 "data.");
1292 goto unm_err_out;
1293 }
1294
1295
1296
1297
1298 if (NInoMstProtected(ni) && ni->type != AT_INDEX_ROOT) {
1299 ntfs_error(vi->i_sb, "Found mst protected attribute "
1300 "but the attribute is encrypted. "
1301 "Please report you saw this message "
1302 "to linux-ntfs-dev@lists.sourceforge."
1303 "net");
1304 goto unm_err_out;
1305 }
1306 if (ni->type != AT_DATA) {
1307 ntfs_error(vi->i_sb, "Found encrypted non-data "
1308 "attribute.");
1309 goto unm_err_out;
1310 }
1311 NInoSetEncrypted(ni);
1312 }
1313 if (!a->non_resident) {
1314
1315 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
1316 le16_to_cpu(a->data.resident.value_offset)))) {
1317 ntfs_error(vol->sb, "Attribute name is placed after "
1318 "the attribute value.");
1319 goto unm_err_out;
1320 }
1321 if (NInoMstProtected(ni)) {
1322 ntfs_error(vi->i_sb, "Found mst protected attribute "
1323 "but the attribute is resident. "
1324 "Please report you saw this message to "
1325 "linux-ntfs-dev@lists.sourceforge.net");
1326 goto unm_err_out;
1327 }
1328 vi->i_size = ni->initialized_size = le32_to_cpu(
1329 a->data.resident.value_length);
1330 ni->allocated_size = le32_to_cpu(a->length) -
1331 le16_to_cpu(a->data.resident.value_offset);
1332 if (vi->i_size > ni->allocated_size) {
1333 ntfs_error(vi->i_sb, "Resident attribute is corrupt "
1334 "(size exceeds allocation).");
1335 goto unm_err_out;
1336 }
1337 } else {
1338 NInoSetNonResident(ni);
1339
1340
1341
1342
1343 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
1344 le16_to_cpu(
1345 a->data.non_resident.mapping_pairs_offset)))) {
1346 ntfs_error(vol->sb, "Attribute name is placed after "
1347 "the mapping pairs array.");
1348 goto unm_err_out;
1349 }
1350 if (NInoCompressed(ni) || NInoSparse(ni)) {
1351 if (NInoCompressed(ni) && a->data.non_resident.
1352 compression_unit != 4) {
1353 ntfs_error(vi->i_sb, "Found non-standard "
1354 "compression unit (%u instead "
1355 "of 4). Cannot handle this.",
1356 a->data.non_resident.
1357 compression_unit);
1358 err = -EOPNOTSUPP;
1359 goto unm_err_out;
1360 }
1361 if (a->data.non_resident.compression_unit) {
1362 ni->itype.compressed.block_size = 1U <<
1363 (a->data.non_resident.
1364 compression_unit +
1365 vol->cluster_size_bits);
1366 ni->itype.compressed.block_size_bits =
1367 ffs(ni->itype.compressed.
1368 block_size) - 1;
1369 ni->itype.compressed.block_clusters = 1U <<
1370 a->data.non_resident.
1371 compression_unit;
1372 } else {
1373 ni->itype.compressed.block_size = 0;
1374 ni->itype.compressed.block_size_bits = 0;
1375 ni->itype.compressed.block_clusters = 0;
1376 }
1377 ni->itype.compressed.size = sle64_to_cpu(
1378 a->data.non_resident.compressed_size);
1379 }
1380 if (a->data.non_resident.lowest_vcn) {
1381 ntfs_error(vi->i_sb, "First extent of attribute has "
1382 "non-zero lowest_vcn.");
1383 goto unm_err_out;
1384 }
1385 vi->i_size = sle64_to_cpu(a->data.non_resident.data_size);
1386 ni->initialized_size = sle64_to_cpu(
1387 a->data.non_resident.initialized_size);
1388 ni->allocated_size = sle64_to_cpu(
1389 a->data.non_resident.allocated_size);
1390 }
1391 vi->i_mapping->a_ops = &ntfs_normal_aops;
1392 if (NInoMstProtected(ni))
1393 vi->i_mapping->a_ops = &ntfs_mst_aops;
1394 else if (NInoCompressed(ni))
1395 vi->i_mapping->a_ops = &ntfs_compressed_aops;
1396 if ((NInoCompressed(ni) || NInoSparse(ni)) && ni->type != AT_INDEX_ROOT)
1397 vi->i_blocks = ni->itype.compressed.size >> 9;
1398 else
1399 vi->i_blocks = ni->allocated_size >> 9;
1400
1401
1402
1403
1404 igrab(base_vi);
1405 ni->ext.base_ntfs_ino = base_ni;
1406 ni->nr_extents = -1;
1407
1408 ntfs_attr_put_search_ctx(ctx);
1409 unmap_mft_record(base_ni);
1410
1411 ntfs_debug("Done.");
1412 return 0;
1413
1414unm_err_out:
1415 if (!err)
1416 err = -EIO;
1417 if (ctx)
1418 ntfs_attr_put_search_ctx(ctx);
1419 unmap_mft_record(base_ni);
1420err_out:
1421 ntfs_error(vol->sb, "Failed with error code %i while reading attribute "
1422 "inode (mft_no 0x%lx, type 0x%x, name_len %i). "
1423 "Marking corrupt inode and base inode 0x%lx as bad. "
1424 "Run chkdsk.", err, vi->i_ino, ni->type, ni->name_len,
1425 base_vi->i_ino);
1426 make_bad_inode(vi);
1427 if (err != -ENOMEM)
1428 NVolSetErrors(vol);
1429 return err;
1430}
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465static int ntfs_read_locked_index_inode(struct inode *base_vi, struct inode *vi)
1466{
1467 loff_t bvi_size;
1468 ntfs_volume *vol = NTFS_SB(vi->i_sb);
1469 ntfs_inode *ni, *base_ni, *bni;
1470 struct inode *bvi;
1471 MFT_RECORD *m;
1472 ATTR_RECORD *a;
1473 ntfs_attr_search_ctx *ctx;
1474 INDEX_ROOT *ir;
1475 u8 *ir_end, *index_end;
1476 int err = 0;
1477
1478 ntfs_debug("Entering for i_ino 0x%lx.", vi->i_ino);
1479 ntfs_init_big_inode(vi);
1480 ni = NTFS_I(vi);
1481 base_ni = NTFS_I(base_vi);
1482
1483 vi->i_uid = base_vi->i_uid;
1484 vi->i_gid = base_vi->i_gid;
1485 set_nlink(vi, base_vi->i_nlink);
1486 vi->i_mtime = base_vi->i_mtime;
1487 vi->i_ctime = base_vi->i_ctime;
1488 vi->i_atime = base_vi->i_atime;
1489 vi->i_generation = ni->seq_no = base_ni->seq_no;
1490
1491 vi->i_mode = base_vi->i_mode & ~S_IFMT;
1492
1493 m = map_mft_record(base_ni);
1494 if (IS_ERR(m)) {
1495 err = PTR_ERR(m);
1496 goto err_out;
1497 }
1498 ctx = ntfs_attr_get_search_ctx(base_ni, m);
1499 if (!ctx) {
1500 err = -ENOMEM;
1501 goto unm_err_out;
1502 }
1503
1504 err = ntfs_attr_lookup(AT_INDEX_ROOT, ni->name, ni->name_len,
1505 CASE_SENSITIVE, 0, NULL, 0, ctx);
1506 if (unlikely(err)) {
1507 if (err == -ENOENT)
1508 ntfs_error(vi->i_sb, "$INDEX_ROOT attribute is "
1509 "missing.");
1510 goto unm_err_out;
1511 }
1512 a = ctx->attr;
1513
1514 if (unlikely(a->non_resident)) {
1515 ntfs_error(vol->sb, "$INDEX_ROOT attribute is not resident.");
1516 goto unm_err_out;
1517 }
1518
1519 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
1520 le16_to_cpu(a->data.resident.value_offset)))) {
1521 ntfs_error(vol->sb, "$INDEX_ROOT attribute name is placed "
1522 "after the attribute value.");
1523 goto unm_err_out;
1524 }
1525
1526
1527
1528
1529 if (a->flags & (ATTR_COMPRESSION_MASK | ATTR_IS_ENCRYPTED |
1530 ATTR_IS_SPARSE)) {
1531 ntfs_error(vi->i_sb, "Found compressed/encrypted/sparse index "
1532 "root attribute.");
1533 goto unm_err_out;
1534 }
1535 ir = (INDEX_ROOT*)((u8*)a + le16_to_cpu(a->data.resident.value_offset));
1536 ir_end = (u8*)ir + le32_to_cpu(a->data.resident.value_length);
1537 if (ir_end > (u8*)ctx->mrec + vol->mft_record_size) {
1538 ntfs_error(vi->i_sb, "$INDEX_ROOT attribute is corrupt.");
1539 goto unm_err_out;
1540 }
1541 index_end = (u8*)&ir->index + le32_to_cpu(ir->index.index_length);
1542 if (index_end > ir_end) {
1543 ntfs_error(vi->i_sb, "Index is corrupt.");
1544 goto unm_err_out;
1545 }
1546 if (ir->type) {
1547 ntfs_error(vi->i_sb, "Index type is not 0 (type is 0x%x).",
1548 le32_to_cpu(ir->type));
1549 goto unm_err_out;
1550 }
1551 ni->itype.index.collation_rule = ir->collation_rule;
1552 ntfs_debug("Index collation rule is 0x%x.",
1553 le32_to_cpu(ir->collation_rule));
1554 ni->itype.index.block_size = le32_to_cpu(ir->index_block_size);
1555 if (!is_power_of_2(ni->itype.index.block_size)) {
1556 ntfs_error(vi->i_sb, "Index block size (%u) is not a power of "
1557 "two.", ni->itype.index.block_size);
1558 goto unm_err_out;
1559 }
1560 if (ni->itype.index.block_size > PAGE_SIZE) {
1561 ntfs_error(vi->i_sb, "Index block size (%u) > PAGE_SIZE "
1562 "(%ld) is not supported. Sorry.",
1563 ni->itype.index.block_size, PAGE_SIZE);
1564 err = -EOPNOTSUPP;
1565 goto unm_err_out;
1566 }
1567 if (ni->itype.index.block_size < NTFS_BLOCK_SIZE) {
1568 ntfs_error(vi->i_sb, "Index block size (%u) < NTFS_BLOCK_SIZE "
1569 "(%i) is not supported. Sorry.",
1570 ni->itype.index.block_size, NTFS_BLOCK_SIZE);
1571 err = -EOPNOTSUPP;
1572 goto unm_err_out;
1573 }
1574 ni->itype.index.block_size_bits = ffs(ni->itype.index.block_size) - 1;
1575
1576 if (vol->cluster_size <= ni->itype.index.block_size) {
1577 ni->itype.index.vcn_size = vol->cluster_size;
1578 ni->itype.index.vcn_size_bits = vol->cluster_size_bits;
1579 } else {
1580 ni->itype.index.vcn_size = vol->sector_size;
1581 ni->itype.index.vcn_size_bits = vol->sector_size_bits;
1582 }
1583
1584 if (!(ir->index.flags & LARGE_INDEX)) {
1585
1586 vi->i_size = ni->initialized_size = ni->allocated_size = 0;
1587
1588 ntfs_attr_put_search_ctx(ctx);
1589 unmap_mft_record(base_ni);
1590 m = NULL;
1591 ctx = NULL;
1592 goto skip_large_index_stuff;
1593 }
1594 NInoSetIndexAllocPresent(ni);
1595
1596 ntfs_attr_reinit_search_ctx(ctx);
1597 err = ntfs_attr_lookup(AT_INDEX_ALLOCATION, ni->name, ni->name_len,
1598 CASE_SENSITIVE, 0, NULL, 0, ctx);
1599 if (unlikely(err)) {
1600 if (err == -ENOENT)
1601 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
1602 "not present but $INDEX_ROOT "
1603 "indicated it is.");
1604 else
1605 ntfs_error(vi->i_sb, "Failed to lookup "
1606 "$INDEX_ALLOCATION attribute.");
1607 goto unm_err_out;
1608 }
1609 a = ctx->attr;
1610 if (!a->non_resident) {
1611 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
1612 "resident.");
1613 goto unm_err_out;
1614 }
1615
1616
1617
1618 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
1619 le16_to_cpu(
1620 a->data.non_resident.mapping_pairs_offset)))) {
1621 ntfs_error(vol->sb, "$INDEX_ALLOCATION attribute name is "
1622 "placed after the mapping pairs array.");
1623 goto unm_err_out;
1624 }
1625 if (a->flags & ATTR_IS_ENCRYPTED) {
1626 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
1627 "encrypted.");
1628 goto unm_err_out;
1629 }
1630 if (a->flags & ATTR_IS_SPARSE) {
1631 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is sparse.");
1632 goto unm_err_out;
1633 }
1634 if (a->flags & ATTR_COMPRESSION_MASK) {
1635 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
1636 "compressed.");
1637 goto unm_err_out;
1638 }
1639 if (a->data.non_resident.lowest_vcn) {
1640 ntfs_error(vi->i_sb, "First extent of $INDEX_ALLOCATION "
1641 "attribute has non zero lowest_vcn.");
1642 goto unm_err_out;
1643 }
1644 vi->i_size = sle64_to_cpu(a->data.non_resident.data_size);
1645 ni->initialized_size = sle64_to_cpu(
1646 a->data.non_resident.initialized_size);
1647 ni->allocated_size = sle64_to_cpu(a->data.non_resident.allocated_size);
1648
1649
1650
1651
1652 ntfs_attr_put_search_ctx(ctx);
1653 unmap_mft_record(base_ni);
1654 m = NULL;
1655 ctx = NULL;
1656
1657 bvi = ntfs_attr_iget(base_vi, AT_BITMAP, ni->name, ni->name_len);
1658 if (IS_ERR(bvi)) {
1659 ntfs_error(vi->i_sb, "Failed to get bitmap attribute.");
1660 err = PTR_ERR(bvi);
1661 goto unm_err_out;
1662 }
1663 bni = NTFS_I(bvi);
1664 if (NInoCompressed(bni) || NInoEncrypted(bni) ||
1665 NInoSparse(bni)) {
1666 ntfs_error(vi->i_sb, "$BITMAP attribute is compressed and/or "
1667 "encrypted and/or sparse.");
1668 goto iput_unm_err_out;
1669 }
1670
1671 bvi_size = i_size_read(bvi);
1672 if ((bvi_size << 3) < (vi->i_size >> ni->itype.index.block_size_bits)) {
1673 ntfs_error(vi->i_sb, "Index bitmap too small (0x%llx) for "
1674 "index allocation (0x%llx).", bvi_size << 3,
1675 vi->i_size);
1676 goto iput_unm_err_out;
1677 }
1678 iput(bvi);
1679skip_large_index_stuff:
1680
1681 vi->i_mapping->a_ops = &ntfs_mst_aops;
1682 vi->i_blocks = ni->allocated_size >> 9;
1683
1684
1685
1686
1687 igrab(base_vi);
1688 ni->ext.base_ntfs_ino = base_ni;
1689 ni->nr_extents = -1;
1690
1691 ntfs_debug("Done.");
1692 return 0;
1693iput_unm_err_out:
1694 iput(bvi);
1695unm_err_out:
1696 if (!err)
1697 err = -EIO;
1698 if (ctx)
1699 ntfs_attr_put_search_ctx(ctx);
1700 if (m)
1701 unmap_mft_record(base_ni);
1702err_out:
1703 ntfs_error(vi->i_sb, "Failed with error code %i while reading index "
1704 "inode (mft_no 0x%lx, name_len %i.", err, vi->i_ino,
1705 ni->name_len);
1706 make_bad_inode(vi);
1707 if (err != -EOPNOTSUPP && err != -ENOMEM)
1708 NVolSetErrors(vol);
1709 return err;
1710}
1711
1712
1713
1714
1715
1716
1717
1718
1719static struct lock_class_key mft_ni_runlist_lock_key, mft_ni_mrec_lock_key;
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747int ntfs_read_inode_mount(struct inode *vi)
1748{
1749 VCN next_vcn, last_vcn, highest_vcn;
1750 s64 block;
1751 struct super_block *sb = vi->i_sb;
1752 ntfs_volume *vol = NTFS_SB(sb);
1753 struct buffer_head *bh;
1754 ntfs_inode *ni;
1755 MFT_RECORD *m = NULL;
1756 ATTR_RECORD *a;
1757 ntfs_attr_search_ctx *ctx;
1758 unsigned int i, nr_blocks;
1759 int err;
1760
1761 ntfs_debug("Entering.");
1762
1763
1764 ntfs_init_big_inode(vi);
1765
1766 ni = NTFS_I(vi);
1767
1768
1769 NInoSetNonResident(ni);
1770 NInoSetMstProtected(ni);
1771 NInoSetSparseDisabled(ni);
1772 ni->type = AT_DATA;
1773 ni->name = NULL;
1774 ni->name_len = 0;
1775
1776
1777
1778
1779 ni->itype.index.block_size = vol->mft_record_size;
1780 ni->itype.index.block_size_bits = vol->mft_record_size_bits;
1781
1782
1783 vol->mft_ino = vi;
1784
1785
1786 if (vol->mft_record_size > 64 * 1024) {
1787 ntfs_error(sb, "Unsupported mft record size %i (max 64kiB).",
1788 vol->mft_record_size);
1789 goto err_out;
1790 }
1791 i = vol->mft_record_size;
1792 if (i < sb->s_blocksize)
1793 i = sb->s_blocksize;
1794 m = (MFT_RECORD*)ntfs_malloc_nofs(i);
1795 if (!m) {
1796 ntfs_error(sb, "Failed to allocate buffer for $MFT record 0.");
1797 goto err_out;
1798 }
1799
1800
1801 block = vol->mft_lcn << vol->cluster_size_bits >>
1802 sb->s_blocksize_bits;
1803 nr_blocks = vol->mft_record_size >> sb->s_blocksize_bits;
1804 if (!nr_blocks)
1805 nr_blocks = 1;
1806
1807
1808 for (i = 0; i < nr_blocks; i++) {
1809 bh = sb_bread(sb, block++);
1810 if (!bh) {
1811 ntfs_error(sb, "Device read failed.");
1812 goto err_out;
1813 }
1814 memcpy((char*)m + (i << sb->s_blocksize_bits), bh->b_data,
1815 sb->s_blocksize);
1816 brelse(bh);
1817 }
1818
1819 if (le32_to_cpu(m->bytes_allocated) != vol->mft_record_size) {
1820 ntfs_error(sb, "Incorrect mft record size %u in superblock, should be %u.",
1821 le32_to_cpu(m->bytes_allocated), vol->mft_record_size);
1822 goto err_out;
1823 }
1824
1825
1826 if (post_read_mst_fixup((NTFS_RECORD*)m, vol->mft_record_size)) {
1827
1828 ntfs_error(sb, "MST fixup failed. $MFT is corrupt.");
1829 goto err_out;
1830 }
1831
1832
1833 vi->i_generation = ni->seq_no = le16_to_cpu(m->sequence_number);
1834
1835
1836 vi->i_mapping->a_ops = &ntfs_mst_aops;
1837
1838 ctx = ntfs_attr_get_search_ctx(ni, m);
1839 if (!ctx) {
1840 err = -ENOMEM;
1841 goto err_out;
1842 }
1843
1844
1845 err = ntfs_attr_lookup(AT_ATTRIBUTE_LIST, NULL, 0, 0, 0, NULL, 0, ctx);
1846 if (err) {
1847 if (unlikely(err != -ENOENT)) {
1848 ntfs_error(sb, "Failed to lookup attribute list "
1849 "attribute. You should run chkdsk.");
1850 goto put_err_out;
1851 }
1852 } else {
1853 ATTR_LIST_ENTRY *al_entry, *next_al_entry;
1854 u8 *al_end;
1855 static const char *es = " Not allowed. $MFT is corrupt. "
1856 "You should run chkdsk.";
1857
1858 ntfs_debug("Attribute list attribute found in $MFT.");
1859 NInoSetAttrList(ni);
1860 a = ctx->attr;
1861 if (a->flags & ATTR_COMPRESSION_MASK) {
1862 ntfs_error(sb, "Attribute list attribute is "
1863 "compressed.%s", es);
1864 goto put_err_out;
1865 }
1866 if (a->flags & ATTR_IS_ENCRYPTED ||
1867 a->flags & ATTR_IS_SPARSE) {
1868 if (a->non_resident) {
1869 ntfs_error(sb, "Non-resident attribute list "
1870 "attribute is encrypted/"
1871 "sparse.%s", es);
1872 goto put_err_out;
1873 }
1874 ntfs_warning(sb, "Resident attribute list attribute "
1875 "in $MFT system file is marked "
1876 "encrypted/sparse which is not true. "
1877 "However, Windows allows this and "
1878 "chkdsk does not detect or correct it "
1879 "so we will just ignore the invalid "
1880 "flags and pretend they are not set.");
1881 }
1882
1883 ni->attr_list_size = (u32)ntfs_attr_size(a);
1884 ni->attr_list = ntfs_malloc_nofs(ni->attr_list_size);
1885 if (!ni->attr_list) {
1886 ntfs_error(sb, "Not enough memory to allocate buffer "
1887 "for attribute list.");
1888 goto put_err_out;
1889 }
1890 if (a->non_resident) {
1891 NInoSetAttrListNonResident(ni);
1892 if (a->data.non_resident.lowest_vcn) {
1893 ntfs_error(sb, "Attribute list has non zero "
1894 "lowest_vcn. $MFT is corrupt. "
1895 "You should run chkdsk.");
1896 goto put_err_out;
1897 }
1898
1899 ni->attr_list_rl.rl = ntfs_mapping_pairs_decompress(vol,
1900 a, NULL);
1901 if (IS_ERR(ni->attr_list_rl.rl)) {
1902 err = PTR_ERR(ni->attr_list_rl.rl);
1903 ni->attr_list_rl.rl = NULL;
1904 ntfs_error(sb, "Mapping pairs decompression "
1905 "failed with error code %i.",
1906 -err);
1907 goto put_err_out;
1908 }
1909
1910 if ((err = load_attribute_list(vol, &ni->attr_list_rl,
1911 ni->attr_list, ni->attr_list_size,
1912 sle64_to_cpu(a->data.
1913 non_resident.initialized_size)))) {
1914 ntfs_error(sb, "Failed to load attribute list "
1915 "attribute with error code %i.",
1916 -err);
1917 goto put_err_out;
1918 }
1919 } else {
1920 if ((u8*)a + le16_to_cpu(
1921 a->data.resident.value_offset) +
1922 le32_to_cpu(
1923 a->data.resident.value_length) >
1924 (u8*)ctx->mrec + vol->mft_record_size) {
1925 ntfs_error(sb, "Corrupt attribute list "
1926 "attribute.");
1927 goto put_err_out;
1928 }
1929
1930 memcpy(ni->attr_list, (u8*)a + le16_to_cpu(
1931 a->data.resident.value_offset),
1932 le32_to_cpu(
1933 a->data.resident.value_length));
1934 }
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947 al_entry = (ATTR_LIST_ENTRY*)ni->attr_list;
1948 al_end = (u8*)al_entry + ni->attr_list_size;
1949 for (;; al_entry = next_al_entry) {
1950
1951 if ((u8*)al_entry < ni->attr_list ||
1952 (u8*)al_entry > al_end)
1953 goto em_put_err_out;
1954
1955 if ((u8*)al_entry == al_end)
1956 goto em_put_err_out;
1957 if (!al_entry->length)
1958 goto em_put_err_out;
1959 if ((u8*)al_entry + 6 > al_end || (u8*)al_entry +
1960 le16_to_cpu(al_entry->length) > al_end)
1961 goto em_put_err_out;
1962 next_al_entry = (ATTR_LIST_ENTRY*)((u8*)al_entry +
1963 le16_to_cpu(al_entry->length));
1964 if (le32_to_cpu(al_entry->type) > le32_to_cpu(AT_DATA))
1965 goto em_put_err_out;
1966 if (AT_DATA != al_entry->type)
1967 continue;
1968
1969 if (al_entry->name_length)
1970 goto em_put_err_out;
1971
1972 if (al_entry->lowest_vcn)
1973 goto em_put_err_out;
1974
1975 if (MREF_LE(al_entry->mft_reference) != vi->i_ino) {
1976
1977 ntfs_error(sb, "BUG: The first $DATA extent "
1978 "of $MFT is not in the base "
1979 "mft record. Please report "
1980 "you saw this message to "
1981 "linux-ntfs-dev@lists."
1982 "sourceforge.net");
1983 goto put_err_out;
1984 } else {
1985
1986 if (MSEQNO_LE(al_entry->mft_reference) !=
1987 ni->seq_no)
1988 goto em_put_err_out;
1989
1990 break;
1991 }
1992 }
1993 }
1994
1995 ntfs_attr_reinit_search_ctx(ctx);
1996
1997
1998 a = NULL;
1999 next_vcn = last_vcn = highest_vcn = 0;
2000 while (!(err = ntfs_attr_lookup(AT_DATA, NULL, 0, 0, next_vcn, NULL, 0,
2001 ctx))) {
2002 runlist_element *nrl;
2003
2004
2005 a = ctx->attr;
2006
2007 if (!a->non_resident) {
2008 ntfs_error(sb, "$MFT must be non-resident but a "
2009 "resident extent was found. $MFT is "
2010 "corrupt. Run chkdsk.");
2011 goto put_err_out;
2012 }
2013
2014 if (a->flags & ATTR_COMPRESSION_MASK ||
2015 a->flags & ATTR_IS_ENCRYPTED ||
2016 a->flags & ATTR_IS_SPARSE) {
2017 ntfs_error(sb, "$MFT must be uncompressed, "
2018 "non-sparse, and unencrypted but a "
2019 "compressed/sparse/encrypted extent "
2020 "was found. $MFT is corrupt. Run "
2021 "chkdsk.");
2022 goto put_err_out;
2023 }
2024
2025
2026
2027
2028
2029
2030 nrl = ntfs_mapping_pairs_decompress(vol, a, ni->runlist.rl);
2031 if (IS_ERR(nrl)) {
2032 ntfs_error(sb, "ntfs_mapping_pairs_decompress() "
2033 "failed with error code %ld. $MFT is "
2034 "corrupt.", PTR_ERR(nrl));
2035 goto put_err_out;
2036 }
2037 ni->runlist.rl = nrl;
2038
2039
2040 if (!next_vcn) {
2041 if (a->data.non_resident.lowest_vcn) {
2042 ntfs_error(sb, "First extent of $DATA "
2043 "attribute has non zero "
2044 "lowest_vcn. $MFT is corrupt. "
2045 "You should run chkdsk.");
2046 goto put_err_out;
2047 }
2048
2049 last_vcn = sle64_to_cpu(
2050 a->data.non_resident.allocated_size)
2051 >> vol->cluster_size_bits;
2052
2053 vi->i_size = sle64_to_cpu(
2054 a->data.non_resident.data_size);
2055 ni->initialized_size = sle64_to_cpu(
2056 a->data.non_resident.initialized_size);
2057 ni->allocated_size = sle64_to_cpu(
2058 a->data.non_resident.allocated_size);
2059
2060
2061
2062
2063 if ((vi->i_size >> vol->mft_record_size_bits) >=
2064 (1ULL << 32)) {
2065 ntfs_error(sb, "$MFT is too big! Aborting.");
2066 goto put_err_out;
2067 }
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087 ntfs_read_locked_inode(vi);
2088 if (is_bad_inode(vi)) {
2089 ntfs_error(sb, "ntfs_read_inode() of $MFT "
2090 "failed. BUG or corrupt $MFT. "
2091 "Run chkdsk and if no errors "
2092 "are found, please report you "
2093 "saw this message to "
2094 "linux-ntfs-dev@lists."
2095 "sourceforge.net");
2096 ntfs_attr_put_search_ctx(ctx);
2097
2098 ntfs_free(m);
2099 return -1;
2100 }
2101
2102
2103
2104
2105
2106 vi->i_uid = GLOBAL_ROOT_UID;
2107 vi->i_gid = GLOBAL_ROOT_GID;
2108
2109 vi->i_mode = S_IFREG;
2110
2111 vi->i_op = &ntfs_empty_inode_ops;
2112 vi->i_fop = &ntfs_empty_file_ops;
2113 }
2114
2115
2116 highest_vcn = sle64_to_cpu(a->data.non_resident.highest_vcn);
2117 next_vcn = highest_vcn + 1;
2118
2119
2120 if (next_vcn <= 0)
2121 break;
2122
2123
2124 if (next_vcn < sle64_to_cpu(
2125 a->data.non_resident.lowest_vcn)) {
2126 ntfs_error(sb, "$MFT has corrupt attribute list "
2127 "attribute. Run chkdsk.");
2128 goto put_err_out;
2129 }
2130 }
2131 if (err != -ENOENT) {
2132 ntfs_error(sb, "Failed to lookup $MFT/$DATA attribute extent. "
2133 "$MFT is corrupt. Run chkdsk.");
2134 goto put_err_out;
2135 }
2136 if (!a) {
2137 ntfs_error(sb, "$MFT/$DATA attribute not found. $MFT is "
2138 "corrupt. Run chkdsk.");
2139 goto put_err_out;
2140 }
2141 if (highest_vcn && highest_vcn != last_vcn - 1) {
2142 ntfs_error(sb, "Failed to load the complete runlist for "
2143 "$MFT/$DATA. Driver bug or corrupt $MFT. "
2144 "Run chkdsk.");
2145 ntfs_debug("highest_vcn = 0x%llx, last_vcn - 1 = 0x%llx",
2146 (unsigned long long)highest_vcn,
2147 (unsigned long long)last_vcn - 1);
2148 goto put_err_out;
2149 }
2150 ntfs_attr_put_search_ctx(ctx);
2151 ntfs_debug("Done.");
2152 ntfs_free(m);
2153
2154
2155
2156
2157
2158 lockdep_set_class(&ni->runlist.lock, &mft_ni_runlist_lock_key);
2159 lockdep_set_class(&ni->mrec_lock, &mft_ni_mrec_lock_key);
2160
2161 return 0;
2162
2163em_put_err_out:
2164 ntfs_error(sb, "Couldn't find first extent of $DATA attribute in "
2165 "attribute list. $MFT is corrupt. Run chkdsk.");
2166put_err_out:
2167 ntfs_attr_put_search_ctx(ctx);
2168err_out:
2169 ntfs_error(sb, "Failed. Marking inode as bad.");
2170 make_bad_inode(vi);
2171 ntfs_free(m);
2172 return -1;
2173}
2174
2175static void __ntfs_clear_inode(ntfs_inode *ni)
2176{
2177
2178 down_write(&ni->runlist.lock);
2179 if (ni->runlist.rl) {
2180 ntfs_free(ni->runlist.rl);
2181 ni->runlist.rl = NULL;
2182 }
2183 up_write(&ni->runlist.lock);
2184
2185 if (ni->attr_list) {
2186 ntfs_free(ni->attr_list);
2187 ni->attr_list = NULL;
2188 }
2189
2190 down_write(&ni->attr_list_rl.lock);
2191 if (ni->attr_list_rl.rl) {
2192 ntfs_free(ni->attr_list_rl.rl);
2193 ni->attr_list_rl.rl = NULL;
2194 }
2195 up_write(&ni->attr_list_rl.lock);
2196
2197 if (ni->name_len && ni->name != I30) {
2198
2199 BUG_ON(!ni->name);
2200 kfree(ni->name);
2201 }
2202}
2203
2204void ntfs_clear_extent_inode(ntfs_inode *ni)
2205{
2206 ntfs_debug("Entering for inode 0x%lx.", ni->mft_no);
2207
2208 BUG_ON(NInoAttr(ni));
2209 BUG_ON(ni->nr_extents != -1);
2210
2211#ifdef NTFS_RW
2212 if (NInoDirty(ni)) {
2213 if (!is_bad_inode(VFS_I(ni->ext.base_ntfs_ino)))
2214 ntfs_error(ni->vol->sb, "Clearing dirty extent inode! "
2215 "Losing data! This is a BUG!!!");
2216
2217 }
2218#endif
2219
2220 __ntfs_clear_inode(ni);
2221
2222
2223 ntfs_destroy_extent_inode(ni);
2224}
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236void ntfs_evict_big_inode(struct inode *vi)
2237{
2238 ntfs_inode *ni = NTFS_I(vi);
2239
2240 truncate_inode_pages_final(&vi->i_data);
2241 clear_inode(vi);
2242
2243#ifdef NTFS_RW
2244 if (NInoDirty(ni)) {
2245 bool was_bad = (is_bad_inode(vi));
2246
2247
2248 ntfs_commit_inode(vi);
2249
2250 if (!was_bad && (is_bad_inode(vi) || NInoDirty(ni))) {
2251 ntfs_error(vi->i_sb, "Failed to commit dirty inode "
2252 "0x%lx. Losing data!", vi->i_ino);
2253
2254 }
2255 }
2256#endif
2257
2258
2259 if (ni->nr_extents > 0) {
2260 int i;
2261
2262 for (i = 0; i < ni->nr_extents; i++)
2263 ntfs_clear_extent_inode(ni->ext.extent_ntfs_inos[i]);
2264 kfree(ni->ext.extent_ntfs_inos);
2265 }
2266
2267 __ntfs_clear_inode(ni);
2268
2269 if (NInoAttr(ni)) {
2270
2271 if (ni->nr_extents == -1) {
2272 iput(VFS_I(ni->ext.base_ntfs_ino));
2273 ni->nr_extents = 0;
2274 ni->ext.base_ntfs_ino = NULL;
2275 }
2276 }
2277 BUG_ON(ni->page);
2278 if (!atomic_dec_and_test(&ni->count))
2279 BUG();
2280 return;
2281}
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293int ntfs_show_options(struct seq_file *sf, struct dentry *root)
2294{
2295 ntfs_volume *vol = NTFS_SB(root->d_sb);
2296 int i;
2297
2298 seq_printf(sf, ",uid=%i", from_kuid_munged(&init_user_ns, vol->uid));
2299 seq_printf(sf, ",gid=%i", from_kgid_munged(&init_user_ns, vol->gid));
2300 if (vol->fmask == vol->dmask)
2301 seq_printf(sf, ",umask=0%o", vol->fmask);
2302 else {
2303 seq_printf(sf, ",fmask=0%o", vol->fmask);
2304 seq_printf(sf, ",dmask=0%o", vol->dmask);
2305 }
2306 seq_printf(sf, ",nls=%s", vol->nls_map->charset);
2307 if (NVolCaseSensitive(vol))
2308 seq_printf(sf, ",case_sensitive");
2309 if (NVolShowSystemFiles(vol))
2310 seq_printf(sf, ",show_sys_files");
2311 if (!NVolSparseEnabled(vol))
2312 seq_printf(sf, ",disable_sparse");
2313 for (i = 0; on_errors_arr[i].val; i++) {
2314 if (on_errors_arr[i].val & vol->on_errors)
2315 seq_printf(sf, ",errors=%s", on_errors_arr[i].str);
2316 }
2317 seq_printf(sf, ",mft_zone_multiplier=%i", vol->mft_zone_multiplier);
2318 return 0;
2319}
2320
2321#ifdef NTFS_RW
2322
2323static const char *es = " Leaving inconsistent metadata. Unmount and run "
2324 "chkdsk.";
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344int ntfs_truncate(struct inode *vi)
2345{
2346 s64 new_size, old_size, nr_freed, new_alloc_size, old_alloc_size;
2347 VCN highest_vcn;
2348 unsigned long flags;
2349 ntfs_inode *base_ni, *ni = NTFS_I(vi);
2350 ntfs_volume *vol = ni->vol;
2351 ntfs_attr_search_ctx *ctx;
2352 MFT_RECORD *m;
2353 ATTR_RECORD *a;
2354 const char *te = " Leaving file length out of sync with i_size.";
2355 int err, mp_size, size_change, alloc_change;
2356
2357 ntfs_debug("Entering for inode 0x%lx.", vi->i_ino);
2358 BUG_ON(NInoAttr(ni));
2359 BUG_ON(S_ISDIR(vi->i_mode));
2360 BUG_ON(NInoMstProtected(ni));
2361 BUG_ON(ni->nr_extents < 0);
2362retry_truncate:
2363
2364
2365
2366
2367 down_write(&ni->runlist.lock);
2368 if (!NInoAttr(ni))
2369 base_ni = ni;
2370 else
2371 base_ni = ni->ext.base_ntfs_ino;
2372 m = map_mft_record(base_ni);
2373 if (IS_ERR(m)) {
2374 err = PTR_ERR(m);
2375 ntfs_error(vi->i_sb, "Failed to map mft record for inode 0x%lx "
2376 "(error code %d).%s", vi->i_ino, err, te);
2377 ctx = NULL;
2378 m = NULL;
2379 goto old_bad_out;
2380 }
2381 ctx = ntfs_attr_get_search_ctx(base_ni, m);
2382 if (unlikely(!ctx)) {
2383 ntfs_error(vi->i_sb, "Failed to allocate a search context for "
2384 "inode 0x%lx (not enough memory).%s",
2385 vi->i_ino, te);
2386 err = -ENOMEM;
2387 goto old_bad_out;
2388 }
2389 err = ntfs_attr_lookup(ni->type, ni->name, ni->name_len,
2390 CASE_SENSITIVE, 0, NULL, 0, ctx);
2391 if (unlikely(err)) {
2392 if (err == -ENOENT) {
2393 ntfs_error(vi->i_sb, "Open attribute is missing from "
2394 "mft record. Inode 0x%lx is corrupt. "
2395 "Run chkdsk.%s", vi->i_ino, te);
2396 err = -EIO;
2397 } else
2398 ntfs_error(vi->i_sb, "Failed to lookup attribute in "
2399 "inode 0x%lx (error code %d).%s",
2400 vi->i_ino, err, te);
2401 goto old_bad_out;
2402 }
2403 m = ctx->mrec;
2404 a = ctx->attr;
2405
2406
2407
2408 new_size = i_size_read(vi);
2409
2410 old_size = ntfs_attr_size(a);
2411
2412 if (NInoNonResident(ni))
2413 new_alloc_size = (new_size + vol->cluster_size - 1) &
2414 ~(s64)vol->cluster_size_mask;
2415 else
2416 new_alloc_size = (new_size + 7) & ~7;
2417
2418 read_lock_irqsave(&ni->size_lock, flags);
2419 old_alloc_size = ni->allocated_size;
2420 read_unlock_irqrestore(&ni->size_lock, flags);
2421
2422
2423
2424
2425 size_change = -1;
2426 if (new_size - old_size >= 0) {
2427 size_change = 1;
2428 if (new_size == old_size)
2429 size_change = 0;
2430 }
2431
2432 alloc_change = -1;
2433 if (new_alloc_size - old_alloc_size >= 0) {
2434 alloc_change = 1;
2435 if (new_alloc_size == old_alloc_size)
2436 alloc_change = 0;
2437 }
2438
2439
2440
2441
2442 if (!size_change && !alloc_change)
2443 goto unm_done;
2444
2445 if (size_change) {
2446 err = ntfs_attr_size_bounds_check(vol, ni->type, new_size);
2447 if (unlikely(err)) {
2448 if (err == -ERANGE) {
2449 ntfs_error(vol->sb, "Truncate would cause the "
2450 "inode 0x%lx to %simum size "
2451 "for its attribute type "
2452 "(0x%x). Aborting truncate.",
2453 vi->i_ino,
2454 new_size > old_size ? "exceed "
2455 "the max" : "go under the min",
2456 le32_to_cpu(ni->type));
2457 err = -EFBIG;
2458 } else {
2459 ntfs_error(vol->sb, "Inode 0x%lx has unknown "
2460 "attribute type 0x%x. "
2461 "Aborting truncate.",
2462 vi->i_ino,
2463 le32_to_cpu(ni->type));
2464 err = -EIO;
2465 }
2466
2467 i_size_write(vi, old_size);
2468 goto err_out;
2469 }
2470 }
2471 if (NInoCompressed(ni) || NInoEncrypted(ni)) {
2472 ntfs_warning(vi->i_sb, "Changes in inode size are not "
2473 "supported yet for %s files, ignoring.",
2474 NInoCompressed(ni) ? "compressed" :
2475 "encrypted");
2476 err = -EOPNOTSUPP;
2477 goto bad_out;
2478 }
2479 if (a->non_resident)
2480 goto do_non_resident_truncate;
2481 BUG_ON(NInoNonResident(ni));
2482
2483 if (new_size < vol->mft_record_size &&
2484 !ntfs_resident_attr_value_resize(m, a, new_size)) {
2485
2486 flush_dcache_mft_record_page(ctx->ntfs_ino);
2487 mark_mft_record_dirty(ctx->ntfs_ino);
2488 write_lock_irqsave(&ni->size_lock, flags);
2489
2490 ni->allocated_size = le32_to_cpu(a->length) -
2491 le16_to_cpu(a->data.resident.value_offset);
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520 ni->initialized_size = new_size;
2521 write_unlock_irqrestore(&ni->size_lock, flags);
2522 goto unm_done;
2523 }
2524
2525 BUG_ON(size_change < 0);
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535 ntfs_attr_put_search_ctx(ctx);
2536 unmap_mft_record(base_ni);
2537 up_write(&ni->runlist.lock);
2538
2539
2540
2541
2542 err = ntfs_attr_make_non_resident(ni, old_size);
2543 if (likely(!err))
2544 goto retry_truncate;
2545
2546
2547
2548
2549
2550 if (unlikely(err != -EPERM && err != -ENOSPC)) {
2551 ntfs_error(vol->sb, "Cannot truncate inode 0x%lx, attribute "
2552 "type 0x%x, because the conversion from "
2553 "resident to non-resident attribute failed "
2554 "with error code %i.", vi->i_ino,
2555 (unsigned)le32_to_cpu(ni->type), err);
2556 if (err != -ENOMEM)
2557 err = -EIO;
2558 goto conv_err_out;
2559 }
2560
2561 if (err == -ENOSPC)
2562 ntfs_error(vol->sb, "Not enough space in the mft record/on "
2563 "disk for the non-resident attribute value. "
2564 "This case is not implemented yet.");
2565 else
2566 ntfs_error(vol->sb, "This attribute type may not be "
2567 "non-resident. This case is not implemented "
2568 "yet.");
2569 err = -EOPNOTSUPP;
2570 goto conv_err_out;
2571#if 0
2572
2573 if (!err)
2574 goto do_resident_extend;
2575
2576
2577
2578
2579
2580
2581 if (ni->type == AT_ATTRIBUTE_LIST ||
2582 ni->type == AT_STANDARD_INFORMATION) {
2583
2584
2585 err = -EOPNOTSUPP;
2586 if (!err)
2587 goto do_resident_extend;
2588 goto err_out;
2589 }
2590
2591
2592
2593 err = -EOPNOTSUPP;
2594 if (!err)
2595 goto do_resident_extend;
2596
2597 goto err_out;
2598#endif
2599do_non_resident_truncate:
2600 BUG_ON(!NInoNonResident(ni));
2601 if (alloc_change < 0) {
2602 highest_vcn = sle64_to_cpu(a->data.non_resident.highest_vcn);
2603 if (highest_vcn > 0 &&
2604 old_alloc_size >> vol->cluster_size_bits >
2605 highest_vcn + 1) {
2606
2607
2608
2609
2610 ntfs_error(vol->sb, "Cannot truncate inode 0x%lx, "
2611 "attribute type 0x%x, because the "
2612 "attribute is highly fragmented (it "
2613 "consists of multiple extents) and "
2614 "this case is not implemented yet.",
2615 vi->i_ino,
2616 (unsigned)le32_to_cpu(ni->type));
2617 err = -EOPNOTSUPP;
2618 goto bad_out;
2619 }
2620 }
2621
2622
2623
2624
2625 if (size_change < 0) {
2626
2627
2628
2629 write_lock_irqsave(&ni->size_lock, flags);
2630 if (new_size < ni->initialized_size) {
2631 ni->initialized_size = new_size;
2632 a->data.non_resident.initialized_size =
2633 cpu_to_sle64(new_size);
2634 }
2635 a->data.non_resident.data_size = cpu_to_sle64(new_size);
2636 write_unlock_irqrestore(&ni->size_lock, flags);
2637 flush_dcache_mft_record_page(ctx->ntfs_ino);
2638 mark_mft_record_dirty(ctx->ntfs_ino);
2639
2640 if (!alloc_change)
2641 goto unm_done;
2642
2643
2644
2645
2646 BUG_ON(alloc_change > 0);
2647 } else {
2648
2649
2650
2651
2652 if (alloc_change > 0) {
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668 ntfs_attr_put_search_ctx(ctx);
2669 unmap_mft_record(base_ni);
2670 up_write(&ni->runlist.lock);
2671 err = ntfs_attr_extend_allocation(ni, new_size,
2672 size_change > 0 ? new_size : -1, -1);
2673
2674
2675
2676
2677 goto done;
2678 }
2679 if (!alloc_change)
2680 goto alloc_done;
2681 }
2682
2683
2684 nr_freed = ntfs_cluster_free(ni, new_alloc_size >>
2685 vol->cluster_size_bits, -1, ctx);
2686 m = ctx->mrec;
2687 a = ctx->attr;
2688 if (unlikely(nr_freed < 0)) {
2689 ntfs_error(vol->sb, "Failed to release cluster(s) (error code "
2690 "%lli). Unmount and run chkdsk to recover "
2691 "the lost cluster(s).", (long long)nr_freed);
2692 NVolSetErrors(vol);
2693 nr_freed = 0;
2694 }
2695
2696 err = ntfs_rl_truncate_nolock(vol, &ni->runlist,
2697 new_alloc_size >> vol->cluster_size_bits);
2698
2699
2700
2701
2702
2703
2704 if (unlikely(err || IS_ERR(m))) {
2705 ntfs_error(vol->sb, "Failed to %s (error code %li).%s",
2706 IS_ERR(m) ?
2707 "restore attribute search context" :
2708 "truncate attribute runlist",
2709 IS_ERR(m) ? PTR_ERR(m) : err, es);
2710 err = -EIO;
2711 goto bad_out;
2712 }
2713
2714 mp_size = ntfs_get_size_for_mapping_pairs(vol, ni->runlist.rl, 0, -1);
2715 if (unlikely(mp_size <= 0)) {
2716 ntfs_error(vol->sb, "Cannot shrink allocation of inode 0x%lx, "
2717 "attribute type 0x%x, because determining the "
2718 "size for the mapping pairs failed with error "
2719 "code %i.%s", vi->i_ino,
2720 (unsigned)le32_to_cpu(ni->type), mp_size, es);
2721 err = -EIO;
2722 goto bad_out;
2723 }
2724
2725
2726
2727
2728
2729 err = ntfs_attr_record_resize(m, a, mp_size +
2730 le16_to_cpu(a->data.non_resident.mapping_pairs_offset));
2731 BUG_ON(err);
2732
2733
2734
2735 err = ntfs_mapping_pairs_build(vol, (u8*)a +
2736 le16_to_cpu(a->data.non_resident.mapping_pairs_offset),
2737 mp_size, ni->runlist.rl, 0, -1, NULL);
2738 if (unlikely(err)) {
2739 ntfs_error(vol->sb, "Cannot shrink allocation of inode 0x%lx, "
2740 "attribute type 0x%x, because building the "
2741 "mapping pairs failed with error code %i.%s",
2742 vi->i_ino, (unsigned)le32_to_cpu(ni->type),
2743 err, es);
2744 err = -EIO;
2745 goto bad_out;
2746 }
2747
2748 a->data.non_resident.highest_vcn = cpu_to_sle64((new_alloc_size >>
2749 vol->cluster_size_bits) - 1);
2750 write_lock_irqsave(&ni->size_lock, flags);
2751 ni->allocated_size = new_alloc_size;
2752 a->data.non_resident.allocated_size = cpu_to_sle64(new_alloc_size);
2753 if (NInoSparse(ni) || NInoCompressed(ni)) {
2754 if (nr_freed) {
2755 ni->itype.compressed.size -= nr_freed <<
2756 vol->cluster_size_bits;
2757 BUG_ON(ni->itype.compressed.size < 0);
2758 a->data.non_resident.compressed_size = cpu_to_sle64(
2759 ni->itype.compressed.size);
2760 vi->i_blocks = ni->itype.compressed.size >> 9;
2761 }
2762 } else
2763 vi->i_blocks = new_alloc_size >> 9;
2764 write_unlock_irqrestore(&ni->size_lock, flags);
2765
2766
2767
2768
2769
2770
2771
2772
2773alloc_done:
2774
2775
2776
2777
2778 if (size_change > 0)
2779 a->data.non_resident.data_size = cpu_to_sle64(new_size);
2780
2781 flush_dcache_mft_record_page(ctx->ntfs_ino);
2782 mark_mft_record_dirty(ctx->ntfs_ino);
2783unm_done:
2784 ntfs_attr_put_search_ctx(ctx);
2785 unmap_mft_record(base_ni);
2786 up_write(&ni->runlist.lock);
2787done:
2788
2789
2790
2791
2792
2793
2794 if (!IS_NOCMTIME(VFS_I(base_ni)) && !IS_RDONLY(VFS_I(base_ni))) {
2795 struct timespec64 now = current_time(VFS_I(base_ni));
2796 int sync_it = 0;
2797
2798 if (!timespec64_equal(&VFS_I(base_ni)->i_mtime, &now) ||
2799 !timespec64_equal(&VFS_I(base_ni)->i_ctime, &now))
2800 sync_it = 1;
2801 VFS_I(base_ni)->i_mtime = now;
2802 VFS_I(base_ni)->i_ctime = now;
2803
2804 if (sync_it)
2805 mark_inode_dirty_sync(VFS_I(base_ni));
2806 }
2807
2808 if (likely(!err)) {
2809 NInoClearTruncateFailed(ni);
2810 ntfs_debug("Done.");
2811 }
2812 return err;
2813old_bad_out:
2814 old_size = -1;
2815bad_out:
2816 if (err != -ENOMEM && err != -EOPNOTSUPP)
2817 NVolSetErrors(vol);
2818 if (err != -EOPNOTSUPP)
2819 NInoSetTruncateFailed(ni);
2820 else if (old_size >= 0)
2821 i_size_write(vi, old_size);
2822err_out:
2823 if (ctx)
2824 ntfs_attr_put_search_ctx(ctx);
2825 if (m)
2826 unmap_mft_record(base_ni);
2827 up_write(&ni->runlist.lock);
2828out:
2829 ntfs_debug("Failed. Returning error code %i.", err);
2830 return err;
2831conv_err_out:
2832 if (err != -ENOMEM && err != -EOPNOTSUPP)
2833 NVolSetErrors(vol);
2834 if (err != -EOPNOTSUPP)
2835 NInoSetTruncateFailed(ni);
2836 else
2837 i_size_write(vi, old_size);
2838 goto out;
2839}
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849#ifdef NTFS_RW
2850void ntfs_truncate_vfs(struct inode *vi) {
2851 ntfs_truncate(vi);
2852}
2853#endif
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870int ntfs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry,
2871 struct iattr *attr)
2872{
2873 struct inode *vi = d_inode(dentry);
2874 int err;
2875 unsigned int ia_valid = attr->ia_valid;
2876
2877 err = setattr_prepare(&init_user_ns, dentry, attr);
2878 if (err)
2879 goto out;
2880
2881 if (ia_valid & (ATTR_UID | ATTR_GID | ATTR_MODE)) {
2882 ntfs_warning(vi->i_sb, "Changes in user/group/mode are not "
2883 "supported yet, ignoring.");
2884 err = -EOPNOTSUPP;
2885 goto out;
2886 }
2887 if (ia_valid & ATTR_SIZE) {
2888 if (attr->ia_size != i_size_read(vi)) {
2889 ntfs_inode *ni = NTFS_I(vi);
2890
2891
2892
2893
2894 if (NInoCompressed(ni) || NInoEncrypted(ni)) {
2895 ntfs_warning(vi->i_sb, "Changes in inode size "
2896 "are not supported yet for "
2897 "%s files, ignoring.",
2898 NInoCompressed(ni) ?
2899 "compressed" : "encrypted");
2900 err = -EOPNOTSUPP;
2901 } else {
2902 truncate_setsize(vi, attr->ia_size);
2903 ntfs_truncate_vfs(vi);
2904 }
2905 if (err || ia_valid == ATTR_SIZE)
2906 goto out;
2907 } else {
2908
2909
2910
2911
2912 ia_valid |= ATTR_MTIME | ATTR_CTIME;
2913 }
2914 }
2915 if (ia_valid & ATTR_ATIME)
2916 vi->i_atime = attr->ia_atime;
2917 if (ia_valid & ATTR_MTIME)
2918 vi->i_mtime = attr->ia_mtime;
2919 if (ia_valid & ATTR_CTIME)
2920 vi->i_ctime = attr->ia_ctime;
2921 mark_inode_dirty(vi);
2922out:
2923 return err;
2924}
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944int __ntfs_write_inode(struct inode *vi, int sync)
2945{
2946 sle64 nt;
2947 ntfs_inode *ni = NTFS_I(vi);
2948 ntfs_attr_search_ctx *ctx;
2949 MFT_RECORD *m;
2950 STANDARD_INFORMATION *si;
2951 int err = 0;
2952 bool modified = false;
2953
2954 ntfs_debug("Entering for %sinode 0x%lx.", NInoAttr(ni) ? "attr " : "",
2955 vi->i_ino);
2956
2957
2958
2959
2960
2961 if (NInoAttr(ni)) {
2962 NInoClearDirty(ni);
2963 ntfs_debug("Done.");
2964 return 0;
2965 }
2966
2967 m = map_mft_record(ni);
2968 if (IS_ERR(m)) {
2969 err = PTR_ERR(m);
2970 goto err_out;
2971 }
2972
2973 ctx = ntfs_attr_get_search_ctx(ni, m);
2974 if (unlikely(!ctx)) {
2975 err = -ENOMEM;
2976 goto unm_err_out;
2977 }
2978 err = ntfs_attr_lookup(AT_STANDARD_INFORMATION, NULL, 0,
2979 CASE_SENSITIVE, 0, NULL, 0, ctx);
2980 if (unlikely(err)) {
2981 ntfs_attr_put_search_ctx(ctx);
2982 goto unm_err_out;
2983 }
2984 si = (STANDARD_INFORMATION*)((u8*)ctx->attr +
2985 le16_to_cpu(ctx->attr->data.resident.value_offset));
2986
2987 nt = utc2ntfs(vi->i_mtime);
2988 if (si->last_data_change_time != nt) {
2989 ntfs_debug("Updating mtime for inode 0x%lx: old = 0x%llx, "
2990 "new = 0x%llx", vi->i_ino, (long long)
2991 sle64_to_cpu(si->last_data_change_time),
2992 (long long)sle64_to_cpu(nt));
2993 si->last_data_change_time = nt;
2994 modified = true;
2995 }
2996 nt = utc2ntfs(vi->i_ctime);
2997 if (si->last_mft_change_time != nt) {
2998 ntfs_debug("Updating ctime for inode 0x%lx: old = 0x%llx, "
2999 "new = 0x%llx", vi->i_ino, (long long)
3000 sle64_to_cpu(si->last_mft_change_time),
3001 (long long)sle64_to_cpu(nt));
3002 si->last_mft_change_time = nt;
3003 modified = true;
3004 }
3005 nt = utc2ntfs(vi->i_atime);
3006 if (si->last_access_time != nt) {
3007 ntfs_debug("Updating atime for inode 0x%lx: old = 0x%llx, "
3008 "new = 0x%llx", vi->i_ino,
3009 (long long)sle64_to_cpu(si->last_access_time),
3010 (long long)sle64_to_cpu(nt));
3011 si->last_access_time = nt;
3012 modified = true;
3013 }
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030 if (modified) {
3031 flush_dcache_mft_record_page(ctx->ntfs_ino);
3032 if (!NInoTestSetDirty(ctx->ntfs_ino))
3033 mark_ntfs_record_dirty(ctx->ntfs_ino->page,
3034 ctx->ntfs_ino->page_ofs);
3035 }
3036 ntfs_attr_put_search_ctx(ctx);
3037
3038 if (NInoDirty(ni))
3039 err = write_mft_record(ni, m, sync);
3040
3041 mutex_lock(&ni->extent_lock);
3042 if (ni->nr_extents > 0) {
3043 ntfs_inode **extent_nis = ni->ext.extent_ntfs_inos;
3044 int i;
3045
3046 ntfs_debug("Writing %i extent inodes.", ni->nr_extents);
3047 for (i = 0; i < ni->nr_extents; i++) {
3048 ntfs_inode *tni = extent_nis[i];
3049
3050 if (NInoDirty(tni)) {
3051 MFT_RECORD *tm = map_mft_record(tni);
3052 int ret;
3053
3054 if (IS_ERR(tm)) {
3055 if (!err || err == -ENOMEM)
3056 err = PTR_ERR(tm);
3057 continue;
3058 }
3059 ret = write_mft_record(tni, tm, sync);
3060 unmap_mft_record(tni);
3061 if (unlikely(ret)) {
3062 if (!err || err == -ENOMEM)
3063 err = ret;
3064 }
3065 }
3066 }
3067 }
3068 mutex_unlock(&ni->extent_lock);
3069 unmap_mft_record(ni);
3070 if (unlikely(err))
3071 goto err_out;
3072 ntfs_debug("Done.");
3073 return 0;
3074unm_err_out:
3075 unmap_mft_record(ni);
3076err_out:
3077 if (err == -ENOMEM) {
3078 ntfs_warning(vi->i_sb, "Not enough memory to write inode. "
3079 "Marking the inode dirty again, so the VFS "
3080 "retries later.");
3081 mark_inode_dirty(vi);
3082 } else {
3083 ntfs_error(vi->i_sb, "Failed (error %i): Run chkdsk.", -err);
3084 NVolSetErrors(ni->vol);
3085 }
3086 return err;
3087}
3088
3089#endif
3090