xref: /openbmc/linux/fs/ntfs3/fsntfs.c (revision 11976fe2)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  *
4  * Copyright (C) 2019-2021 Paragon Software GmbH, All rights reserved.
5  *
6  */
7 
8 #include <linux/blkdev.h>
9 #include <linux/buffer_head.h>
10 #include <linux/fs.h>
11 #include <linux/kernel.h>
12 
13 #include "debug.h"
14 #include "ntfs.h"
15 #include "ntfs_fs.h"
16 
17 // clang-format off
18 const struct cpu_str NAME_MFT = {
19 	4, 0, { '$', 'M', 'F', 'T' },
20 };
21 const struct cpu_str NAME_MIRROR = {
22 	8, 0, { '$', 'M', 'F', 'T', 'M', 'i', 'r', 'r' },
23 };
24 const struct cpu_str NAME_LOGFILE = {
25 	8, 0, { '$', 'L', 'o', 'g', 'F', 'i', 'l', 'e' },
26 };
27 const struct cpu_str NAME_VOLUME = {
28 	7, 0, { '$', 'V', 'o', 'l', 'u', 'm', 'e' },
29 };
30 const struct cpu_str NAME_ATTRDEF = {
31 	8, 0, { '$', 'A', 't', 't', 'r', 'D', 'e', 'f' },
32 };
33 const struct cpu_str NAME_ROOT = {
34 	1, 0, { '.' },
35 };
36 const struct cpu_str NAME_BITMAP = {
37 	7, 0, { '$', 'B', 'i', 't', 'm', 'a', 'p' },
38 };
39 const struct cpu_str NAME_BOOT = {
40 	5, 0, { '$', 'B', 'o', 'o', 't' },
41 };
42 const struct cpu_str NAME_BADCLUS = {
43 	8, 0, { '$', 'B', 'a', 'd', 'C', 'l', 'u', 's' },
44 };
45 const struct cpu_str NAME_QUOTA = {
46 	6, 0, { '$', 'Q', 'u', 'o', 't', 'a' },
47 };
48 const struct cpu_str NAME_SECURE = {
49 	7, 0, { '$', 'S', 'e', 'c', 'u', 'r', 'e' },
50 };
51 const struct cpu_str NAME_UPCASE = {
52 	7, 0, { '$', 'U', 'p', 'C', 'a', 's', 'e' },
53 };
54 const struct cpu_str NAME_EXTEND = {
55 	7, 0, { '$', 'E', 'x', 't', 'e', 'n', 'd' },
56 };
57 const struct cpu_str NAME_OBJID = {
58 	6, 0, { '$', 'O', 'b', 'j', 'I', 'd' },
59 };
60 const struct cpu_str NAME_REPARSE = {
61 	8, 0, { '$', 'R', 'e', 'p', 'a', 'r', 's', 'e' },
62 };
63 const struct cpu_str NAME_USNJRNL = {
64 	8, 0, { '$', 'U', 's', 'n', 'J', 'r', 'n', 'l' },
65 };
66 const __le16 BAD_NAME[4] = {
67 	cpu_to_le16('$'), cpu_to_le16('B'), cpu_to_le16('a'), cpu_to_le16('d'),
68 };
69 const __le16 I30_NAME[4] = {
70 	cpu_to_le16('$'), cpu_to_le16('I'), cpu_to_le16('3'), cpu_to_le16('0'),
71 };
72 const __le16 SII_NAME[4] = {
73 	cpu_to_le16('$'), cpu_to_le16('S'), cpu_to_le16('I'), cpu_to_le16('I'),
74 };
75 const __le16 SDH_NAME[4] = {
76 	cpu_to_le16('$'), cpu_to_le16('S'), cpu_to_le16('D'), cpu_to_le16('H'),
77 };
78 const __le16 SDS_NAME[4] = {
79 	cpu_to_le16('$'), cpu_to_le16('S'), cpu_to_le16('D'), cpu_to_le16('S'),
80 };
81 const __le16 SO_NAME[2] = {
82 	cpu_to_le16('$'), cpu_to_le16('O'),
83 };
84 const __le16 SQ_NAME[2] = {
85 	cpu_to_le16('$'), cpu_to_le16('Q'),
86 };
87 const __le16 SR_NAME[2] = {
88 	cpu_to_le16('$'), cpu_to_le16('R'),
89 };
90 
91 #ifdef CONFIG_NTFS3_LZX_XPRESS
92 const __le16 WOF_NAME[17] = {
93 	cpu_to_le16('W'), cpu_to_le16('o'), cpu_to_le16('f'), cpu_to_le16('C'),
94 	cpu_to_le16('o'), cpu_to_le16('m'), cpu_to_le16('p'), cpu_to_le16('r'),
95 	cpu_to_le16('e'), cpu_to_le16('s'), cpu_to_le16('s'), cpu_to_le16('e'),
96 	cpu_to_le16('d'), cpu_to_le16('D'), cpu_to_le16('a'), cpu_to_le16('t'),
97 	cpu_to_le16('a'),
98 };
99 #endif
100 
101 static const __le16 CON_NAME[3] = {
102 	cpu_to_le16('C'), cpu_to_le16('O'), cpu_to_le16('N'),
103 };
104 
105 static const __le16 NUL_NAME[3] = {
106 	cpu_to_le16('N'), cpu_to_le16('U'), cpu_to_le16('L'),
107 };
108 
109 static const __le16 AUX_NAME[3] = {
110 	cpu_to_le16('A'), cpu_to_le16('U'), cpu_to_le16('X'),
111 };
112 
113 static const __le16 PRN_NAME[3] = {
114 	cpu_to_le16('P'), cpu_to_le16('R'), cpu_to_le16('N'),
115 };
116 
117 static const __le16 COM_NAME[3] = {
118 	cpu_to_le16('C'), cpu_to_le16('O'), cpu_to_le16('M'),
119 };
120 
121 static const __le16 LPT_NAME[3] = {
122 	cpu_to_le16('L'), cpu_to_le16('P'), cpu_to_le16('T'),
123 };
124 
125 // clang-format on
126 
127 /*
128  * ntfs_fix_pre_write - Insert fixups into @rhdr before writing to disk.
129  */
130 bool ntfs_fix_pre_write(struct NTFS_RECORD_HEADER *rhdr, size_t bytes)
131 {
132 	u16 *fixup, *ptr;
133 	u16 sample;
134 	u16 fo = le16_to_cpu(rhdr->fix_off);
135 	u16 fn = le16_to_cpu(rhdr->fix_num);
136 
137 	if ((fo & 1) || fo + fn * sizeof(short) > SECTOR_SIZE || !fn-- ||
138 	    fn * SECTOR_SIZE > bytes) {
139 		return false;
140 	}
141 
142 	/* Get fixup pointer. */
143 	fixup = Add2Ptr(rhdr, fo);
144 
145 	if (*fixup >= 0x7FFF)
146 		*fixup = 1;
147 	else
148 		*fixup += 1;
149 
150 	sample = *fixup;
151 
152 	ptr = Add2Ptr(rhdr, SECTOR_SIZE - sizeof(short));
153 
154 	while (fn--) {
155 		*++fixup = *ptr;
156 		*ptr = sample;
157 		ptr += SECTOR_SIZE / sizeof(short);
158 	}
159 	return true;
160 }
161 
162 /*
163  * ntfs_fix_post_read - Remove fixups after reading from disk.
164  *
165  * Return: < 0 if error, 0 if ok, 1 if need to update fixups.
166  */
167 int ntfs_fix_post_read(struct NTFS_RECORD_HEADER *rhdr, size_t bytes,
168 		       bool simple)
169 {
170 	int ret;
171 	u16 *fixup, *ptr;
172 	u16 sample, fo, fn;
173 
174 	fo = le16_to_cpu(rhdr->fix_off);
175 	fn = simple ? ((bytes >> SECTOR_SHIFT) + 1) :
176 			    le16_to_cpu(rhdr->fix_num);
177 
178 	/* Check errors. */
179 	if ((fo & 1) || fo + fn * sizeof(short) > SECTOR_SIZE || !fn-- ||
180 	    fn * SECTOR_SIZE > bytes) {
181 		return -EINVAL; /* Native chkntfs returns ok! */
182 	}
183 
184 	/* Get fixup pointer. */
185 	fixup = Add2Ptr(rhdr, fo);
186 	sample = *fixup;
187 	ptr = Add2Ptr(rhdr, SECTOR_SIZE - sizeof(short));
188 	ret = 0;
189 
190 	while (fn--) {
191 		/* Test current word. */
192 		if (*ptr != sample) {
193 			/* Fixup does not match! Is it serious error? */
194 			ret = -E_NTFS_FIXUP;
195 		}
196 
197 		/* Replace fixup. */
198 		*ptr = *++fixup;
199 		ptr += SECTOR_SIZE / sizeof(short);
200 	}
201 
202 	return ret;
203 }
204 
205 /*
206  * ntfs_extend_init - Load $Extend file.
207  */
208 int ntfs_extend_init(struct ntfs_sb_info *sbi)
209 {
210 	int err;
211 	struct super_block *sb = sbi->sb;
212 	struct inode *inode, *inode2;
213 	struct MFT_REF ref;
214 
215 	if (sbi->volume.major_ver < 3) {
216 		ntfs_notice(sb, "Skip $Extend 'cause NTFS version");
217 		return 0;
218 	}
219 
220 	ref.low = cpu_to_le32(MFT_REC_EXTEND);
221 	ref.high = 0;
222 	ref.seq = cpu_to_le16(MFT_REC_EXTEND);
223 	inode = ntfs_iget5(sb, &ref, &NAME_EXTEND);
224 	if (IS_ERR(inode)) {
225 		err = PTR_ERR(inode);
226 		ntfs_err(sb, "Failed to load $Extend (%d).", err);
227 		inode = NULL;
228 		goto out;
229 	}
230 
231 	/* If ntfs_iget5() reads from disk it never returns bad inode. */
232 	if (!S_ISDIR(inode->i_mode)) {
233 		err = -EINVAL;
234 		goto out;
235 	}
236 
237 	/* Try to find $ObjId */
238 	inode2 = dir_search_u(inode, &NAME_OBJID, NULL);
239 	if (inode2 && !IS_ERR(inode2)) {
240 		if (is_bad_inode(inode2)) {
241 			iput(inode2);
242 		} else {
243 			sbi->objid.ni = ntfs_i(inode2);
244 			sbi->objid_no = inode2->i_ino;
245 		}
246 	}
247 
248 	/* Try to find $Quota */
249 	inode2 = dir_search_u(inode, &NAME_QUOTA, NULL);
250 	if (inode2 && !IS_ERR(inode2)) {
251 		sbi->quota_no = inode2->i_ino;
252 		iput(inode2);
253 	}
254 
255 	/* Try to find $Reparse */
256 	inode2 = dir_search_u(inode, &NAME_REPARSE, NULL);
257 	if (inode2 && !IS_ERR(inode2)) {
258 		sbi->reparse.ni = ntfs_i(inode2);
259 		sbi->reparse_no = inode2->i_ino;
260 	}
261 
262 	/* Try to find $UsnJrnl */
263 	inode2 = dir_search_u(inode, &NAME_USNJRNL, NULL);
264 	if (inode2 && !IS_ERR(inode2)) {
265 		sbi->usn_jrnl_no = inode2->i_ino;
266 		iput(inode2);
267 	}
268 
269 	err = 0;
270 out:
271 	iput(inode);
272 	return err;
273 }
274 
275 int ntfs_loadlog_and_replay(struct ntfs_inode *ni, struct ntfs_sb_info *sbi)
276 {
277 	int err = 0;
278 	struct super_block *sb = sbi->sb;
279 	bool initialized = false;
280 	struct MFT_REF ref;
281 	struct inode *inode;
282 
283 	/* Check for 4GB. */
284 	if (ni->vfs_inode.i_size >= 0x100000000ull) {
285 		ntfs_err(sb, "\x24LogFile is large than 4G.");
286 		err = -EINVAL;
287 		goto out;
288 	}
289 
290 	sbi->flags |= NTFS_FLAGS_LOG_REPLAYING;
291 
292 	ref.low = cpu_to_le32(MFT_REC_MFT);
293 	ref.high = 0;
294 	ref.seq = cpu_to_le16(1);
295 
296 	inode = ntfs_iget5(sb, &ref, NULL);
297 
298 	if (IS_ERR(inode))
299 		inode = NULL;
300 
301 	if (!inode) {
302 		/* Try to use MFT copy. */
303 		u64 t64 = sbi->mft.lbo;
304 
305 		sbi->mft.lbo = sbi->mft.lbo2;
306 		inode = ntfs_iget5(sb, &ref, NULL);
307 		sbi->mft.lbo = t64;
308 		if (IS_ERR(inode))
309 			inode = NULL;
310 	}
311 
312 	if (!inode) {
313 		err = -EINVAL;
314 		ntfs_err(sb, "Failed to load $MFT.");
315 		goto out;
316 	}
317 
318 	sbi->mft.ni = ntfs_i(inode);
319 
320 	/* LogFile should not contains attribute list. */
321 	err = ni_load_all_mi(sbi->mft.ni);
322 	if (!err)
323 		err = log_replay(ni, &initialized);
324 
325 	iput(inode);
326 	sbi->mft.ni = NULL;
327 
328 	sync_blockdev(sb->s_bdev);
329 	invalidate_bdev(sb->s_bdev);
330 
331 	if (sbi->flags & NTFS_FLAGS_NEED_REPLAY) {
332 		err = 0;
333 		goto out;
334 	}
335 
336 	if (sb_rdonly(sb) || !initialized)
337 		goto out;
338 
339 	/* Fill LogFile by '-1' if it is initialized. */
340 	err = ntfs_bio_fill_1(sbi, &ni->file.run);
341 
342 out:
343 	sbi->flags &= ~NTFS_FLAGS_LOG_REPLAYING;
344 
345 	return err;
346 }
347 
348 /*
349  * ntfs_look_for_free_space - Look for a free space in bitmap.
350  */
351 int ntfs_look_for_free_space(struct ntfs_sb_info *sbi, CLST lcn, CLST len,
352 			     CLST *new_lcn, CLST *new_len,
353 			     enum ALLOCATE_OPT opt)
354 {
355 	int err;
356 	CLST alen;
357 	struct super_block *sb = sbi->sb;
358 	size_t alcn, zlen, zeroes, zlcn, zlen2, ztrim, new_zlen;
359 	struct wnd_bitmap *wnd = &sbi->used.bitmap;
360 
361 	down_write_nested(&wnd->rw_lock, BITMAP_MUTEX_CLUSTERS);
362 	if (opt & ALLOCATE_MFT) {
363 		zlen = wnd_zone_len(wnd);
364 
365 		if (!zlen) {
366 			err = ntfs_refresh_zone(sbi);
367 			if (err)
368 				goto up_write;
369 
370 			zlen = wnd_zone_len(wnd);
371 		}
372 
373 		if (!zlen) {
374 			ntfs_err(sbi->sb, "no free space to extend mft");
375 			err = -ENOSPC;
376 			goto up_write;
377 		}
378 
379 		lcn = wnd_zone_bit(wnd);
380 		alen = min_t(CLST, len, zlen);
381 
382 		wnd_zone_set(wnd, lcn + alen, zlen - alen);
383 
384 		err = wnd_set_used(wnd, lcn, alen);
385 		if (err)
386 			goto up_write;
387 
388 		alcn = lcn;
389 		goto space_found;
390 	}
391 	/*
392 	 * 'Cause cluster 0 is always used this value means that we should use
393 	 * cached value of 'next_free_lcn' to improve performance.
394 	 */
395 	if (!lcn)
396 		lcn = sbi->used.next_free_lcn;
397 
398 	if (lcn >= wnd->nbits)
399 		lcn = 0;
400 
401 	alen = wnd_find(wnd, len, lcn, BITMAP_FIND_MARK_AS_USED, &alcn);
402 	if (alen)
403 		goto space_found;
404 
405 	/* Try to use clusters from MftZone. */
406 	zlen = wnd_zone_len(wnd);
407 	zeroes = wnd_zeroes(wnd);
408 
409 	/* Check too big request */
410 	if (len > zeroes + zlen || zlen <= NTFS_MIN_MFT_ZONE) {
411 		err = -ENOSPC;
412 		goto up_write;
413 	}
414 
415 	/* How many clusters to cat from zone. */
416 	zlcn = wnd_zone_bit(wnd);
417 	zlen2 = zlen >> 1;
418 	ztrim = clamp_val(len, zlen2, zlen);
419 	new_zlen = max_t(size_t, zlen - ztrim, NTFS_MIN_MFT_ZONE);
420 
421 	wnd_zone_set(wnd, zlcn, new_zlen);
422 
423 	/* Allocate continues clusters. */
424 	alen = wnd_find(wnd, len, 0,
425 			BITMAP_FIND_MARK_AS_USED | BITMAP_FIND_FULL, &alcn);
426 	if (!alen) {
427 		err = -ENOSPC;
428 		goto up_write;
429 	}
430 
431 space_found:
432 	err = 0;
433 	*new_len = alen;
434 	*new_lcn = alcn;
435 
436 	ntfs_unmap_meta(sb, alcn, alen);
437 
438 	/* Set hint for next requests. */
439 	if (!(opt & ALLOCATE_MFT))
440 		sbi->used.next_free_lcn = alcn + alen;
441 up_write:
442 	up_write(&wnd->rw_lock);
443 	return err;
444 }
445 
446 /*
447  * ntfs_check_for_free_space
448  *
449  * Check if it is possible to allocate 'clen' clusters and 'mlen' Mft records
450  */
451 bool ntfs_check_for_free_space(struct ntfs_sb_info *sbi, CLST clen, CLST mlen)
452 {
453 	size_t free, zlen, avail;
454 	struct wnd_bitmap *wnd;
455 
456 	wnd = &sbi->used.bitmap;
457 	down_read_nested(&wnd->rw_lock, BITMAP_MUTEX_CLUSTERS);
458 	free = wnd_zeroes(wnd);
459 	zlen = min_t(size_t, NTFS_MIN_MFT_ZONE, wnd_zone_len(wnd));
460 	up_read(&wnd->rw_lock);
461 
462 	if (free < zlen + clen)
463 		return false;
464 
465 	avail = free - (zlen + clen);
466 
467 	wnd = &sbi->mft.bitmap;
468 	down_read_nested(&wnd->rw_lock, BITMAP_MUTEX_MFT);
469 	free = wnd_zeroes(wnd);
470 	zlen = wnd_zone_len(wnd);
471 	up_read(&wnd->rw_lock);
472 
473 	if (free >= zlen + mlen)
474 		return true;
475 
476 	return avail >= bytes_to_cluster(sbi, mlen << sbi->record_bits);
477 }
478 
479 /*
480  * ntfs_extend_mft - Allocate additional MFT records.
481  *
482  * sbi->mft.bitmap is locked for write.
483  *
484  * NOTE: recursive:
485  *	ntfs_look_free_mft ->
486  *	ntfs_extend_mft ->
487  *	attr_set_size ->
488  *	ni_insert_nonresident ->
489  *	ni_insert_attr ->
490  *	ni_ins_attr_ext ->
491  *	ntfs_look_free_mft ->
492  *	ntfs_extend_mft
493  *
494  * To avoid recursive always allocate space for two new MFT records
495  * see attrib.c: "at least two MFT to avoid recursive loop".
496  */
497 static int ntfs_extend_mft(struct ntfs_sb_info *sbi)
498 {
499 	int err;
500 	struct ntfs_inode *ni = sbi->mft.ni;
501 	size_t new_mft_total;
502 	u64 new_mft_bytes, new_bitmap_bytes;
503 	struct ATTRIB *attr;
504 	struct wnd_bitmap *wnd = &sbi->mft.bitmap;
505 
506 	new_mft_total = ALIGN(wnd->nbits + NTFS_MFT_INCREASE_STEP, 128);
507 	new_mft_bytes = (u64)new_mft_total << sbi->record_bits;
508 
509 	/* Step 1: Resize $MFT::DATA. */
510 	down_write(&ni->file.run_lock);
511 	err = attr_set_size(ni, ATTR_DATA, NULL, 0, &ni->file.run,
512 			    new_mft_bytes, NULL, false, &attr);
513 
514 	if (err) {
515 		up_write(&ni->file.run_lock);
516 		goto out;
517 	}
518 
519 	attr->nres.valid_size = attr->nres.data_size;
520 	new_mft_total = le64_to_cpu(attr->nres.alloc_size) >> sbi->record_bits;
521 	ni->mi.dirty = true;
522 
523 	/* Step 2: Resize $MFT::BITMAP. */
524 	new_bitmap_bytes = bitmap_size(new_mft_total);
525 
526 	err = attr_set_size(ni, ATTR_BITMAP, NULL, 0, &sbi->mft.bitmap.run,
527 			    new_bitmap_bytes, &new_bitmap_bytes, true, NULL);
528 
529 	/* Refresh MFT Zone if necessary. */
530 	down_write_nested(&sbi->used.bitmap.rw_lock, BITMAP_MUTEX_CLUSTERS);
531 
532 	ntfs_refresh_zone(sbi);
533 
534 	up_write(&sbi->used.bitmap.rw_lock);
535 	up_write(&ni->file.run_lock);
536 
537 	if (err)
538 		goto out;
539 
540 	err = wnd_extend(wnd, new_mft_total);
541 
542 	if (err)
543 		goto out;
544 
545 	ntfs_clear_mft_tail(sbi, sbi->mft.used, new_mft_total);
546 
547 	err = _ni_write_inode(&ni->vfs_inode, 0);
548 out:
549 	return err;
550 }
551 
552 /*
553  * ntfs_look_free_mft - Look for a free MFT record.
554  */
555 int ntfs_look_free_mft(struct ntfs_sb_info *sbi, CLST *rno, bool mft,
556 		       struct ntfs_inode *ni, struct mft_inode **mi)
557 {
558 	int err = 0;
559 	size_t zbit, zlen, from, to, fr;
560 	size_t mft_total;
561 	struct MFT_REF ref;
562 	struct super_block *sb = sbi->sb;
563 	struct wnd_bitmap *wnd = &sbi->mft.bitmap;
564 	u32 ir;
565 
566 	static_assert(sizeof(sbi->mft.reserved_bitmap) * 8 >=
567 		      MFT_REC_FREE - MFT_REC_RESERVED);
568 
569 	if (!mft)
570 		down_write_nested(&wnd->rw_lock, BITMAP_MUTEX_MFT);
571 
572 	zlen = wnd_zone_len(wnd);
573 
574 	/* Always reserve space for MFT. */
575 	if (zlen) {
576 		if (mft) {
577 			zbit = wnd_zone_bit(wnd);
578 			*rno = zbit;
579 			wnd_zone_set(wnd, zbit + 1, zlen - 1);
580 		}
581 		goto found;
582 	}
583 
584 	/* No MFT zone. Find the nearest to '0' free MFT. */
585 	if (!wnd_find(wnd, 1, MFT_REC_FREE, 0, &zbit)) {
586 		/* Resize MFT */
587 		mft_total = wnd->nbits;
588 
589 		err = ntfs_extend_mft(sbi);
590 		if (!err) {
591 			zbit = mft_total;
592 			goto reserve_mft;
593 		}
594 
595 		if (!mft || MFT_REC_FREE == sbi->mft.next_reserved)
596 			goto out;
597 
598 		err = 0;
599 
600 		/*
601 		 * Look for free record reserved area [11-16) ==
602 		 * [MFT_REC_RESERVED, MFT_REC_FREE ) MFT bitmap always
603 		 * marks it as used.
604 		 */
605 		if (!sbi->mft.reserved_bitmap) {
606 			/* Once per session create internal bitmap for 5 bits. */
607 			sbi->mft.reserved_bitmap = 0xFF;
608 
609 			ref.high = 0;
610 			for (ir = MFT_REC_RESERVED; ir < MFT_REC_FREE; ir++) {
611 				struct inode *i;
612 				struct ntfs_inode *ni;
613 				struct MFT_REC *mrec;
614 
615 				ref.low = cpu_to_le32(ir);
616 				ref.seq = cpu_to_le16(ir);
617 
618 				i = ntfs_iget5(sb, &ref, NULL);
619 				if (IS_ERR(i)) {
620 next:
621 					ntfs_notice(
622 						sb,
623 						"Invalid reserved record %x",
624 						ref.low);
625 					continue;
626 				}
627 				if (is_bad_inode(i)) {
628 					iput(i);
629 					goto next;
630 				}
631 
632 				ni = ntfs_i(i);
633 
634 				mrec = ni->mi.mrec;
635 
636 				if (!is_rec_base(mrec))
637 					goto next;
638 
639 				if (mrec->hard_links)
640 					goto next;
641 
642 				if (!ni_std(ni))
643 					goto next;
644 
645 				if (ni_find_attr(ni, NULL, NULL, ATTR_NAME,
646 						 NULL, 0, NULL, NULL))
647 					goto next;
648 
649 				__clear_bit(ir - MFT_REC_RESERVED,
650 					    &sbi->mft.reserved_bitmap);
651 			}
652 		}
653 
654 		/* Scan 5 bits for zero. Bit 0 == MFT_REC_RESERVED */
655 		zbit = find_next_zero_bit(&sbi->mft.reserved_bitmap,
656 					  MFT_REC_FREE, MFT_REC_RESERVED);
657 		if (zbit >= MFT_REC_FREE) {
658 			sbi->mft.next_reserved = MFT_REC_FREE;
659 			goto out;
660 		}
661 
662 		zlen = 1;
663 		sbi->mft.next_reserved = zbit;
664 	} else {
665 reserve_mft:
666 		zlen = zbit == MFT_REC_FREE ? (MFT_REC_USER - MFT_REC_FREE) : 4;
667 		if (zbit + zlen > wnd->nbits)
668 			zlen = wnd->nbits - zbit;
669 
670 		while (zlen > 1 && !wnd_is_free(wnd, zbit, zlen))
671 			zlen -= 1;
672 
673 		/* [zbit, zbit + zlen) will be used for MFT itself. */
674 		from = sbi->mft.used;
675 		if (from < zbit)
676 			from = zbit;
677 		to = zbit + zlen;
678 		if (from < to) {
679 			ntfs_clear_mft_tail(sbi, from, to);
680 			sbi->mft.used = to;
681 		}
682 	}
683 
684 	if (mft) {
685 		*rno = zbit;
686 		zbit += 1;
687 		zlen -= 1;
688 	}
689 
690 	wnd_zone_set(wnd, zbit, zlen);
691 
692 found:
693 	if (!mft) {
694 		/* The request to get record for general purpose. */
695 		if (sbi->mft.next_free < MFT_REC_USER)
696 			sbi->mft.next_free = MFT_REC_USER;
697 
698 		for (;;) {
699 			if (sbi->mft.next_free >= sbi->mft.bitmap.nbits) {
700 			} else if (!wnd_find(wnd, 1, MFT_REC_USER, 0, &fr)) {
701 				sbi->mft.next_free = sbi->mft.bitmap.nbits;
702 			} else {
703 				*rno = fr;
704 				sbi->mft.next_free = *rno + 1;
705 				break;
706 			}
707 
708 			err = ntfs_extend_mft(sbi);
709 			if (err)
710 				goto out;
711 		}
712 	}
713 
714 	if (ni && !ni_add_subrecord(ni, *rno, mi)) {
715 		err = -ENOMEM;
716 		goto out;
717 	}
718 
719 	/* We have found a record that are not reserved for next MFT. */
720 	if (*rno >= MFT_REC_FREE)
721 		wnd_set_used(wnd, *rno, 1);
722 	else if (*rno >= MFT_REC_RESERVED && sbi->mft.reserved_bitmap_inited)
723 		__set_bit(*rno - MFT_REC_RESERVED, &sbi->mft.reserved_bitmap);
724 
725 out:
726 	if (!mft)
727 		up_write(&wnd->rw_lock);
728 
729 	return err;
730 }
731 
732 /*
733  * ntfs_mark_rec_free - Mark record as free.
734  * is_mft - true if we are changing MFT
735  */
736 void ntfs_mark_rec_free(struct ntfs_sb_info *sbi, CLST rno, bool is_mft)
737 {
738 	struct wnd_bitmap *wnd = &sbi->mft.bitmap;
739 
740 	if (!is_mft)
741 		down_write_nested(&wnd->rw_lock, BITMAP_MUTEX_MFT);
742 	if (rno >= wnd->nbits)
743 		goto out;
744 
745 	if (rno >= MFT_REC_FREE) {
746 		if (!wnd_is_used(wnd, rno, 1))
747 			ntfs_set_state(sbi, NTFS_DIRTY_ERROR);
748 		else
749 			wnd_set_free(wnd, rno, 1);
750 	} else if (rno >= MFT_REC_RESERVED && sbi->mft.reserved_bitmap_inited) {
751 		__clear_bit(rno - MFT_REC_RESERVED, &sbi->mft.reserved_bitmap);
752 	}
753 
754 	if (rno < wnd_zone_bit(wnd))
755 		wnd_zone_set(wnd, rno, 1);
756 	else if (rno < sbi->mft.next_free && rno >= MFT_REC_USER)
757 		sbi->mft.next_free = rno;
758 
759 out:
760 	if (!is_mft)
761 		up_write(&wnd->rw_lock);
762 }
763 
764 /*
765  * ntfs_clear_mft_tail - Format empty records [from, to).
766  *
767  * sbi->mft.bitmap is locked for write.
768  */
769 int ntfs_clear_mft_tail(struct ntfs_sb_info *sbi, size_t from, size_t to)
770 {
771 	int err;
772 	u32 rs;
773 	u64 vbo;
774 	struct runs_tree *run;
775 	struct ntfs_inode *ni;
776 
777 	if (from >= to)
778 		return 0;
779 
780 	rs = sbi->record_size;
781 	ni = sbi->mft.ni;
782 	run = &ni->file.run;
783 
784 	down_read(&ni->file.run_lock);
785 	vbo = (u64)from * rs;
786 	for (; from < to; from++, vbo += rs) {
787 		struct ntfs_buffers nb;
788 
789 		err = ntfs_get_bh(sbi, run, vbo, rs, &nb);
790 		if (err)
791 			goto out;
792 
793 		err = ntfs_write_bh(sbi, &sbi->new_rec->rhdr, &nb, 0);
794 		nb_put(&nb);
795 		if (err)
796 			goto out;
797 	}
798 
799 out:
800 	sbi->mft.used = from;
801 	up_read(&ni->file.run_lock);
802 	return err;
803 }
804 
805 /*
806  * ntfs_refresh_zone - Refresh MFT zone.
807  *
808  * sbi->used.bitmap is locked for rw.
809  * sbi->mft.bitmap is locked for write.
810  * sbi->mft.ni->file.run_lock for write.
811  */
812 int ntfs_refresh_zone(struct ntfs_sb_info *sbi)
813 {
814 	CLST lcn, vcn, len;
815 	size_t lcn_s, zlen;
816 	struct wnd_bitmap *wnd = &sbi->used.bitmap;
817 	struct ntfs_inode *ni = sbi->mft.ni;
818 
819 	/* Do not change anything unless we have non empty MFT zone. */
820 	if (wnd_zone_len(wnd))
821 		return 0;
822 
823 	vcn = bytes_to_cluster(sbi,
824 			       (u64)sbi->mft.bitmap.nbits << sbi->record_bits);
825 
826 	if (!run_lookup_entry(&ni->file.run, vcn - 1, &lcn, &len, NULL))
827 		lcn = SPARSE_LCN;
828 
829 	/* We should always find Last Lcn for MFT. */
830 	if (lcn == SPARSE_LCN)
831 		return -EINVAL;
832 
833 	lcn_s = lcn + 1;
834 
835 	/* Try to allocate clusters after last MFT run. */
836 	zlen = wnd_find(wnd, sbi->zone_max, lcn_s, 0, &lcn_s);
837 	wnd_zone_set(wnd, lcn_s, zlen);
838 
839 	return 0;
840 }
841 
842 /*
843  * ntfs_update_mftmirr - Update $MFTMirr data.
844  */
845 void ntfs_update_mftmirr(struct ntfs_sb_info *sbi, int wait)
846 {
847 	int err;
848 	struct super_block *sb = sbi->sb;
849 	u32 blocksize, bytes;
850 	sector_t block1, block2;
851 
852 	/*
853 	 * sb can be NULL here. In this case sbi->flags should be 0 too.
854 	 */
855 	if (!sb || !(sbi->flags & NTFS_FLAGS_MFTMIRR))
856 		return;
857 
858 	blocksize = sb->s_blocksize;
859 	bytes = sbi->mft.recs_mirr << sbi->record_bits;
860 	block1 = sbi->mft.lbo >> sb->s_blocksize_bits;
861 	block2 = sbi->mft.lbo2 >> sb->s_blocksize_bits;
862 
863 	for (; bytes >= blocksize; bytes -= blocksize) {
864 		struct buffer_head *bh1, *bh2;
865 
866 		bh1 = sb_bread(sb, block1++);
867 		if (!bh1)
868 			return;
869 
870 		bh2 = sb_getblk(sb, block2++);
871 		if (!bh2) {
872 			put_bh(bh1);
873 			return;
874 		}
875 
876 		if (buffer_locked(bh2))
877 			__wait_on_buffer(bh2);
878 
879 		lock_buffer(bh2);
880 		memcpy(bh2->b_data, bh1->b_data, blocksize);
881 		set_buffer_uptodate(bh2);
882 		mark_buffer_dirty(bh2);
883 		unlock_buffer(bh2);
884 
885 		put_bh(bh1);
886 		bh1 = NULL;
887 
888 		err = wait ? sync_dirty_buffer(bh2) : 0;
889 
890 		put_bh(bh2);
891 		if (err)
892 			return;
893 	}
894 
895 	sbi->flags &= ~NTFS_FLAGS_MFTMIRR;
896 }
897 
898 /*
899  * ntfs_bad_inode
900  *
901  * Marks inode as bad and marks fs as 'dirty'
902  */
903 void ntfs_bad_inode(struct inode *inode, const char *hint)
904 {
905 	struct ntfs_sb_info *sbi = inode->i_sb->s_fs_info;
906 
907 	ntfs_inode_err(inode, "%s", hint);
908 	make_bad_inode(inode);
909 	ntfs_set_state(sbi, NTFS_DIRTY_ERROR);
910 }
911 
912 /*
913  * ntfs_set_state
914  *
915  * Mount: ntfs_set_state(NTFS_DIRTY_DIRTY)
916  * Umount: ntfs_set_state(NTFS_DIRTY_CLEAR)
917  * NTFS error: ntfs_set_state(NTFS_DIRTY_ERROR)
918  */
919 int ntfs_set_state(struct ntfs_sb_info *sbi, enum NTFS_DIRTY_FLAGS dirty)
920 {
921 	int err;
922 	struct ATTRIB *attr;
923 	struct VOLUME_INFO *info;
924 	struct mft_inode *mi;
925 	struct ntfs_inode *ni;
926 	__le16 info_flags;
927 
928 	/*
929 	 * Do not change state if fs was real_dirty.
930 	 * Do not change state if fs already dirty(clear).
931 	 * Do not change any thing if mounted read only.
932 	 */
933 	if (sbi->volume.real_dirty || sb_rdonly(sbi->sb))
934 		return 0;
935 
936 	/* Check cached value. */
937 	if ((dirty == NTFS_DIRTY_CLEAR ? 0 : VOLUME_FLAG_DIRTY) ==
938 	    (sbi->volume.flags & VOLUME_FLAG_DIRTY))
939 		return 0;
940 
941 	ni = sbi->volume.ni;
942 	if (!ni)
943 		return -EINVAL;
944 
945 	mutex_lock_nested(&ni->ni_lock, NTFS_INODE_MUTEX_DIRTY);
946 
947 	attr = ni_find_attr(ni, NULL, NULL, ATTR_VOL_INFO, NULL, 0, NULL, &mi);
948 	if (!attr) {
949 		err = -EINVAL;
950 		goto out;
951 	}
952 
953 	info = resident_data_ex(attr, SIZEOF_ATTRIBUTE_VOLUME_INFO);
954 	if (!info) {
955 		err = -EINVAL;
956 		goto out;
957 	}
958 
959 	info_flags = info->flags;
960 
961 	switch (dirty) {
962 	case NTFS_DIRTY_ERROR:
963 		ntfs_notice(sbi->sb, "Mark volume as dirty due to NTFS errors");
964 		sbi->volume.real_dirty = true;
965 		fallthrough;
966 	case NTFS_DIRTY_DIRTY:
967 		info->flags |= VOLUME_FLAG_DIRTY;
968 		break;
969 	case NTFS_DIRTY_CLEAR:
970 		info->flags &= ~VOLUME_FLAG_DIRTY;
971 		break;
972 	}
973 	/* Cache current volume flags. */
974 	if (info_flags != info->flags) {
975 		sbi->volume.flags = info->flags;
976 		mi->dirty = true;
977 	}
978 	err = 0;
979 
980 out:
981 	ni_unlock(ni);
982 	if (err)
983 		return err;
984 
985 	mark_inode_dirty(&ni->vfs_inode);
986 	/* verify(!ntfs_update_mftmirr()); */
987 
988 	/*
989 	 * If we used wait=1, sync_inode_metadata waits for the io for the
990 	 * inode to finish. It hangs when media is removed.
991 	 * So wait=0 is sent down to sync_inode_metadata
992 	 * and filemap_fdatawrite is used for the data blocks.
993 	 */
994 	err = sync_inode_metadata(&ni->vfs_inode, 0);
995 	if (!err)
996 		err = filemap_fdatawrite(ni->vfs_inode.i_mapping);
997 
998 	return err;
999 }
1000 
1001 /*
1002  * security_hash - Calculates a hash of security descriptor.
1003  */
1004 static inline __le32 security_hash(const void *sd, size_t bytes)
1005 {
1006 	u32 hash = 0;
1007 	const __le32 *ptr = sd;
1008 
1009 	bytes >>= 2;
1010 	while (bytes--)
1011 		hash = ((hash >> 0x1D) | (hash << 3)) + le32_to_cpu(*ptr++);
1012 	return cpu_to_le32(hash);
1013 }
1014 
1015 int ntfs_sb_read(struct super_block *sb, u64 lbo, size_t bytes, void *buffer)
1016 {
1017 	struct block_device *bdev = sb->s_bdev;
1018 	u32 blocksize = sb->s_blocksize;
1019 	u64 block = lbo >> sb->s_blocksize_bits;
1020 	u32 off = lbo & (blocksize - 1);
1021 	u32 op = blocksize - off;
1022 
1023 	for (; bytes; block += 1, off = 0, op = blocksize) {
1024 		struct buffer_head *bh = __bread(bdev, block, blocksize);
1025 
1026 		if (!bh)
1027 			return -EIO;
1028 
1029 		if (op > bytes)
1030 			op = bytes;
1031 
1032 		memcpy(buffer, bh->b_data + off, op);
1033 
1034 		put_bh(bh);
1035 
1036 		bytes -= op;
1037 		buffer = Add2Ptr(buffer, op);
1038 	}
1039 
1040 	return 0;
1041 }
1042 
1043 int ntfs_sb_write(struct super_block *sb, u64 lbo, size_t bytes,
1044 		  const void *buf, int wait)
1045 {
1046 	u32 blocksize = sb->s_blocksize;
1047 	struct block_device *bdev = sb->s_bdev;
1048 	sector_t block = lbo >> sb->s_blocksize_bits;
1049 	u32 off = lbo & (blocksize - 1);
1050 	u32 op = blocksize - off;
1051 	struct buffer_head *bh;
1052 
1053 	if (!wait && (sb->s_flags & SB_SYNCHRONOUS))
1054 		wait = 1;
1055 
1056 	for (; bytes; block += 1, off = 0, op = blocksize) {
1057 		if (op > bytes)
1058 			op = bytes;
1059 
1060 		if (op < blocksize) {
1061 			bh = __bread(bdev, block, blocksize);
1062 			if (!bh) {
1063 				ntfs_err(sb, "failed to read block %llx",
1064 					 (u64)block);
1065 				return -EIO;
1066 			}
1067 		} else {
1068 			bh = __getblk(bdev, block, blocksize);
1069 			if (!bh)
1070 				return -ENOMEM;
1071 		}
1072 
1073 		if (buffer_locked(bh))
1074 			__wait_on_buffer(bh);
1075 
1076 		lock_buffer(bh);
1077 		if (buf) {
1078 			memcpy(bh->b_data + off, buf, op);
1079 			buf = Add2Ptr(buf, op);
1080 		} else {
1081 			memset(bh->b_data + off, -1, op);
1082 		}
1083 
1084 		set_buffer_uptodate(bh);
1085 		mark_buffer_dirty(bh);
1086 		unlock_buffer(bh);
1087 
1088 		if (wait) {
1089 			int err = sync_dirty_buffer(bh);
1090 
1091 			if (err) {
1092 				ntfs_err(
1093 					sb,
1094 					"failed to sync buffer at block %llx, error %d",
1095 					(u64)block, err);
1096 				put_bh(bh);
1097 				return err;
1098 			}
1099 		}
1100 
1101 		put_bh(bh);
1102 
1103 		bytes -= op;
1104 	}
1105 	return 0;
1106 }
1107 
1108 int ntfs_sb_write_run(struct ntfs_sb_info *sbi, const struct runs_tree *run,
1109 		      u64 vbo, const void *buf, size_t bytes, int sync)
1110 {
1111 	struct super_block *sb = sbi->sb;
1112 	u8 cluster_bits = sbi->cluster_bits;
1113 	u32 off = vbo & sbi->cluster_mask;
1114 	CLST lcn, clen, vcn = vbo >> cluster_bits, vcn_next;
1115 	u64 lbo, len;
1116 	size_t idx;
1117 
1118 	if (!run_lookup_entry(run, vcn, &lcn, &clen, &idx))
1119 		return -ENOENT;
1120 
1121 	if (lcn == SPARSE_LCN)
1122 		return -EINVAL;
1123 
1124 	lbo = ((u64)lcn << cluster_bits) + off;
1125 	len = ((u64)clen << cluster_bits) - off;
1126 
1127 	for (;;) {
1128 		u32 op = min_t(u64, len, bytes);
1129 		int err = ntfs_sb_write(sb, lbo, op, buf, sync);
1130 
1131 		if (err)
1132 			return err;
1133 
1134 		bytes -= op;
1135 		if (!bytes)
1136 			break;
1137 
1138 		vcn_next = vcn + clen;
1139 		if (!run_get_entry(run, ++idx, &vcn, &lcn, &clen) ||
1140 		    vcn != vcn_next)
1141 			return -ENOENT;
1142 
1143 		if (lcn == SPARSE_LCN)
1144 			return -EINVAL;
1145 
1146 		if (buf)
1147 			buf = Add2Ptr(buf, op);
1148 
1149 		lbo = ((u64)lcn << cluster_bits);
1150 		len = ((u64)clen << cluster_bits);
1151 	}
1152 
1153 	return 0;
1154 }
1155 
1156 struct buffer_head *ntfs_bread_run(struct ntfs_sb_info *sbi,
1157 				   const struct runs_tree *run, u64 vbo)
1158 {
1159 	struct super_block *sb = sbi->sb;
1160 	u8 cluster_bits = sbi->cluster_bits;
1161 	CLST lcn;
1162 	u64 lbo;
1163 
1164 	if (!run_lookup_entry(run, vbo >> cluster_bits, &lcn, NULL, NULL))
1165 		return ERR_PTR(-ENOENT);
1166 
1167 	lbo = ((u64)lcn << cluster_bits) + (vbo & sbi->cluster_mask);
1168 
1169 	return ntfs_bread(sb, lbo >> sb->s_blocksize_bits);
1170 }
1171 
1172 int ntfs_read_run_nb(struct ntfs_sb_info *sbi, const struct runs_tree *run,
1173 		     u64 vbo, void *buf, u32 bytes, struct ntfs_buffers *nb)
1174 {
1175 	int err;
1176 	struct super_block *sb = sbi->sb;
1177 	u32 blocksize = sb->s_blocksize;
1178 	u8 cluster_bits = sbi->cluster_bits;
1179 	u32 off = vbo & sbi->cluster_mask;
1180 	u32 nbh = 0;
1181 	CLST vcn_next, vcn = vbo >> cluster_bits;
1182 	CLST lcn, clen;
1183 	u64 lbo, len;
1184 	size_t idx;
1185 	struct buffer_head *bh;
1186 
1187 	if (!run) {
1188 		/* First reading of $Volume + $MFTMirr + $LogFile goes here. */
1189 		if (vbo > MFT_REC_VOL * sbi->record_size) {
1190 			err = -ENOENT;
1191 			goto out;
1192 		}
1193 
1194 		/* Use absolute boot's 'MFTCluster' to read record. */
1195 		lbo = vbo + sbi->mft.lbo;
1196 		len = sbi->record_size;
1197 	} else if (!run_lookup_entry(run, vcn, &lcn, &clen, &idx)) {
1198 		err = -ENOENT;
1199 		goto out;
1200 	} else {
1201 		if (lcn == SPARSE_LCN) {
1202 			err = -EINVAL;
1203 			goto out;
1204 		}
1205 
1206 		lbo = ((u64)lcn << cluster_bits) + off;
1207 		len = ((u64)clen << cluster_bits) - off;
1208 	}
1209 
1210 	off = lbo & (blocksize - 1);
1211 	if (nb) {
1212 		nb->off = off;
1213 		nb->bytes = bytes;
1214 	}
1215 
1216 	for (;;) {
1217 		u32 len32 = len >= bytes ? bytes : len;
1218 		sector_t block = lbo >> sb->s_blocksize_bits;
1219 
1220 		do {
1221 			u32 op = blocksize - off;
1222 
1223 			if (op > len32)
1224 				op = len32;
1225 
1226 			bh = ntfs_bread(sb, block);
1227 			if (!bh) {
1228 				err = -EIO;
1229 				goto out;
1230 			}
1231 
1232 			if (buf) {
1233 				memcpy(buf, bh->b_data + off, op);
1234 				buf = Add2Ptr(buf, op);
1235 			}
1236 
1237 			if (!nb) {
1238 				put_bh(bh);
1239 			} else if (nbh >= ARRAY_SIZE(nb->bh)) {
1240 				err = -EINVAL;
1241 				goto out;
1242 			} else {
1243 				nb->bh[nbh++] = bh;
1244 				nb->nbufs = nbh;
1245 			}
1246 
1247 			bytes -= op;
1248 			if (!bytes)
1249 				return 0;
1250 			len32 -= op;
1251 			block += 1;
1252 			off = 0;
1253 
1254 		} while (len32);
1255 
1256 		vcn_next = vcn + clen;
1257 		if (!run_get_entry(run, ++idx, &vcn, &lcn, &clen) ||
1258 		    vcn != vcn_next) {
1259 			err = -ENOENT;
1260 			goto out;
1261 		}
1262 
1263 		if (lcn == SPARSE_LCN) {
1264 			err = -EINVAL;
1265 			goto out;
1266 		}
1267 
1268 		lbo = ((u64)lcn << cluster_bits);
1269 		len = ((u64)clen << cluster_bits);
1270 	}
1271 
1272 out:
1273 	if (!nbh)
1274 		return err;
1275 
1276 	while (nbh) {
1277 		put_bh(nb->bh[--nbh]);
1278 		nb->bh[nbh] = NULL;
1279 	}
1280 
1281 	nb->nbufs = 0;
1282 	return err;
1283 }
1284 
1285 /*
1286  * ntfs_read_bh
1287  *
1288  * Return: < 0 if error, 0 if ok, -E_NTFS_FIXUP if need to update fixups.
1289  */
1290 int ntfs_read_bh(struct ntfs_sb_info *sbi, const struct runs_tree *run, u64 vbo,
1291 		 struct NTFS_RECORD_HEADER *rhdr, u32 bytes,
1292 		 struct ntfs_buffers *nb)
1293 {
1294 	int err = ntfs_read_run_nb(sbi, run, vbo, rhdr, bytes, nb);
1295 
1296 	if (err)
1297 		return err;
1298 	return ntfs_fix_post_read(rhdr, nb->bytes, true);
1299 }
1300 
1301 int ntfs_get_bh(struct ntfs_sb_info *sbi, const struct runs_tree *run, u64 vbo,
1302 		u32 bytes, struct ntfs_buffers *nb)
1303 {
1304 	int err = 0;
1305 	struct super_block *sb = sbi->sb;
1306 	u32 blocksize = sb->s_blocksize;
1307 	u8 cluster_bits = sbi->cluster_bits;
1308 	CLST vcn_next, vcn = vbo >> cluster_bits;
1309 	u32 off;
1310 	u32 nbh = 0;
1311 	CLST lcn, clen;
1312 	u64 lbo, len;
1313 	size_t idx;
1314 
1315 	nb->bytes = bytes;
1316 
1317 	if (!run_lookup_entry(run, vcn, &lcn, &clen, &idx)) {
1318 		err = -ENOENT;
1319 		goto out;
1320 	}
1321 
1322 	off = vbo & sbi->cluster_mask;
1323 	lbo = ((u64)lcn << cluster_bits) + off;
1324 	len = ((u64)clen << cluster_bits) - off;
1325 
1326 	nb->off = off = lbo & (blocksize - 1);
1327 
1328 	for (;;) {
1329 		u32 len32 = min_t(u64, len, bytes);
1330 		sector_t block = lbo >> sb->s_blocksize_bits;
1331 
1332 		do {
1333 			u32 op;
1334 			struct buffer_head *bh;
1335 
1336 			if (nbh >= ARRAY_SIZE(nb->bh)) {
1337 				err = -EINVAL;
1338 				goto out;
1339 			}
1340 
1341 			op = blocksize - off;
1342 			if (op > len32)
1343 				op = len32;
1344 
1345 			if (op == blocksize) {
1346 				bh = sb_getblk(sb, block);
1347 				if (!bh) {
1348 					err = -ENOMEM;
1349 					goto out;
1350 				}
1351 				if (buffer_locked(bh))
1352 					__wait_on_buffer(bh);
1353 				set_buffer_uptodate(bh);
1354 			} else {
1355 				bh = ntfs_bread(sb, block);
1356 				if (!bh) {
1357 					err = -EIO;
1358 					goto out;
1359 				}
1360 			}
1361 
1362 			nb->bh[nbh++] = bh;
1363 			bytes -= op;
1364 			if (!bytes) {
1365 				nb->nbufs = nbh;
1366 				return 0;
1367 			}
1368 
1369 			block += 1;
1370 			len32 -= op;
1371 			off = 0;
1372 		} while (len32);
1373 
1374 		vcn_next = vcn + clen;
1375 		if (!run_get_entry(run, ++idx, &vcn, &lcn, &clen) ||
1376 		    vcn != vcn_next) {
1377 			err = -ENOENT;
1378 			goto out;
1379 		}
1380 
1381 		lbo = ((u64)lcn << cluster_bits);
1382 		len = ((u64)clen << cluster_bits);
1383 	}
1384 
1385 out:
1386 	while (nbh) {
1387 		put_bh(nb->bh[--nbh]);
1388 		nb->bh[nbh] = NULL;
1389 	}
1390 
1391 	nb->nbufs = 0;
1392 
1393 	return err;
1394 }
1395 
1396 int ntfs_write_bh(struct ntfs_sb_info *sbi, struct NTFS_RECORD_HEADER *rhdr,
1397 		  struct ntfs_buffers *nb, int sync)
1398 {
1399 	int err = 0;
1400 	struct super_block *sb = sbi->sb;
1401 	u32 block_size = sb->s_blocksize;
1402 	u32 bytes = nb->bytes;
1403 	u32 off = nb->off;
1404 	u16 fo = le16_to_cpu(rhdr->fix_off);
1405 	u16 fn = le16_to_cpu(rhdr->fix_num);
1406 	u32 idx;
1407 	__le16 *fixup;
1408 	__le16 sample;
1409 
1410 	if ((fo & 1) || fo + fn * sizeof(short) > SECTOR_SIZE || !fn-- ||
1411 	    fn * SECTOR_SIZE > bytes) {
1412 		return -EINVAL;
1413 	}
1414 
1415 	for (idx = 0; bytes && idx < nb->nbufs; idx += 1, off = 0) {
1416 		u32 op = block_size - off;
1417 		char *bh_data;
1418 		struct buffer_head *bh = nb->bh[idx];
1419 		__le16 *ptr, *end_data;
1420 
1421 		if (op > bytes)
1422 			op = bytes;
1423 
1424 		if (buffer_locked(bh))
1425 			__wait_on_buffer(bh);
1426 
1427 		lock_buffer(bh);
1428 
1429 		bh_data = bh->b_data + off;
1430 		end_data = Add2Ptr(bh_data, op);
1431 		memcpy(bh_data, rhdr, op);
1432 
1433 		if (!idx) {
1434 			u16 t16;
1435 
1436 			fixup = Add2Ptr(bh_data, fo);
1437 			sample = *fixup;
1438 			t16 = le16_to_cpu(sample);
1439 			if (t16 >= 0x7FFF) {
1440 				sample = *fixup = cpu_to_le16(1);
1441 			} else {
1442 				sample = cpu_to_le16(t16 + 1);
1443 				*fixup = sample;
1444 			}
1445 
1446 			*(__le16 *)Add2Ptr(rhdr, fo) = sample;
1447 		}
1448 
1449 		ptr = Add2Ptr(bh_data, SECTOR_SIZE - sizeof(short));
1450 
1451 		do {
1452 			*++fixup = *ptr;
1453 			*ptr = sample;
1454 			ptr += SECTOR_SIZE / sizeof(short);
1455 		} while (ptr < end_data);
1456 
1457 		set_buffer_uptodate(bh);
1458 		mark_buffer_dirty(bh);
1459 		unlock_buffer(bh);
1460 
1461 		if (sync) {
1462 			int err2 = sync_dirty_buffer(bh);
1463 
1464 			if (!err && err2)
1465 				err = err2;
1466 		}
1467 
1468 		bytes -= op;
1469 		rhdr = Add2Ptr(rhdr, op);
1470 	}
1471 
1472 	return err;
1473 }
1474 
1475 /*
1476  * ntfs_bio_pages - Read/write pages from/to disk.
1477  */
1478 int ntfs_bio_pages(struct ntfs_sb_info *sbi, const struct runs_tree *run,
1479 		   struct page **pages, u32 nr_pages, u64 vbo, u32 bytes,
1480 		   enum req_op op)
1481 {
1482 	int err = 0;
1483 	struct bio *new, *bio = NULL;
1484 	struct super_block *sb = sbi->sb;
1485 	struct block_device *bdev = sb->s_bdev;
1486 	struct page *page;
1487 	u8 cluster_bits = sbi->cluster_bits;
1488 	CLST lcn, clen, vcn, vcn_next;
1489 	u32 add, off, page_idx;
1490 	u64 lbo, len;
1491 	size_t run_idx;
1492 	struct blk_plug plug;
1493 
1494 	if (!bytes)
1495 		return 0;
1496 
1497 	blk_start_plug(&plug);
1498 
1499 	/* Align vbo and bytes to be 512 bytes aligned. */
1500 	lbo = (vbo + bytes + 511) & ~511ull;
1501 	vbo = vbo & ~511ull;
1502 	bytes = lbo - vbo;
1503 
1504 	vcn = vbo >> cluster_bits;
1505 	if (!run_lookup_entry(run, vcn, &lcn, &clen, &run_idx)) {
1506 		err = -ENOENT;
1507 		goto out;
1508 	}
1509 	off = vbo & sbi->cluster_mask;
1510 	page_idx = 0;
1511 	page = pages[0];
1512 
1513 	for (;;) {
1514 		lbo = ((u64)lcn << cluster_bits) + off;
1515 		len = ((u64)clen << cluster_bits) - off;
1516 new_bio:
1517 		new = bio_alloc(bdev, nr_pages - page_idx, op, GFP_NOFS);
1518 		if (bio) {
1519 			bio_chain(bio, new);
1520 			submit_bio(bio);
1521 		}
1522 		bio = new;
1523 		bio->bi_iter.bi_sector = lbo >> 9;
1524 
1525 		while (len) {
1526 			off = vbo & (PAGE_SIZE - 1);
1527 			add = off + len > PAGE_SIZE ? (PAGE_SIZE - off) : len;
1528 
1529 			if (bio_add_page(bio, page, add, off) < add)
1530 				goto new_bio;
1531 
1532 			if (bytes <= add)
1533 				goto out;
1534 			bytes -= add;
1535 			vbo += add;
1536 
1537 			if (add + off == PAGE_SIZE) {
1538 				page_idx += 1;
1539 				if (WARN_ON(page_idx >= nr_pages)) {
1540 					err = -EINVAL;
1541 					goto out;
1542 				}
1543 				page = pages[page_idx];
1544 			}
1545 
1546 			if (len <= add)
1547 				break;
1548 			len -= add;
1549 			lbo += add;
1550 		}
1551 
1552 		vcn_next = vcn + clen;
1553 		if (!run_get_entry(run, ++run_idx, &vcn, &lcn, &clen) ||
1554 		    vcn != vcn_next) {
1555 			err = -ENOENT;
1556 			goto out;
1557 		}
1558 		off = 0;
1559 	}
1560 out:
1561 	if (bio) {
1562 		if (!err)
1563 			err = submit_bio_wait(bio);
1564 		bio_put(bio);
1565 	}
1566 	blk_finish_plug(&plug);
1567 
1568 	return err;
1569 }
1570 
1571 /*
1572  * ntfs_bio_fill_1 - Helper for ntfs_loadlog_and_replay().
1573  *
1574  * Fill on-disk logfile range by (-1)
1575  * this means empty logfile.
1576  */
1577 int ntfs_bio_fill_1(struct ntfs_sb_info *sbi, const struct runs_tree *run)
1578 {
1579 	int err = 0;
1580 	struct super_block *sb = sbi->sb;
1581 	struct block_device *bdev = sb->s_bdev;
1582 	u8 cluster_bits = sbi->cluster_bits;
1583 	struct bio *new, *bio = NULL;
1584 	CLST lcn, clen;
1585 	u64 lbo, len;
1586 	size_t run_idx;
1587 	struct page *fill;
1588 	void *kaddr;
1589 	struct blk_plug plug;
1590 
1591 	fill = alloc_page(GFP_KERNEL);
1592 	if (!fill)
1593 		return -ENOMEM;
1594 
1595 	kaddr = kmap_atomic(fill);
1596 	memset(kaddr, -1, PAGE_SIZE);
1597 	kunmap_atomic(kaddr);
1598 	flush_dcache_page(fill);
1599 	lock_page(fill);
1600 
1601 	if (!run_lookup_entry(run, 0, &lcn, &clen, &run_idx)) {
1602 		err = -ENOENT;
1603 		goto out;
1604 	}
1605 
1606 	/*
1607 	 * TODO: Try blkdev_issue_write_same.
1608 	 */
1609 	blk_start_plug(&plug);
1610 	do {
1611 		lbo = (u64)lcn << cluster_bits;
1612 		len = (u64)clen << cluster_bits;
1613 new_bio:
1614 		new = bio_alloc(bdev, BIO_MAX_VECS, REQ_OP_WRITE, GFP_NOFS);
1615 		if (bio) {
1616 			bio_chain(bio, new);
1617 			submit_bio(bio);
1618 		}
1619 		bio = new;
1620 		bio->bi_iter.bi_sector = lbo >> 9;
1621 
1622 		for (;;) {
1623 			u32 add = len > PAGE_SIZE ? PAGE_SIZE : len;
1624 
1625 			if (bio_add_page(bio, fill, add, 0) < add)
1626 				goto new_bio;
1627 
1628 			lbo += add;
1629 			if (len <= add)
1630 				break;
1631 			len -= add;
1632 		}
1633 	} while (run_get_entry(run, ++run_idx, NULL, &lcn, &clen));
1634 
1635 	if (!err)
1636 		err = submit_bio_wait(bio);
1637 	bio_put(bio);
1638 
1639 	blk_finish_plug(&plug);
1640 out:
1641 	unlock_page(fill);
1642 	put_page(fill);
1643 
1644 	return err;
1645 }
1646 
1647 int ntfs_vbo_to_lbo(struct ntfs_sb_info *sbi, const struct runs_tree *run,
1648 		    u64 vbo, u64 *lbo, u64 *bytes)
1649 {
1650 	u32 off;
1651 	CLST lcn, len;
1652 	u8 cluster_bits = sbi->cluster_bits;
1653 
1654 	if (!run_lookup_entry(run, vbo >> cluster_bits, &lcn, &len, NULL))
1655 		return -ENOENT;
1656 
1657 	off = vbo & sbi->cluster_mask;
1658 	*lbo = lcn == SPARSE_LCN ? -1 : (((u64)lcn << cluster_bits) + off);
1659 	*bytes = ((u64)len << cluster_bits) - off;
1660 
1661 	return 0;
1662 }
1663 
1664 struct ntfs_inode *ntfs_new_inode(struct ntfs_sb_info *sbi, CLST rno, bool dir)
1665 {
1666 	int err = 0;
1667 	struct super_block *sb = sbi->sb;
1668 	struct inode *inode = new_inode(sb);
1669 	struct ntfs_inode *ni;
1670 
1671 	if (!inode)
1672 		return ERR_PTR(-ENOMEM);
1673 
1674 	ni = ntfs_i(inode);
1675 
1676 	err = mi_format_new(&ni->mi, sbi, rno, dir ? RECORD_FLAG_DIR : 0,
1677 			    false);
1678 	if (err)
1679 		goto out;
1680 
1681 	inode->i_ino = rno;
1682 	if (insert_inode_locked(inode) < 0) {
1683 		err = -EIO;
1684 		goto out;
1685 	}
1686 
1687 out:
1688 	if (err) {
1689 		make_bad_inode(inode);
1690 		iput(inode);
1691 		ni = ERR_PTR(err);
1692 	}
1693 	return ni;
1694 }
1695 
1696 /*
1697  * O:BAG:BAD:(A;OICI;FA;;;WD)
1698  * Owner S-1-5-32-544 (Administrators)
1699  * Group S-1-5-32-544 (Administrators)
1700  * ACE: allow S-1-1-0 (Everyone) with FILE_ALL_ACCESS
1701  */
1702 const u8 s_default_security[] __aligned(8) = {
1703 	0x01, 0x00, 0x04, 0x80, 0x30, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
1704 	0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1C, 0x00,
1705 	0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x14, 0x00, 0xFF, 0x01, 0x1F, 0x00,
1706 	0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
1707 	0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00,
1708 	0x20, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
1709 	0x20, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00,
1710 };
1711 
1712 static_assert(sizeof(s_default_security) == 0x50);
1713 
1714 static inline u32 sid_length(const struct SID *sid)
1715 {
1716 	return struct_size(sid, SubAuthority, sid->SubAuthorityCount);
1717 }
1718 
1719 /*
1720  * is_acl_valid
1721  *
1722  * Thanks Mark Harmstone for idea.
1723  */
1724 static bool is_acl_valid(const struct ACL *acl, u32 len)
1725 {
1726 	const struct ACE_HEADER *ace;
1727 	u32 i;
1728 	u16 ace_count, ace_size;
1729 
1730 	if (acl->AclRevision != ACL_REVISION &&
1731 	    acl->AclRevision != ACL_REVISION_DS) {
1732 		/*
1733 		 * This value should be ACL_REVISION, unless the ACL contains an
1734 		 * object-specific ACE, in which case this value must be ACL_REVISION_DS.
1735 		 * All ACEs in an ACL must be at the same revision level.
1736 		 */
1737 		return false;
1738 	}
1739 
1740 	if (acl->Sbz1)
1741 		return false;
1742 
1743 	if (le16_to_cpu(acl->AclSize) > len)
1744 		return false;
1745 
1746 	if (acl->Sbz2)
1747 		return false;
1748 
1749 	len -= sizeof(struct ACL);
1750 	ace = (struct ACE_HEADER *)&acl[1];
1751 	ace_count = le16_to_cpu(acl->AceCount);
1752 
1753 	for (i = 0; i < ace_count; i++) {
1754 		if (len < sizeof(struct ACE_HEADER))
1755 			return false;
1756 
1757 		ace_size = le16_to_cpu(ace->AceSize);
1758 		if (len < ace_size)
1759 			return false;
1760 
1761 		len -= ace_size;
1762 		ace = Add2Ptr(ace, ace_size);
1763 	}
1764 
1765 	return true;
1766 }
1767 
1768 bool is_sd_valid(const struct SECURITY_DESCRIPTOR_RELATIVE *sd, u32 len)
1769 {
1770 	u32 sd_owner, sd_group, sd_sacl, sd_dacl;
1771 
1772 	if (len < sizeof(struct SECURITY_DESCRIPTOR_RELATIVE))
1773 		return false;
1774 
1775 	if (sd->Revision != 1)
1776 		return false;
1777 
1778 	if (sd->Sbz1)
1779 		return false;
1780 
1781 	if (!(sd->Control & SE_SELF_RELATIVE))
1782 		return false;
1783 
1784 	sd_owner = le32_to_cpu(sd->Owner);
1785 	if (sd_owner) {
1786 		const struct SID *owner = Add2Ptr(sd, sd_owner);
1787 
1788 		if (sd_owner + offsetof(struct SID, SubAuthority) > len)
1789 			return false;
1790 
1791 		if (owner->Revision != 1)
1792 			return false;
1793 
1794 		if (sd_owner + sid_length(owner) > len)
1795 			return false;
1796 	}
1797 
1798 	sd_group = le32_to_cpu(sd->Group);
1799 	if (sd_group) {
1800 		const struct SID *group = Add2Ptr(sd, sd_group);
1801 
1802 		if (sd_group + offsetof(struct SID, SubAuthority) > len)
1803 			return false;
1804 
1805 		if (group->Revision != 1)
1806 			return false;
1807 
1808 		if (sd_group + sid_length(group) > len)
1809 			return false;
1810 	}
1811 
1812 	sd_sacl = le32_to_cpu(sd->Sacl);
1813 	if (sd_sacl) {
1814 		const struct ACL *sacl = Add2Ptr(sd, sd_sacl);
1815 
1816 		if (sd_sacl + sizeof(struct ACL) > len)
1817 			return false;
1818 
1819 		if (!is_acl_valid(sacl, len - sd_sacl))
1820 			return false;
1821 	}
1822 
1823 	sd_dacl = le32_to_cpu(sd->Dacl);
1824 	if (sd_dacl) {
1825 		const struct ACL *dacl = Add2Ptr(sd, sd_dacl);
1826 
1827 		if (sd_dacl + sizeof(struct ACL) > len)
1828 			return false;
1829 
1830 		if (!is_acl_valid(dacl, len - sd_dacl))
1831 			return false;
1832 	}
1833 
1834 	return true;
1835 }
1836 
1837 /*
1838  * ntfs_security_init - Load and parse $Secure.
1839  */
1840 int ntfs_security_init(struct ntfs_sb_info *sbi)
1841 {
1842 	int err;
1843 	struct super_block *sb = sbi->sb;
1844 	struct inode *inode;
1845 	struct ntfs_inode *ni;
1846 	struct MFT_REF ref;
1847 	struct ATTRIB *attr;
1848 	struct ATTR_LIST_ENTRY *le;
1849 	u64 sds_size;
1850 	size_t off;
1851 	struct NTFS_DE *ne;
1852 	struct NTFS_DE_SII *sii_e;
1853 	struct ntfs_fnd *fnd_sii = NULL;
1854 	const struct INDEX_ROOT *root_sii;
1855 	const struct INDEX_ROOT *root_sdh;
1856 	struct ntfs_index *indx_sdh = &sbi->security.index_sdh;
1857 	struct ntfs_index *indx_sii = &sbi->security.index_sii;
1858 
1859 	ref.low = cpu_to_le32(MFT_REC_SECURE);
1860 	ref.high = 0;
1861 	ref.seq = cpu_to_le16(MFT_REC_SECURE);
1862 
1863 	inode = ntfs_iget5(sb, &ref, &NAME_SECURE);
1864 	if (IS_ERR(inode)) {
1865 		err = PTR_ERR(inode);
1866 		ntfs_err(sb, "Failed to load $Secure (%d).", err);
1867 		inode = NULL;
1868 		goto out;
1869 	}
1870 
1871 	ni = ntfs_i(inode);
1872 
1873 	le = NULL;
1874 
1875 	attr = ni_find_attr(ni, NULL, &le, ATTR_ROOT, SDH_NAME,
1876 			    ARRAY_SIZE(SDH_NAME), NULL, NULL);
1877 	if (!attr ||
1878 	    !(root_sdh = resident_data_ex(attr, sizeof(struct INDEX_ROOT))) ||
1879 	    root_sdh->type != ATTR_ZERO ||
1880 	    root_sdh->rule != NTFS_COLLATION_TYPE_SECURITY_HASH ||
1881 	    offsetof(struct INDEX_ROOT, ihdr) +
1882 			    le32_to_cpu(root_sdh->ihdr.used) >
1883 		    le32_to_cpu(attr->res.data_size)) {
1884 		ntfs_err(sb, "$Secure::$SDH is corrupted.");
1885 		err = -EINVAL;
1886 		goto out;
1887 	}
1888 
1889 	err = indx_init(indx_sdh, sbi, attr, INDEX_MUTEX_SDH);
1890 	if (err) {
1891 		ntfs_err(sb, "Failed to initialize $Secure::$SDH (%d).", err);
1892 		goto out;
1893 	}
1894 
1895 	attr = ni_find_attr(ni, attr, &le, ATTR_ROOT, SII_NAME,
1896 			    ARRAY_SIZE(SII_NAME), NULL, NULL);
1897 	if (!attr ||
1898 	    !(root_sii = resident_data_ex(attr, sizeof(struct INDEX_ROOT))) ||
1899 	    root_sii->type != ATTR_ZERO ||
1900 	    root_sii->rule != NTFS_COLLATION_TYPE_UINT ||
1901 	    offsetof(struct INDEX_ROOT, ihdr) +
1902 			    le32_to_cpu(root_sii->ihdr.used) >
1903 		    le32_to_cpu(attr->res.data_size)) {
1904 		ntfs_err(sb, "$Secure::$SII is corrupted.");
1905 		err = -EINVAL;
1906 		goto out;
1907 	}
1908 
1909 	err = indx_init(indx_sii, sbi, attr, INDEX_MUTEX_SII);
1910 	if (err) {
1911 		ntfs_err(sb, "Failed to initialize $Secure::$SII (%d).", err);
1912 		goto out;
1913 	}
1914 
1915 	fnd_sii = fnd_get();
1916 	if (!fnd_sii) {
1917 		err = -ENOMEM;
1918 		goto out;
1919 	}
1920 
1921 	sds_size = inode->i_size;
1922 
1923 	/* Find the last valid Id. */
1924 	sbi->security.next_id = SECURITY_ID_FIRST;
1925 	/* Always write new security at the end of bucket. */
1926 	sbi->security.next_off =
1927 		ALIGN(sds_size - SecurityDescriptorsBlockSize, 16);
1928 
1929 	off = 0;
1930 	ne = NULL;
1931 
1932 	for (;;) {
1933 		u32 next_id;
1934 
1935 		err = indx_find_raw(indx_sii, ni, root_sii, &ne, &off, fnd_sii);
1936 		if (err || !ne)
1937 			break;
1938 
1939 		sii_e = (struct NTFS_DE_SII *)ne;
1940 		if (le16_to_cpu(ne->view.data_size) < SIZEOF_SECURITY_HDR)
1941 			continue;
1942 
1943 		next_id = le32_to_cpu(sii_e->sec_id) + 1;
1944 		if (next_id >= sbi->security.next_id)
1945 			sbi->security.next_id = next_id;
1946 	}
1947 
1948 	sbi->security.ni = ni;
1949 	inode = NULL;
1950 out:
1951 	iput(inode);
1952 	fnd_put(fnd_sii);
1953 
1954 	return err;
1955 }
1956 
1957 /*
1958  * ntfs_get_security_by_id - Read security descriptor by id.
1959  */
1960 int ntfs_get_security_by_id(struct ntfs_sb_info *sbi, __le32 security_id,
1961 			    struct SECURITY_DESCRIPTOR_RELATIVE **sd,
1962 			    size_t *size)
1963 {
1964 	int err;
1965 	int diff;
1966 	struct ntfs_inode *ni = sbi->security.ni;
1967 	struct ntfs_index *indx = &sbi->security.index_sii;
1968 	void *p = NULL;
1969 	struct NTFS_DE_SII *sii_e;
1970 	struct ntfs_fnd *fnd_sii;
1971 	struct SECURITY_HDR d_security;
1972 	const struct INDEX_ROOT *root_sii;
1973 	u32 t32;
1974 
1975 	*sd = NULL;
1976 
1977 	mutex_lock_nested(&ni->ni_lock, NTFS_INODE_MUTEX_SECURITY);
1978 
1979 	fnd_sii = fnd_get();
1980 	if (!fnd_sii) {
1981 		err = -ENOMEM;
1982 		goto out;
1983 	}
1984 
1985 	root_sii = indx_get_root(indx, ni, NULL, NULL);
1986 	if (!root_sii) {
1987 		err = -EINVAL;
1988 		goto out;
1989 	}
1990 
1991 	/* Try to find this SECURITY descriptor in SII indexes. */
1992 	err = indx_find(indx, ni, root_sii, &security_id, sizeof(security_id),
1993 			NULL, &diff, (struct NTFS_DE **)&sii_e, fnd_sii);
1994 	if (err)
1995 		goto out;
1996 
1997 	if (diff)
1998 		goto out;
1999 
2000 	t32 = le32_to_cpu(sii_e->sec_hdr.size);
2001 	if (t32 < SIZEOF_SECURITY_HDR) {
2002 		err = -EINVAL;
2003 		goto out;
2004 	}
2005 
2006 	if (t32 > SIZEOF_SECURITY_HDR + 0x10000) {
2007 		/* Looks like too big security. 0x10000 - is arbitrary big number. */
2008 		err = -EFBIG;
2009 		goto out;
2010 	}
2011 
2012 	*size = t32 - SIZEOF_SECURITY_HDR;
2013 
2014 	p = kmalloc(*size, GFP_NOFS);
2015 	if (!p) {
2016 		err = -ENOMEM;
2017 		goto out;
2018 	}
2019 
2020 	err = ntfs_read_run_nb(sbi, &ni->file.run,
2021 			       le64_to_cpu(sii_e->sec_hdr.off), &d_security,
2022 			       sizeof(d_security), NULL);
2023 	if (err)
2024 		goto out;
2025 
2026 	if (memcmp(&d_security, &sii_e->sec_hdr, SIZEOF_SECURITY_HDR)) {
2027 		err = -EINVAL;
2028 		goto out;
2029 	}
2030 
2031 	err = ntfs_read_run_nb(sbi, &ni->file.run,
2032 			       le64_to_cpu(sii_e->sec_hdr.off) +
2033 				       SIZEOF_SECURITY_HDR,
2034 			       p, *size, NULL);
2035 	if (err)
2036 		goto out;
2037 
2038 	*sd = p;
2039 	p = NULL;
2040 
2041 out:
2042 	kfree(p);
2043 	fnd_put(fnd_sii);
2044 	ni_unlock(ni);
2045 
2046 	return err;
2047 }
2048 
2049 /*
2050  * ntfs_insert_security - Insert security descriptor into $Secure::SDS.
2051  *
2052  * SECURITY Descriptor Stream data is organized into chunks of 256K bytes
2053  * and it contains a mirror copy of each security descriptor.  When writing
2054  * to a security descriptor at location X, another copy will be written at
2055  * location (X+256K).
2056  * When writing a security descriptor that will cross the 256K boundary,
2057  * the pointer will be advanced by 256K to skip
2058  * over the mirror portion.
2059  */
2060 int ntfs_insert_security(struct ntfs_sb_info *sbi,
2061 			 const struct SECURITY_DESCRIPTOR_RELATIVE *sd,
2062 			 u32 size_sd, __le32 *security_id, bool *inserted)
2063 {
2064 	int err, diff;
2065 	struct ntfs_inode *ni = sbi->security.ni;
2066 	struct ntfs_index *indx_sdh = &sbi->security.index_sdh;
2067 	struct ntfs_index *indx_sii = &sbi->security.index_sii;
2068 	struct NTFS_DE_SDH *e;
2069 	struct NTFS_DE_SDH sdh_e;
2070 	struct NTFS_DE_SII sii_e;
2071 	struct SECURITY_HDR *d_security;
2072 	u32 new_sec_size = size_sd + SIZEOF_SECURITY_HDR;
2073 	u32 aligned_sec_size = ALIGN(new_sec_size, 16);
2074 	struct SECURITY_KEY hash_key;
2075 	struct ntfs_fnd *fnd_sdh = NULL;
2076 	const struct INDEX_ROOT *root_sdh;
2077 	const struct INDEX_ROOT *root_sii;
2078 	u64 mirr_off, new_sds_size;
2079 	u32 next, left;
2080 
2081 	static_assert((1 << Log2OfSecurityDescriptorsBlockSize) ==
2082 		      SecurityDescriptorsBlockSize);
2083 
2084 	hash_key.hash = security_hash(sd, size_sd);
2085 	hash_key.sec_id = SECURITY_ID_INVALID;
2086 
2087 	if (inserted)
2088 		*inserted = false;
2089 	*security_id = SECURITY_ID_INVALID;
2090 
2091 	/* Allocate a temporal buffer. */
2092 	d_security = kzalloc(aligned_sec_size, GFP_NOFS);
2093 	if (!d_security)
2094 		return -ENOMEM;
2095 
2096 	mutex_lock_nested(&ni->ni_lock, NTFS_INODE_MUTEX_SECURITY);
2097 
2098 	fnd_sdh = fnd_get();
2099 	if (!fnd_sdh) {
2100 		err = -ENOMEM;
2101 		goto out;
2102 	}
2103 
2104 	root_sdh = indx_get_root(indx_sdh, ni, NULL, NULL);
2105 	if (!root_sdh) {
2106 		err = -EINVAL;
2107 		goto out;
2108 	}
2109 
2110 	root_sii = indx_get_root(indx_sii, ni, NULL, NULL);
2111 	if (!root_sii) {
2112 		err = -EINVAL;
2113 		goto out;
2114 	}
2115 
2116 	/*
2117 	 * Check if such security already exists.
2118 	 * Use "SDH" and hash -> to get the offset in "SDS".
2119 	 */
2120 	err = indx_find(indx_sdh, ni, root_sdh, &hash_key, sizeof(hash_key),
2121 			&d_security->key.sec_id, &diff, (struct NTFS_DE **)&e,
2122 			fnd_sdh);
2123 	if (err)
2124 		goto out;
2125 
2126 	while (e) {
2127 		if (le32_to_cpu(e->sec_hdr.size) == new_sec_size) {
2128 			err = ntfs_read_run_nb(sbi, &ni->file.run,
2129 					       le64_to_cpu(e->sec_hdr.off),
2130 					       d_security, new_sec_size, NULL);
2131 			if (err)
2132 				goto out;
2133 
2134 			if (le32_to_cpu(d_security->size) == new_sec_size &&
2135 			    d_security->key.hash == hash_key.hash &&
2136 			    !memcmp(d_security + 1, sd, size_sd)) {
2137 				*security_id = d_security->key.sec_id;
2138 				/* Such security already exists. */
2139 				err = 0;
2140 				goto out;
2141 			}
2142 		}
2143 
2144 		err = indx_find_sort(indx_sdh, ni, root_sdh,
2145 				     (struct NTFS_DE **)&e, fnd_sdh);
2146 		if (err)
2147 			goto out;
2148 
2149 		if (!e || e->key.hash != hash_key.hash)
2150 			break;
2151 	}
2152 
2153 	/* Zero unused space. */
2154 	next = sbi->security.next_off & (SecurityDescriptorsBlockSize - 1);
2155 	left = SecurityDescriptorsBlockSize - next;
2156 
2157 	/* Zero gap until SecurityDescriptorsBlockSize. */
2158 	if (left < new_sec_size) {
2159 		/* Zero "left" bytes from sbi->security.next_off. */
2160 		sbi->security.next_off += SecurityDescriptorsBlockSize + left;
2161 	}
2162 
2163 	/* Zero tail of previous security. */
2164 	//used = ni->vfs_inode.i_size & (SecurityDescriptorsBlockSize - 1);
2165 
2166 	/*
2167 	 * Example:
2168 	 * 0x40438 == ni->vfs_inode.i_size
2169 	 * 0x00440 == sbi->security.next_off
2170 	 * need to zero [0x438-0x440)
2171 	 * if (next > used) {
2172 	 *  u32 tozero = next - used;
2173 	 *  zero "tozero" bytes from sbi->security.next_off - tozero
2174 	 */
2175 
2176 	/* Format new security descriptor. */
2177 	d_security->key.hash = hash_key.hash;
2178 	d_security->key.sec_id = cpu_to_le32(sbi->security.next_id);
2179 	d_security->off = cpu_to_le64(sbi->security.next_off);
2180 	d_security->size = cpu_to_le32(new_sec_size);
2181 	memcpy(d_security + 1, sd, size_sd);
2182 
2183 	/* Write main SDS bucket. */
2184 	err = ntfs_sb_write_run(sbi, &ni->file.run, sbi->security.next_off,
2185 				d_security, aligned_sec_size, 0);
2186 
2187 	if (err)
2188 		goto out;
2189 
2190 	mirr_off = sbi->security.next_off + SecurityDescriptorsBlockSize;
2191 	new_sds_size = mirr_off + aligned_sec_size;
2192 
2193 	if (new_sds_size > ni->vfs_inode.i_size) {
2194 		err = attr_set_size(ni, ATTR_DATA, SDS_NAME,
2195 				    ARRAY_SIZE(SDS_NAME), &ni->file.run,
2196 				    new_sds_size, &new_sds_size, false, NULL);
2197 		if (err)
2198 			goto out;
2199 	}
2200 
2201 	/* Write copy SDS bucket. */
2202 	err = ntfs_sb_write_run(sbi, &ni->file.run, mirr_off, d_security,
2203 				aligned_sec_size, 0);
2204 	if (err)
2205 		goto out;
2206 
2207 	/* Fill SII entry. */
2208 	sii_e.de.view.data_off =
2209 		cpu_to_le16(offsetof(struct NTFS_DE_SII, sec_hdr));
2210 	sii_e.de.view.data_size = cpu_to_le16(SIZEOF_SECURITY_HDR);
2211 	sii_e.de.view.res = 0;
2212 	sii_e.de.size = cpu_to_le16(SIZEOF_SII_DIRENTRY);
2213 	sii_e.de.key_size = cpu_to_le16(sizeof(d_security->key.sec_id));
2214 	sii_e.de.flags = 0;
2215 	sii_e.de.res = 0;
2216 	sii_e.sec_id = d_security->key.sec_id;
2217 	memcpy(&sii_e.sec_hdr, d_security, SIZEOF_SECURITY_HDR);
2218 
2219 	err = indx_insert_entry(indx_sii, ni, &sii_e.de, NULL, NULL, 0);
2220 	if (err)
2221 		goto out;
2222 
2223 	/* Fill SDH entry. */
2224 	sdh_e.de.view.data_off =
2225 		cpu_to_le16(offsetof(struct NTFS_DE_SDH, sec_hdr));
2226 	sdh_e.de.view.data_size = cpu_to_le16(SIZEOF_SECURITY_HDR);
2227 	sdh_e.de.view.res = 0;
2228 	sdh_e.de.size = cpu_to_le16(SIZEOF_SDH_DIRENTRY);
2229 	sdh_e.de.key_size = cpu_to_le16(sizeof(sdh_e.key));
2230 	sdh_e.de.flags = 0;
2231 	sdh_e.de.res = 0;
2232 	sdh_e.key.hash = d_security->key.hash;
2233 	sdh_e.key.sec_id = d_security->key.sec_id;
2234 	memcpy(&sdh_e.sec_hdr, d_security, SIZEOF_SECURITY_HDR);
2235 	sdh_e.magic[0] = cpu_to_le16('I');
2236 	sdh_e.magic[1] = cpu_to_le16('I');
2237 
2238 	fnd_clear(fnd_sdh);
2239 	err = indx_insert_entry(indx_sdh, ni, &sdh_e.de, (void *)(size_t)1,
2240 				fnd_sdh, 0);
2241 	if (err)
2242 		goto out;
2243 
2244 	*security_id = d_security->key.sec_id;
2245 	if (inserted)
2246 		*inserted = true;
2247 
2248 	/* Update Id and offset for next descriptor. */
2249 	sbi->security.next_id += 1;
2250 	sbi->security.next_off += aligned_sec_size;
2251 
2252 out:
2253 	fnd_put(fnd_sdh);
2254 	mark_inode_dirty(&ni->vfs_inode);
2255 	ni_unlock(ni);
2256 	kfree(d_security);
2257 
2258 	return err;
2259 }
2260 
2261 /*
2262  * ntfs_reparse_init - Load and parse $Extend/$Reparse.
2263  */
2264 int ntfs_reparse_init(struct ntfs_sb_info *sbi)
2265 {
2266 	int err;
2267 	struct ntfs_inode *ni = sbi->reparse.ni;
2268 	struct ntfs_index *indx = &sbi->reparse.index_r;
2269 	struct ATTRIB *attr;
2270 	struct ATTR_LIST_ENTRY *le;
2271 	const struct INDEX_ROOT *root_r;
2272 
2273 	if (!ni)
2274 		return 0;
2275 
2276 	le = NULL;
2277 	attr = ni_find_attr(ni, NULL, &le, ATTR_ROOT, SR_NAME,
2278 			    ARRAY_SIZE(SR_NAME), NULL, NULL);
2279 	if (!attr) {
2280 		err = -EINVAL;
2281 		goto out;
2282 	}
2283 
2284 	root_r = resident_data(attr);
2285 	if (root_r->type != ATTR_ZERO ||
2286 	    root_r->rule != NTFS_COLLATION_TYPE_UINTS) {
2287 		err = -EINVAL;
2288 		goto out;
2289 	}
2290 
2291 	err = indx_init(indx, sbi, attr, INDEX_MUTEX_SR);
2292 	if (err)
2293 		goto out;
2294 
2295 out:
2296 	return err;
2297 }
2298 
2299 /*
2300  * ntfs_objid_init - Load and parse $Extend/$ObjId.
2301  */
2302 int ntfs_objid_init(struct ntfs_sb_info *sbi)
2303 {
2304 	int err;
2305 	struct ntfs_inode *ni = sbi->objid.ni;
2306 	struct ntfs_index *indx = &sbi->objid.index_o;
2307 	struct ATTRIB *attr;
2308 	struct ATTR_LIST_ENTRY *le;
2309 	const struct INDEX_ROOT *root;
2310 
2311 	if (!ni)
2312 		return 0;
2313 
2314 	le = NULL;
2315 	attr = ni_find_attr(ni, NULL, &le, ATTR_ROOT, SO_NAME,
2316 			    ARRAY_SIZE(SO_NAME), NULL, NULL);
2317 	if (!attr) {
2318 		err = -EINVAL;
2319 		goto out;
2320 	}
2321 
2322 	root = resident_data(attr);
2323 	if (root->type != ATTR_ZERO ||
2324 	    root->rule != NTFS_COLLATION_TYPE_UINTS) {
2325 		err = -EINVAL;
2326 		goto out;
2327 	}
2328 
2329 	err = indx_init(indx, sbi, attr, INDEX_MUTEX_SO);
2330 	if (err)
2331 		goto out;
2332 
2333 out:
2334 	return err;
2335 }
2336 
2337 int ntfs_objid_remove(struct ntfs_sb_info *sbi, struct GUID *guid)
2338 {
2339 	int err;
2340 	struct ntfs_inode *ni = sbi->objid.ni;
2341 	struct ntfs_index *indx = &sbi->objid.index_o;
2342 
2343 	if (!ni)
2344 		return -EINVAL;
2345 
2346 	mutex_lock_nested(&ni->ni_lock, NTFS_INODE_MUTEX_OBJID);
2347 
2348 	err = indx_delete_entry(indx, ni, guid, sizeof(*guid), NULL);
2349 
2350 	mark_inode_dirty(&ni->vfs_inode);
2351 	ni_unlock(ni);
2352 
2353 	return err;
2354 }
2355 
2356 int ntfs_insert_reparse(struct ntfs_sb_info *sbi, __le32 rtag,
2357 			const struct MFT_REF *ref)
2358 {
2359 	int err;
2360 	struct ntfs_inode *ni = sbi->reparse.ni;
2361 	struct ntfs_index *indx = &sbi->reparse.index_r;
2362 	struct NTFS_DE_R re;
2363 
2364 	if (!ni)
2365 		return -EINVAL;
2366 
2367 	memset(&re, 0, sizeof(re));
2368 
2369 	re.de.view.data_off = cpu_to_le16(offsetof(struct NTFS_DE_R, zero));
2370 	re.de.size = cpu_to_le16(sizeof(struct NTFS_DE_R));
2371 	re.de.key_size = cpu_to_le16(sizeof(re.key));
2372 
2373 	re.key.ReparseTag = rtag;
2374 	memcpy(&re.key.ref, ref, sizeof(*ref));
2375 
2376 	mutex_lock_nested(&ni->ni_lock, NTFS_INODE_MUTEX_REPARSE);
2377 
2378 	err = indx_insert_entry(indx, ni, &re.de, NULL, NULL, 0);
2379 
2380 	mark_inode_dirty(&ni->vfs_inode);
2381 	ni_unlock(ni);
2382 
2383 	return err;
2384 }
2385 
2386 int ntfs_remove_reparse(struct ntfs_sb_info *sbi, __le32 rtag,
2387 			const struct MFT_REF *ref)
2388 {
2389 	int err, diff;
2390 	struct ntfs_inode *ni = sbi->reparse.ni;
2391 	struct ntfs_index *indx = &sbi->reparse.index_r;
2392 	struct ntfs_fnd *fnd = NULL;
2393 	struct REPARSE_KEY rkey;
2394 	struct NTFS_DE_R *re;
2395 	struct INDEX_ROOT *root_r;
2396 
2397 	if (!ni)
2398 		return -EINVAL;
2399 
2400 	rkey.ReparseTag = rtag;
2401 	rkey.ref = *ref;
2402 
2403 	mutex_lock_nested(&ni->ni_lock, NTFS_INODE_MUTEX_REPARSE);
2404 
2405 	if (rtag) {
2406 		err = indx_delete_entry(indx, ni, &rkey, sizeof(rkey), NULL);
2407 		goto out1;
2408 	}
2409 
2410 	fnd = fnd_get();
2411 	if (!fnd) {
2412 		err = -ENOMEM;
2413 		goto out1;
2414 	}
2415 
2416 	root_r = indx_get_root(indx, ni, NULL, NULL);
2417 	if (!root_r) {
2418 		err = -EINVAL;
2419 		goto out;
2420 	}
2421 
2422 	/* 1 - forces to ignore rkey.ReparseTag when comparing keys. */
2423 	err = indx_find(indx, ni, root_r, &rkey, sizeof(rkey), (void *)1, &diff,
2424 			(struct NTFS_DE **)&re, fnd);
2425 	if (err)
2426 		goto out;
2427 
2428 	if (memcmp(&re->key.ref, ref, sizeof(*ref))) {
2429 		/* Impossible. Looks like volume corrupt? */
2430 		goto out;
2431 	}
2432 
2433 	memcpy(&rkey, &re->key, sizeof(rkey));
2434 
2435 	fnd_put(fnd);
2436 	fnd = NULL;
2437 
2438 	err = indx_delete_entry(indx, ni, &rkey, sizeof(rkey), NULL);
2439 	if (err)
2440 		goto out;
2441 
2442 out:
2443 	fnd_put(fnd);
2444 
2445 out1:
2446 	mark_inode_dirty(&ni->vfs_inode);
2447 	ni_unlock(ni);
2448 
2449 	return err;
2450 }
2451 
2452 static inline void ntfs_unmap_and_discard(struct ntfs_sb_info *sbi, CLST lcn,
2453 					  CLST len)
2454 {
2455 	ntfs_unmap_meta(sbi->sb, lcn, len);
2456 	ntfs_discard(sbi, lcn, len);
2457 }
2458 
2459 void mark_as_free_ex(struct ntfs_sb_info *sbi, CLST lcn, CLST len, bool trim)
2460 {
2461 	CLST end, i, zone_len, zlen;
2462 	struct wnd_bitmap *wnd = &sbi->used.bitmap;
2463 
2464 	down_write_nested(&wnd->rw_lock, BITMAP_MUTEX_CLUSTERS);
2465 	if (!wnd_is_used(wnd, lcn, len)) {
2466 		ntfs_set_state(sbi, NTFS_DIRTY_ERROR);
2467 
2468 		end = lcn + len;
2469 		len = 0;
2470 		for (i = lcn; i < end; i++) {
2471 			if (wnd_is_used(wnd, i, 1)) {
2472 				if (!len)
2473 					lcn = i;
2474 				len += 1;
2475 				continue;
2476 			}
2477 
2478 			if (!len)
2479 				continue;
2480 
2481 			if (trim)
2482 				ntfs_unmap_and_discard(sbi, lcn, len);
2483 
2484 			wnd_set_free(wnd, lcn, len);
2485 			len = 0;
2486 		}
2487 
2488 		if (!len)
2489 			goto out;
2490 	}
2491 
2492 	if (trim)
2493 		ntfs_unmap_and_discard(sbi, lcn, len);
2494 	wnd_set_free(wnd, lcn, len);
2495 
2496 	/* append to MFT zone, if possible. */
2497 	zone_len = wnd_zone_len(wnd);
2498 	zlen = min(zone_len + len, sbi->zone_max);
2499 
2500 	if (zlen == zone_len) {
2501 		/* MFT zone already has maximum size. */
2502 	} else if (!zone_len) {
2503 		/* Create MFT zone only if 'zlen' is large enough. */
2504 		if (zlen == sbi->zone_max)
2505 			wnd_zone_set(wnd, lcn, zlen);
2506 	} else {
2507 		CLST zone_lcn = wnd_zone_bit(wnd);
2508 
2509 		if (lcn + len == zone_lcn) {
2510 			/* Append into head MFT zone. */
2511 			wnd_zone_set(wnd, lcn, zlen);
2512 		} else if (zone_lcn + zone_len == lcn) {
2513 			/* Append into tail MFT zone. */
2514 			wnd_zone_set(wnd, zone_lcn, zlen);
2515 		}
2516 	}
2517 
2518 out:
2519 	up_write(&wnd->rw_lock);
2520 }
2521 
2522 /*
2523  * run_deallocate - Deallocate clusters.
2524  */
2525 int run_deallocate(struct ntfs_sb_info *sbi, struct runs_tree *run, bool trim)
2526 {
2527 	CLST lcn, len;
2528 	size_t idx = 0;
2529 
2530 	while (run_get_entry(run, idx++, NULL, &lcn, &len)) {
2531 		if (lcn == SPARSE_LCN)
2532 			continue;
2533 
2534 		mark_as_free_ex(sbi, lcn, len, trim);
2535 	}
2536 
2537 	return 0;
2538 }
2539 
2540 static inline bool name_has_forbidden_chars(const struct le_str *fname)
2541 {
2542 	int i, ch;
2543 
2544 	/* check for forbidden chars */
2545 	for (i = 0; i < fname->len; ++i) {
2546 		ch = le16_to_cpu(fname->name[i]);
2547 
2548 		/* control chars */
2549 		if (ch < 0x20)
2550 			return true;
2551 
2552 		switch (ch) {
2553 		/* disallowed by Windows */
2554 		case '\\':
2555 		case '/':
2556 		case ':':
2557 		case '*':
2558 		case '?':
2559 		case '<':
2560 		case '>':
2561 		case '|':
2562 		case '\"':
2563 			return true;
2564 
2565 		default:
2566 			/* allowed char */
2567 			break;
2568 		}
2569 	}
2570 
2571 	/* file names cannot end with space or . */
2572 	if (fname->len > 0) {
2573 		ch = le16_to_cpu(fname->name[fname->len - 1]);
2574 		if (ch == ' ' || ch == '.')
2575 			return true;
2576 	}
2577 
2578 	return false;
2579 }
2580 
2581 static inline bool is_reserved_name(struct ntfs_sb_info *sbi,
2582 				    const struct le_str *fname)
2583 {
2584 	int port_digit;
2585 	const __le16 *name = fname->name;
2586 	int len = fname->len;
2587 	u16 *upcase = sbi->upcase;
2588 
2589 	/* check for 3 chars reserved names (device names) */
2590 	/* name by itself or with any extension is forbidden */
2591 	if (len == 3 || (len > 3 && le16_to_cpu(name[3]) == '.'))
2592 		if (!ntfs_cmp_names(name, 3, CON_NAME, 3, upcase, false) ||
2593 		    !ntfs_cmp_names(name, 3, NUL_NAME, 3, upcase, false) ||
2594 		    !ntfs_cmp_names(name, 3, AUX_NAME, 3, upcase, false) ||
2595 		    !ntfs_cmp_names(name, 3, PRN_NAME, 3, upcase, false))
2596 			return true;
2597 
2598 	/* check for 4 chars reserved names (port name followed by 1..9) */
2599 	/* name by itself or with any extension is forbidden */
2600 	if (len == 4 || (len > 4 && le16_to_cpu(name[4]) == '.')) {
2601 		port_digit = le16_to_cpu(name[3]);
2602 		if (port_digit >= '1' && port_digit <= '9')
2603 			if (!ntfs_cmp_names(name, 3, COM_NAME, 3, upcase,
2604 					    false) ||
2605 			    !ntfs_cmp_names(name, 3, LPT_NAME, 3, upcase,
2606 					    false))
2607 				return true;
2608 	}
2609 
2610 	return false;
2611 }
2612 
2613 /*
2614  * valid_windows_name - Check if a file name is valid in Windows.
2615  */
2616 bool valid_windows_name(struct ntfs_sb_info *sbi, const struct le_str *fname)
2617 {
2618 	return !name_has_forbidden_chars(fname) &&
2619 	       !is_reserved_name(sbi, fname);
2620 }
2621