xref: /openbmc/linux/fs/ntfs3/fsntfs.c (revision a71ace35)
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.");
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 too big");
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_le(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_le(&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_le(*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_le(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;
850 	sector_t block1, block2;
851 	u32 bytes;
852 
853 	if (!sb)
854 		return;
855 
856 	blocksize = sb->s_blocksize;
857 
858 	if (!(sbi->flags & NTFS_FLAGS_MFTMIRR))
859 		return;
860 
861 	bytes = sbi->mft.recs_mirr << sbi->record_bits;
862 	block1 = sbi->mft.lbo >> sb->s_blocksize_bits;
863 	block2 = sbi->mft.lbo2 >> sb->s_blocksize_bits;
864 
865 	for (; bytes >= blocksize; bytes -= blocksize) {
866 		struct buffer_head *bh1, *bh2;
867 
868 		bh1 = sb_bread(sb, block1++);
869 		if (!bh1)
870 			return;
871 
872 		bh2 = sb_getblk(sb, block2++);
873 		if (!bh2) {
874 			put_bh(bh1);
875 			return;
876 		}
877 
878 		if (buffer_locked(bh2))
879 			__wait_on_buffer(bh2);
880 
881 		lock_buffer(bh2);
882 		memcpy(bh2->b_data, bh1->b_data, blocksize);
883 		set_buffer_uptodate(bh2);
884 		mark_buffer_dirty(bh2);
885 		unlock_buffer(bh2);
886 
887 		put_bh(bh1);
888 		bh1 = NULL;
889 
890 		err = wait ? sync_dirty_buffer(bh2) : 0;
891 
892 		put_bh(bh2);
893 		if (err)
894 			return;
895 	}
896 
897 	sbi->flags &= ~NTFS_FLAGS_MFTMIRR;
898 }
899 
900 /*
901  * ntfs_bad_inode
902  *
903  * Marks inode as bad and marks fs as 'dirty'
904  */
905 void ntfs_bad_inode(struct inode *inode, const char *hint)
906 {
907 	struct ntfs_sb_info *sbi = inode->i_sb->s_fs_info;
908 
909 	ntfs_inode_err(inode, "%s", hint);
910 	make_bad_inode(inode);
911 	ntfs_set_state(sbi, NTFS_DIRTY_ERROR);
912 }
913 
914 /*
915  * ntfs_set_state
916  *
917  * Mount: ntfs_set_state(NTFS_DIRTY_DIRTY)
918  * Umount: ntfs_set_state(NTFS_DIRTY_CLEAR)
919  * NTFS error: ntfs_set_state(NTFS_DIRTY_ERROR)
920  */
921 int ntfs_set_state(struct ntfs_sb_info *sbi, enum NTFS_DIRTY_FLAGS dirty)
922 {
923 	int err;
924 	struct ATTRIB *attr;
925 	struct VOLUME_INFO *info;
926 	struct mft_inode *mi;
927 	struct ntfs_inode *ni;
928 
929 	/*
930 	 * Do not change state if fs was real_dirty.
931 	 * Do not change state if fs already dirty(clear).
932 	 * Do not change any thing if mounted read only.
933 	 */
934 	if (sbi->volume.real_dirty || sb_rdonly(sbi->sb))
935 		return 0;
936 
937 	/* Check cached value. */
938 	if ((dirty == NTFS_DIRTY_CLEAR ? 0 : VOLUME_FLAG_DIRTY) ==
939 	    (sbi->volume.flags & VOLUME_FLAG_DIRTY))
940 		return 0;
941 
942 	ni = sbi->volume.ni;
943 	if (!ni)
944 		return -EINVAL;
945 
946 	mutex_lock_nested(&ni->ni_lock, NTFS_INODE_MUTEX_DIRTY);
947 
948 	attr = ni_find_attr(ni, NULL, NULL, ATTR_VOL_INFO, NULL, 0, NULL, &mi);
949 	if (!attr) {
950 		err = -EINVAL;
951 		goto out;
952 	}
953 
954 	info = resident_data_ex(attr, SIZEOF_ATTRIBUTE_VOLUME_INFO);
955 	if (!info) {
956 		err = -EINVAL;
957 		goto out;
958 	}
959 
960 	switch (dirty) {
961 	case NTFS_DIRTY_ERROR:
962 		ntfs_notice(sbi->sb, "Mark volume as dirty due to NTFS errors");
963 		sbi->volume.real_dirty = true;
964 		fallthrough;
965 	case NTFS_DIRTY_DIRTY:
966 		info->flags |= VOLUME_FLAG_DIRTY;
967 		break;
968 	case NTFS_DIRTY_CLEAR:
969 		info->flags &= ~VOLUME_FLAG_DIRTY;
970 		break;
971 	}
972 	/* Cache current volume flags. */
973 	sbi->volume.flags = info->flags;
974 	mi->dirty = true;
975 	err = 0;
976 
977 out:
978 	ni_unlock(ni);
979 	if (err)
980 		return err;
981 
982 	mark_inode_dirty(&ni->vfs_inode);
983 	/* verify(!ntfs_update_mftmirr()); */
984 
985 	/*
986 	 * If we used wait=1, sync_inode_metadata waits for the io for the
987 	 * inode to finish. It hangs when media is removed.
988 	 * So wait=0 is sent down to sync_inode_metadata
989 	 * and filemap_fdatawrite is used for the data blocks.
990 	 */
991 	err = sync_inode_metadata(&ni->vfs_inode, 0);
992 	if (!err)
993 		err = filemap_fdatawrite(ni->vfs_inode.i_mapping);
994 
995 	return err;
996 }
997 
998 /*
999  * security_hash - Calculates a hash of security descriptor.
1000  */
1001 static inline __le32 security_hash(const void *sd, size_t bytes)
1002 {
1003 	u32 hash = 0;
1004 	const __le32 *ptr = sd;
1005 
1006 	bytes >>= 2;
1007 	while (bytes--)
1008 		hash = ((hash >> 0x1D) | (hash << 3)) + le32_to_cpu(*ptr++);
1009 	return cpu_to_le32(hash);
1010 }
1011 
1012 int ntfs_sb_read(struct super_block *sb, u64 lbo, size_t bytes, void *buffer)
1013 {
1014 	struct block_device *bdev = sb->s_bdev;
1015 	u32 blocksize = sb->s_blocksize;
1016 	u64 block = lbo >> sb->s_blocksize_bits;
1017 	u32 off = lbo & (blocksize - 1);
1018 	u32 op = blocksize - off;
1019 
1020 	for (; bytes; block += 1, off = 0, op = blocksize) {
1021 		struct buffer_head *bh = __bread(bdev, block, blocksize);
1022 
1023 		if (!bh)
1024 			return -EIO;
1025 
1026 		if (op > bytes)
1027 			op = bytes;
1028 
1029 		memcpy(buffer, bh->b_data + off, op);
1030 
1031 		put_bh(bh);
1032 
1033 		bytes -= op;
1034 		buffer = Add2Ptr(buffer, op);
1035 	}
1036 
1037 	return 0;
1038 }
1039 
1040 int ntfs_sb_write(struct super_block *sb, u64 lbo, size_t bytes,
1041 		  const void *buf, int wait)
1042 {
1043 	u32 blocksize = sb->s_blocksize;
1044 	struct block_device *bdev = sb->s_bdev;
1045 	sector_t block = lbo >> sb->s_blocksize_bits;
1046 	u32 off = lbo & (blocksize - 1);
1047 	u32 op = blocksize - off;
1048 	struct buffer_head *bh;
1049 
1050 	if (!wait && (sb->s_flags & SB_SYNCHRONOUS))
1051 		wait = 1;
1052 
1053 	for (; bytes; block += 1, off = 0, op = blocksize) {
1054 		if (op > bytes)
1055 			op = bytes;
1056 
1057 		if (op < blocksize) {
1058 			bh = __bread(bdev, block, blocksize);
1059 			if (!bh) {
1060 				ntfs_err(sb, "failed to read block %llx",
1061 					 (u64)block);
1062 				return -EIO;
1063 			}
1064 		} else {
1065 			bh = __getblk(bdev, block, blocksize);
1066 			if (!bh)
1067 				return -ENOMEM;
1068 		}
1069 
1070 		if (buffer_locked(bh))
1071 			__wait_on_buffer(bh);
1072 
1073 		lock_buffer(bh);
1074 		if (buf) {
1075 			memcpy(bh->b_data + off, buf, op);
1076 			buf = Add2Ptr(buf, op);
1077 		} else {
1078 			memset(bh->b_data + off, -1, op);
1079 		}
1080 
1081 		set_buffer_uptodate(bh);
1082 		mark_buffer_dirty(bh);
1083 		unlock_buffer(bh);
1084 
1085 		if (wait) {
1086 			int err = sync_dirty_buffer(bh);
1087 
1088 			if (err) {
1089 				ntfs_err(
1090 					sb,
1091 					"failed to sync buffer at block %llx, error %d",
1092 					(u64)block, err);
1093 				put_bh(bh);
1094 				return err;
1095 			}
1096 		}
1097 
1098 		put_bh(bh);
1099 
1100 		bytes -= op;
1101 	}
1102 	return 0;
1103 }
1104 
1105 int ntfs_sb_write_run(struct ntfs_sb_info *sbi, const struct runs_tree *run,
1106 		      u64 vbo, const void *buf, size_t bytes, int sync)
1107 {
1108 	struct super_block *sb = sbi->sb;
1109 	u8 cluster_bits = sbi->cluster_bits;
1110 	u32 off = vbo & sbi->cluster_mask;
1111 	CLST lcn, clen, vcn = vbo >> cluster_bits, vcn_next;
1112 	u64 lbo, len;
1113 	size_t idx;
1114 
1115 	if (!run_lookup_entry(run, vcn, &lcn, &clen, &idx))
1116 		return -ENOENT;
1117 
1118 	if (lcn == SPARSE_LCN)
1119 		return -EINVAL;
1120 
1121 	lbo = ((u64)lcn << cluster_bits) + off;
1122 	len = ((u64)clen << cluster_bits) - off;
1123 
1124 	for (;;) {
1125 		u32 op = min_t(u64, len, bytes);
1126 		int err = ntfs_sb_write(sb, lbo, op, buf, sync);
1127 
1128 		if (err)
1129 			return err;
1130 
1131 		bytes -= op;
1132 		if (!bytes)
1133 			break;
1134 
1135 		vcn_next = vcn + clen;
1136 		if (!run_get_entry(run, ++idx, &vcn, &lcn, &clen) ||
1137 		    vcn != vcn_next)
1138 			return -ENOENT;
1139 
1140 		if (lcn == SPARSE_LCN)
1141 			return -EINVAL;
1142 
1143 		if (buf)
1144 			buf = Add2Ptr(buf, op);
1145 
1146 		lbo = ((u64)lcn << cluster_bits);
1147 		len = ((u64)clen << cluster_bits);
1148 	}
1149 
1150 	return 0;
1151 }
1152 
1153 struct buffer_head *ntfs_bread_run(struct ntfs_sb_info *sbi,
1154 				   const struct runs_tree *run, u64 vbo)
1155 {
1156 	struct super_block *sb = sbi->sb;
1157 	u8 cluster_bits = sbi->cluster_bits;
1158 	CLST lcn;
1159 	u64 lbo;
1160 
1161 	if (!run_lookup_entry(run, vbo >> cluster_bits, &lcn, NULL, NULL))
1162 		return ERR_PTR(-ENOENT);
1163 
1164 	lbo = ((u64)lcn << cluster_bits) + (vbo & sbi->cluster_mask);
1165 
1166 	return ntfs_bread(sb, lbo >> sb->s_blocksize_bits);
1167 }
1168 
1169 int ntfs_read_run_nb(struct ntfs_sb_info *sbi, const struct runs_tree *run,
1170 		     u64 vbo, void *buf, u32 bytes, struct ntfs_buffers *nb)
1171 {
1172 	int err;
1173 	struct super_block *sb = sbi->sb;
1174 	u32 blocksize = sb->s_blocksize;
1175 	u8 cluster_bits = sbi->cluster_bits;
1176 	u32 off = vbo & sbi->cluster_mask;
1177 	u32 nbh = 0;
1178 	CLST vcn_next, vcn = vbo >> cluster_bits;
1179 	CLST lcn, clen;
1180 	u64 lbo, len;
1181 	size_t idx;
1182 	struct buffer_head *bh;
1183 
1184 	if (!run) {
1185 		/* First reading of $Volume + $MFTMirr + $LogFile goes here. */
1186 		if (vbo > MFT_REC_VOL * sbi->record_size) {
1187 			err = -ENOENT;
1188 			goto out;
1189 		}
1190 
1191 		/* Use absolute boot's 'MFTCluster' to read record. */
1192 		lbo = vbo + sbi->mft.lbo;
1193 		len = sbi->record_size;
1194 	} else if (!run_lookup_entry(run, vcn, &lcn, &clen, &idx)) {
1195 		err = -ENOENT;
1196 		goto out;
1197 	} else {
1198 		if (lcn == SPARSE_LCN) {
1199 			err = -EINVAL;
1200 			goto out;
1201 		}
1202 
1203 		lbo = ((u64)lcn << cluster_bits) + off;
1204 		len = ((u64)clen << cluster_bits) - off;
1205 	}
1206 
1207 	off = lbo & (blocksize - 1);
1208 	if (nb) {
1209 		nb->off = off;
1210 		nb->bytes = bytes;
1211 	}
1212 
1213 	for (;;) {
1214 		u32 len32 = len >= bytes ? bytes : len;
1215 		sector_t block = lbo >> sb->s_blocksize_bits;
1216 
1217 		do {
1218 			u32 op = blocksize - off;
1219 
1220 			if (op > len32)
1221 				op = len32;
1222 
1223 			bh = ntfs_bread(sb, block);
1224 			if (!bh) {
1225 				err = -EIO;
1226 				goto out;
1227 			}
1228 
1229 			if (buf) {
1230 				memcpy(buf, bh->b_data + off, op);
1231 				buf = Add2Ptr(buf, op);
1232 			}
1233 
1234 			if (!nb) {
1235 				put_bh(bh);
1236 			} else if (nbh >= ARRAY_SIZE(nb->bh)) {
1237 				err = -EINVAL;
1238 				goto out;
1239 			} else {
1240 				nb->bh[nbh++] = bh;
1241 				nb->nbufs = nbh;
1242 			}
1243 
1244 			bytes -= op;
1245 			if (!bytes)
1246 				return 0;
1247 			len32 -= op;
1248 			block += 1;
1249 			off = 0;
1250 
1251 		} while (len32);
1252 
1253 		vcn_next = vcn + clen;
1254 		if (!run_get_entry(run, ++idx, &vcn, &lcn, &clen) ||
1255 		    vcn != vcn_next) {
1256 			err = -ENOENT;
1257 			goto out;
1258 		}
1259 
1260 		if (lcn == SPARSE_LCN) {
1261 			err = -EINVAL;
1262 			goto out;
1263 		}
1264 
1265 		lbo = ((u64)lcn << cluster_bits);
1266 		len = ((u64)clen << cluster_bits);
1267 	}
1268 
1269 out:
1270 	if (!nbh)
1271 		return err;
1272 
1273 	while (nbh) {
1274 		put_bh(nb->bh[--nbh]);
1275 		nb->bh[nbh] = NULL;
1276 	}
1277 
1278 	nb->nbufs = 0;
1279 	return err;
1280 }
1281 
1282 /*
1283  * ntfs_read_bh
1284  *
1285  * Return: < 0 if error, 0 if ok, -E_NTFS_FIXUP if need to update fixups.
1286  */
1287 int ntfs_read_bh(struct ntfs_sb_info *sbi, const struct runs_tree *run, u64 vbo,
1288 		 struct NTFS_RECORD_HEADER *rhdr, u32 bytes,
1289 		 struct ntfs_buffers *nb)
1290 {
1291 	int err = ntfs_read_run_nb(sbi, run, vbo, rhdr, bytes, nb);
1292 
1293 	if (err)
1294 		return err;
1295 	return ntfs_fix_post_read(rhdr, nb->bytes, true);
1296 }
1297 
1298 int ntfs_get_bh(struct ntfs_sb_info *sbi, const struct runs_tree *run, u64 vbo,
1299 		u32 bytes, struct ntfs_buffers *nb)
1300 {
1301 	int err = 0;
1302 	struct super_block *sb = sbi->sb;
1303 	u32 blocksize = sb->s_blocksize;
1304 	u8 cluster_bits = sbi->cluster_bits;
1305 	CLST vcn_next, vcn = vbo >> cluster_bits;
1306 	u32 off;
1307 	u32 nbh = 0;
1308 	CLST lcn, clen;
1309 	u64 lbo, len;
1310 	size_t idx;
1311 
1312 	nb->bytes = bytes;
1313 
1314 	if (!run_lookup_entry(run, vcn, &lcn, &clen, &idx)) {
1315 		err = -ENOENT;
1316 		goto out;
1317 	}
1318 
1319 	off = vbo & sbi->cluster_mask;
1320 	lbo = ((u64)lcn << cluster_bits) + off;
1321 	len = ((u64)clen << cluster_bits) - off;
1322 
1323 	nb->off = off = lbo & (blocksize - 1);
1324 
1325 	for (;;) {
1326 		u32 len32 = min_t(u64, len, bytes);
1327 		sector_t block = lbo >> sb->s_blocksize_bits;
1328 
1329 		do {
1330 			u32 op;
1331 			struct buffer_head *bh;
1332 
1333 			if (nbh >= ARRAY_SIZE(nb->bh)) {
1334 				err = -EINVAL;
1335 				goto out;
1336 			}
1337 
1338 			op = blocksize - off;
1339 			if (op > len32)
1340 				op = len32;
1341 
1342 			if (op == blocksize) {
1343 				bh = sb_getblk(sb, block);
1344 				if (!bh) {
1345 					err = -ENOMEM;
1346 					goto out;
1347 				}
1348 				if (buffer_locked(bh))
1349 					__wait_on_buffer(bh);
1350 				set_buffer_uptodate(bh);
1351 			} else {
1352 				bh = ntfs_bread(sb, block);
1353 				if (!bh) {
1354 					err = -EIO;
1355 					goto out;
1356 				}
1357 			}
1358 
1359 			nb->bh[nbh++] = bh;
1360 			bytes -= op;
1361 			if (!bytes) {
1362 				nb->nbufs = nbh;
1363 				return 0;
1364 			}
1365 
1366 			block += 1;
1367 			len32 -= op;
1368 			off = 0;
1369 		} while (len32);
1370 
1371 		vcn_next = vcn + clen;
1372 		if (!run_get_entry(run, ++idx, &vcn, &lcn, &clen) ||
1373 		    vcn != vcn_next) {
1374 			err = -ENOENT;
1375 			goto out;
1376 		}
1377 
1378 		lbo = ((u64)lcn << cluster_bits);
1379 		len = ((u64)clen << cluster_bits);
1380 	}
1381 
1382 out:
1383 	while (nbh) {
1384 		put_bh(nb->bh[--nbh]);
1385 		nb->bh[nbh] = NULL;
1386 	}
1387 
1388 	nb->nbufs = 0;
1389 
1390 	return err;
1391 }
1392 
1393 int ntfs_write_bh(struct ntfs_sb_info *sbi, struct NTFS_RECORD_HEADER *rhdr,
1394 		  struct ntfs_buffers *nb, int sync)
1395 {
1396 	int err = 0;
1397 	struct super_block *sb = sbi->sb;
1398 	u32 block_size = sb->s_blocksize;
1399 	u32 bytes = nb->bytes;
1400 	u32 off = nb->off;
1401 	u16 fo = le16_to_cpu(rhdr->fix_off);
1402 	u16 fn = le16_to_cpu(rhdr->fix_num);
1403 	u32 idx;
1404 	__le16 *fixup;
1405 	__le16 sample;
1406 
1407 	if ((fo & 1) || fo + fn * sizeof(short) > SECTOR_SIZE || !fn-- ||
1408 	    fn * SECTOR_SIZE > bytes) {
1409 		return -EINVAL;
1410 	}
1411 
1412 	for (idx = 0; bytes && idx < nb->nbufs; idx += 1, off = 0) {
1413 		u32 op = block_size - off;
1414 		char *bh_data;
1415 		struct buffer_head *bh = nb->bh[idx];
1416 		__le16 *ptr, *end_data;
1417 
1418 		if (op > bytes)
1419 			op = bytes;
1420 
1421 		if (buffer_locked(bh))
1422 			__wait_on_buffer(bh);
1423 
1424 		lock_buffer(bh);
1425 
1426 		bh_data = bh->b_data + off;
1427 		end_data = Add2Ptr(bh_data, op);
1428 		memcpy(bh_data, rhdr, op);
1429 
1430 		if (!idx) {
1431 			u16 t16;
1432 
1433 			fixup = Add2Ptr(bh_data, fo);
1434 			sample = *fixup;
1435 			t16 = le16_to_cpu(sample);
1436 			if (t16 >= 0x7FFF) {
1437 				sample = *fixup = cpu_to_le16(1);
1438 			} else {
1439 				sample = cpu_to_le16(t16 + 1);
1440 				*fixup = sample;
1441 			}
1442 
1443 			*(__le16 *)Add2Ptr(rhdr, fo) = sample;
1444 		}
1445 
1446 		ptr = Add2Ptr(bh_data, SECTOR_SIZE - sizeof(short));
1447 
1448 		do {
1449 			*++fixup = *ptr;
1450 			*ptr = sample;
1451 			ptr += SECTOR_SIZE / sizeof(short);
1452 		} while (ptr < end_data);
1453 
1454 		set_buffer_uptodate(bh);
1455 		mark_buffer_dirty(bh);
1456 		unlock_buffer(bh);
1457 
1458 		if (sync) {
1459 			int err2 = sync_dirty_buffer(bh);
1460 
1461 			if (!err && err2)
1462 				err = err2;
1463 		}
1464 
1465 		bytes -= op;
1466 		rhdr = Add2Ptr(rhdr, op);
1467 	}
1468 
1469 	return err;
1470 }
1471 
1472 /*
1473  * ntfs_bio_pages - Read/write pages from/to disk.
1474  */
1475 int ntfs_bio_pages(struct ntfs_sb_info *sbi, const struct runs_tree *run,
1476 		   struct page **pages, u32 nr_pages, u64 vbo, u32 bytes,
1477 		   enum req_op op)
1478 {
1479 	int err = 0;
1480 	struct bio *new, *bio = NULL;
1481 	struct super_block *sb = sbi->sb;
1482 	struct block_device *bdev = sb->s_bdev;
1483 	struct page *page;
1484 	u8 cluster_bits = sbi->cluster_bits;
1485 	CLST lcn, clen, vcn, vcn_next;
1486 	u32 add, off, page_idx;
1487 	u64 lbo, len;
1488 	size_t run_idx;
1489 	struct blk_plug plug;
1490 
1491 	if (!bytes)
1492 		return 0;
1493 
1494 	blk_start_plug(&plug);
1495 
1496 	/* Align vbo and bytes to be 512 bytes aligned. */
1497 	lbo = (vbo + bytes + 511) & ~511ull;
1498 	vbo = vbo & ~511ull;
1499 	bytes = lbo - vbo;
1500 
1501 	vcn = vbo >> cluster_bits;
1502 	if (!run_lookup_entry(run, vcn, &lcn, &clen, &run_idx)) {
1503 		err = -ENOENT;
1504 		goto out;
1505 	}
1506 	off = vbo & sbi->cluster_mask;
1507 	page_idx = 0;
1508 	page = pages[0];
1509 
1510 	for (;;) {
1511 		lbo = ((u64)lcn << cluster_bits) + off;
1512 		len = ((u64)clen << cluster_bits) - off;
1513 new_bio:
1514 		new = bio_alloc(bdev, nr_pages - page_idx, op, GFP_NOFS);
1515 		if (bio) {
1516 			bio_chain(bio, new);
1517 			submit_bio(bio);
1518 		}
1519 		bio = new;
1520 		bio->bi_iter.bi_sector = lbo >> 9;
1521 
1522 		while (len) {
1523 			off = vbo & (PAGE_SIZE - 1);
1524 			add = off + len > PAGE_SIZE ? (PAGE_SIZE - off) : len;
1525 
1526 			if (bio_add_page(bio, page, add, off) < add)
1527 				goto new_bio;
1528 
1529 			if (bytes <= add)
1530 				goto out;
1531 			bytes -= add;
1532 			vbo += add;
1533 
1534 			if (add + off == PAGE_SIZE) {
1535 				page_idx += 1;
1536 				if (WARN_ON(page_idx >= nr_pages)) {
1537 					err = -EINVAL;
1538 					goto out;
1539 				}
1540 				page = pages[page_idx];
1541 			}
1542 
1543 			if (len <= add)
1544 				break;
1545 			len -= add;
1546 			lbo += add;
1547 		}
1548 
1549 		vcn_next = vcn + clen;
1550 		if (!run_get_entry(run, ++run_idx, &vcn, &lcn, &clen) ||
1551 		    vcn != vcn_next) {
1552 			err = -ENOENT;
1553 			goto out;
1554 		}
1555 		off = 0;
1556 	}
1557 out:
1558 	if (bio) {
1559 		if (!err)
1560 			err = submit_bio_wait(bio);
1561 		bio_put(bio);
1562 	}
1563 	blk_finish_plug(&plug);
1564 
1565 	return err;
1566 }
1567 
1568 /*
1569  * ntfs_bio_fill_1 - Helper for ntfs_loadlog_and_replay().
1570  *
1571  * Fill on-disk logfile range by (-1)
1572  * this means empty logfile.
1573  */
1574 int ntfs_bio_fill_1(struct ntfs_sb_info *sbi, const struct runs_tree *run)
1575 {
1576 	int err = 0;
1577 	struct super_block *sb = sbi->sb;
1578 	struct block_device *bdev = sb->s_bdev;
1579 	u8 cluster_bits = sbi->cluster_bits;
1580 	struct bio *new, *bio = NULL;
1581 	CLST lcn, clen;
1582 	u64 lbo, len;
1583 	size_t run_idx;
1584 	struct page *fill;
1585 	void *kaddr;
1586 	struct blk_plug plug;
1587 
1588 	fill = alloc_page(GFP_KERNEL);
1589 	if (!fill)
1590 		return -ENOMEM;
1591 
1592 	kaddr = kmap_atomic(fill);
1593 	memset(kaddr, -1, PAGE_SIZE);
1594 	kunmap_atomic(kaddr);
1595 	flush_dcache_page(fill);
1596 	lock_page(fill);
1597 
1598 	if (!run_lookup_entry(run, 0, &lcn, &clen, &run_idx)) {
1599 		err = -ENOENT;
1600 		goto out;
1601 	}
1602 
1603 	/*
1604 	 * TODO: Try blkdev_issue_write_same.
1605 	 */
1606 	blk_start_plug(&plug);
1607 	do {
1608 		lbo = (u64)lcn << cluster_bits;
1609 		len = (u64)clen << cluster_bits;
1610 new_bio:
1611 		new = bio_alloc(bdev, BIO_MAX_VECS, REQ_OP_WRITE, GFP_NOFS);
1612 		if (bio) {
1613 			bio_chain(bio, new);
1614 			submit_bio(bio);
1615 		}
1616 		bio = new;
1617 		bio->bi_iter.bi_sector = lbo >> 9;
1618 
1619 		for (;;) {
1620 			u32 add = len > PAGE_SIZE ? PAGE_SIZE : len;
1621 
1622 			if (bio_add_page(bio, fill, add, 0) < add)
1623 				goto new_bio;
1624 
1625 			lbo += add;
1626 			if (len <= add)
1627 				break;
1628 			len -= add;
1629 		}
1630 	} while (run_get_entry(run, ++run_idx, NULL, &lcn, &clen));
1631 
1632 	if (!err)
1633 		err = submit_bio_wait(bio);
1634 	bio_put(bio);
1635 
1636 	blk_finish_plug(&plug);
1637 out:
1638 	unlock_page(fill);
1639 	put_page(fill);
1640 
1641 	return err;
1642 }
1643 
1644 int ntfs_vbo_to_lbo(struct ntfs_sb_info *sbi, const struct runs_tree *run,
1645 		    u64 vbo, u64 *lbo, u64 *bytes)
1646 {
1647 	u32 off;
1648 	CLST lcn, len;
1649 	u8 cluster_bits = sbi->cluster_bits;
1650 
1651 	if (!run_lookup_entry(run, vbo >> cluster_bits, &lcn, &len, NULL))
1652 		return -ENOENT;
1653 
1654 	off = vbo & sbi->cluster_mask;
1655 	*lbo = lcn == SPARSE_LCN ? -1 : (((u64)lcn << cluster_bits) + off);
1656 	*bytes = ((u64)len << cluster_bits) - off;
1657 
1658 	return 0;
1659 }
1660 
1661 struct ntfs_inode *ntfs_new_inode(struct ntfs_sb_info *sbi, CLST rno, bool dir)
1662 {
1663 	int err = 0;
1664 	struct super_block *sb = sbi->sb;
1665 	struct inode *inode = new_inode(sb);
1666 	struct ntfs_inode *ni;
1667 
1668 	if (!inode)
1669 		return ERR_PTR(-ENOMEM);
1670 
1671 	ni = ntfs_i(inode);
1672 
1673 	err = mi_format_new(&ni->mi, sbi, rno, dir ? RECORD_FLAG_DIR : 0,
1674 			    false);
1675 	if (err)
1676 		goto out;
1677 
1678 	inode->i_ino = rno;
1679 	if (insert_inode_locked(inode) < 0) {
1680 		err = -EIO;
1681 		goto out;
1682 	}
1683 
1684 out:
1685 	if (err) {
1686 		iput(inode);
1687 		ni = ERR_PTR(err);
1688 	}
1689 	return ni;
1690 }
1691 
1692 /*
1693  * O:BAG:BAD:(A;OICI;FA;;;WD)
1694  * Owner S-1-5-32-544 (Administrators)
1695  * Group S-1-5-32-544 (Administrators)
1696  * ACE: allow S-1-1-0 (Everyone) with FILE_ALL_ACCESS
1697  */
1698 const u8 s_default_security[] __aligned(8) = {
1699 	0x01, 0x00, 0x04, 0x80, 0x30, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
1700 	0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1C, 0x00,
1701 	0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x14, 0x00, 0xFF, 0x01, 0x1F, 0x00,
1702 	0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
1703 	0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00,
1704 	0x20, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
1705 	0x20, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00,
1706 };
1707 
1708 static_assert(sizeof(s_default_security) == 0x50);
1709 
1710 static inline u32 sid_length(const struct SID *sid)
1711 {
1712 	return struct_size(sid, SubAuthority, sid->SubAuthorityCount);
1713 }
1714 
1715 /*
1716  * is_acl_valid
1717  *
1718  * Thanks Mark Harmstone for idea.
1719  */
1720 static bool is_acl_valid(const struct ACL *acl, u32 len)
1721 {
1722 	const struct ACE_HEADER *ace;
1723 	u32 i;
1724 	u16 ace_count, ace_size;
1725 
1726 	if (acl->AclRevision != ACL_REVISION &&
1727 	    acl->AclRevision != ACL_REVISION_DS) {
1728 		/*
1729 		 * This value should be ACL_REVISION, unless the ACL contains an
1730 		 * object-specific ACE, in which case this value must be ACL_REVISION_DS.
1731 		 * All ACEs in an ACL must be at the same revision level.
1732 		 */
1733 		return false;
1734 	}
1735 
1736 	if (acl->Sbz1)
1737 		return false;
1738 
1739 	if (le16_to_cpu(acl->AclSize) > len)
1740 		return false;
1741 
1742 	if (acl->Sbz2)
1743 		return false;
1744 
1745 	len -= sizeof(struct ACL);
1746 	ace = (struct ACE_HEADER *)&acl[1];
1747 	ace_count = le16_to_cpu(acl->AceCount);
1748 
1749 	for (i = 0; i < ace_count; i++) {
1750 		if (len < sizeof(struct ACE_HEADER))
1751 			return false;
1752 
1753 		ace_size = le16_to_cpu(ace->AceSize);
1754 		if (len < ace_size)
1755 			return false;
1756 
1757 		len -= ace_size;
1758 		ace = Add2Ptr(ace, ace_size);
1759 	}
1760 
1761 	return true;
1762 }
1763 
1764 bool is_sd_valid(const struct SECURITY_DESCRIPTOR_RELATIVE *sd, u32 len)
1765 {
1766 	u32 sd_owner, sd_group, sd_sacl, sd_dacl;
1767 
1768 	if (len < sizeof(struct SECURITY_DESCRIPTOR_RELATIVE))
1769 		return false;
1770 
1771 	if (sd->Revision != 1)
1772 		return false;
1773 
1774 	if (sd->Sbz1)
1775 		return false;
1776 
1777 	if (!(sd->Control & SE_SELF_RELATIVE))
1778 		return false;
1779 
1780 	sd_owner = le32_to_cpu(sd->Owner);
1781 	if (sd_owner) {
1782 		const struct SID *owner = Add2Ptr(sd, sd_owner);
1783 
1784 		if (sd_owner + offsetof(struct SID, SubAuthority) > len)
1785 			return false;
1786 
1787 		if (owner->Revision != 1)
1788 			return false;
1789 
1790 		if (sd_owner + sid_length(owner) > len)
1791 			return false;
1792 	}
1793 
1794 	sd_group = le32_to_cpu(sd->Group);
1795 	if (sd_group) {
1796 		const struct SID *group = Add2Ptr(sd, sd_group);
1797 
1798 		if (sd_group + offsetof(struct SID, SubAuthority) > len)
1799 			return false;
1800 
1801 		if (group->Revision != 1)
1802 			return false;
1803 
1804 		if (sd_group + sid_length(group) > len)
1805 			return false;
1806 	}
1807 
1808 	sd_sacl = le32_to_cpu(sd->Sacl);
1809 	if (sd_sacl) {
1810 		const struct ACL *sacl = Add2Ptr(sd, sd_sacl);
1811 
1812 		if (sd_sacl + sizeof(struct ACL) > len)
1813 			return false;
1814 
1815 		if (!is_acl_valid(sacl, len - sd_sacl))
1816 			return false;
1817 	}
1818 
1819 	sd_dacl = le32_to_cpu(sd->Dacl);
1820 	if (sd_dacl) {
1821 		const struct ACL *dacl = Add2Ptr(sd, sd_dacl);
1822 
1823 		if (sd_dacl + sizeof(struct ACL) > len)
1824 			return false;
1825 
1826 		if (!is_acl_valid(dacl, len - sd_dacl))
1827 			return false;
1828 	}
1829 
1830 	return true;
1831 }
1832 
1833 /*
1834  * ntfs_security_init - Load and parse $Secure.
1835  */
1836 int ntfs_security_init(struct ntfs_sb_info *sbi)
1837 {
1838 	int err;
1839 	struct super_block *sb = sbi->sb;
1840 	struct inode *inode;
1841 	struct ntfs_inode *ni;
1842 	struct MFT_REF ref;
1843 	struct ATTRIB *attr;
1844 	struct ATTR_LIST_ENTRY *le;
1845 	u64 sds_size;
1846 	size_t off;
1847 	struct NTFS_DE *ne;
1848 	struct NTFS_DE_SII *sii_e;
1849 	struct ntfs_fnd *fnd_sii = NULL;
1850 	const struct INDEX_ROOT *root_sii;
1851 	const struct INDEX_ROOT *root_sdh;
1852 	struct ntfs_index *indx_sdh = &sbi->security.index_sdh;
1853 	struct ntfs_index *indx_sii = &sbi->security.index_sii;
1854 
1855 	ref.low = cpu_to_le32(MFT_REC_SECURE);
1856 	ref.high = 0;
1857 	ref.seq = cpu_to_le16(MFT_REC_SECURE);
1858 
1859 	inode = ntfs_iget5(sb, &ref, &NAME_SECURE);
1860 	if (IS_ERR(inode)) {
1861 		err = PTR_ERR(inode);
1862 		ntfs_err(sb, "Failed to load $Secure.");
1863 		inode = NULL;
1864 		goto out;
1865 	}
1866 
1867 	ni = ntfs_i(inode);
1868 
1869 	le = NULL;
1870 
1871 	attr = ni_find_attr(ni, NULL, &le, ATTR_ROOT, SDH_NAME,
1872 			    ARRAY_SIZE(SDH_NAME), NULL, NULL);
1873 	if (!attr) {
1874 		err = -EINVAL;
1875 		goto out;
1876 	}
1877 
1878 	root_sdh = resident_data_ex(attr, sizeof(struct INDEX_ROOT));
1879 	if (root_sdh->type != ATTR_ZERO ||
1880 	    root_sdh->rule != NTFS_COLLATION_TYPE_SECURITY_HASH ||
1881 	    offsetof(struct INDEX_ROOT, ihdr) + root_sdh->ihdr.used > attr->res.data_size) {
1882 		err = -EINVAL;
1883 		goto out;
1884 	}
1885 
1886 	err = indx_init(indx_sdh, sbi, attr, INDEX_MUTEX_SDH);
1887 	if (err)
1888 		goto out;
1889 
1890 	attr = ni_find_attr(ni, attr, &le, ATTR_ROOT, SII_NAME,
1891 			    ARRAY_SIZE(SII_NAME), NULL, NULL);
1892 	if (!attr) {
1893 		err = -EINVAL;
1894 		goto out;
1895 	}
1896 
1897 	root_sii = resident_data_ex(attr, sizeof(struct INDEX_ROOT));
1898 	if (root_sii->type != ATTR_ZERO ||
1899 	    root_sii->rule != NTFS_COLLATION_TYPE_UINT ||
1900 	    offsetof(struct INDEX_ROOT, ihdr) + root_sii->ihdr.used > attr->res.data_size) {
1901 		err = -EINVAL;
1902 		goto out;
1903 	}
1904 
1905 	err = indx_init(indx_sii, sbi, attr, INDEX_MUTEX_SII);
1906 	if (err)
1907 		goto out;
1908 
1909 	fnd_sii = fnd_get();
1910 	if (!fnd_sii) {
1911 		err = -ENOMEM;
1912 		goto out;
1913 	}
1914 
1915 	sds_size = inode->i_size;
1916 
1917 	/* Find the last valid Id. */
1918 	sbi->security.next_id = SECURITY_ID_FIRST;
1919 	/* Always write new security at the end of bucket. */
1920 	sbi->security.next_off =
1921 		ALIGN(sds_size - SecurityDescriptorsBlockSize, 16);
1922 
1923 	off = 0;
1924 	ne = NULL;
1925 
1926 	for (;;) {
1927 		u32 next_id;
1928 
1929 		err = indx_find_raw(indx_sii, ni, root_sii, &ne, &off, fnd_sii);
1930 		if (err || !ne)
1931 			break;
1932 
1933 		sii_e = (struct NTFS_DE_SII *)ne;
1934 		if (le16_to_cpu(ne->view.data_size) < SIZEOF_SECURITY_HDR)
1935 			continue;
1936 
1937 		next_id = le32_to_cpu(sii_e->sec_id) + 1;
1938 		if (next_id >= sbi->security.next_id)
1939 			sbi->security.next_id = next_id;
1940 	}
1941 
1942 	sbi->security.ni = ni;
1943 	inode = NULL;
1944 out:
1945 	iput(inode);
1946 	fnd_put(fnd_sii);
1947 
1948 	return err;
1949 }
1950 
1951 /*
1952  * ntfs_get_security_by_id - Read security descriptor by id.
1953  */
1954 int ntfs_get_security_by_id(struct ntfs_sb_info *sbi, __le32 security_id,
1955 			    struct SECURITY_DESCRIPTOR_RELATIVE **sd,
1956 			    size_t *size)
1957 {
1958 	int err;
1959 	int diff;
1960 	struct ntfs_inode *ni = sbi->security.ni;
1961 	struct ntfs_index *indx = &sbi->security.index_sii;
1962 	void *p = NULL;
1963 	struct NTFS_DE_SII *sii_e;
1964 	struct ntfs_fnd *fnd_sii;
1965 	struct SECURITY_HDR d_security;
1966 	const struct INDEX_ROOT *root_sii;
1967 	u32 t32;
1968 
1969 	*sd = NULL;
1970 
1971 	mutex_lock_nested(&ni->ni_lock, NTFS_INODE_MUTEX_SECURITY);
1972 
1973 	fnd_sii = fnd_get();
1974 	if (!fnd_sii) {
1975 		err = -ENOMEM;
1976 		goto out;
1977 	}
1978 
1979 	root_sii = indx_get_root(indx, ni, NULL, NULL);
1980 	if (!root_sii) {
1981 		err = -EINVAL;
1982 		goto out;
1983 	}
1984 
1985 	/* Try to find this SECURITY descriptor in SII indexes. */
1986 	err = indx_find(indx, ni, root_sii, &security_id, sizeof(security_id),
1987 			NULL, &diff, (struct NTFS_DE **)&sii_e, fnd_sii);
1988 	if (err)
1989 		goto out;
1990 
1991 	if (diff)
1992 		goto out;
1993 
1994 	t32 = le32_to_cpu(sii_e->sec_hdr.size);
1995 	if (t32 < SIZEOF_SECURITY_HDR) {
1996 		err = -EINVAL;
1997 		goto out;
1998 	}
1999 
2000 	if (t32 > SIZEOF_SECURITY_HDR + 0x10000) {
2001 		/* Looks like too big security. 0x10000 - is arbitrary big number. */
2002 		err = -EFBIG;
2003 		goto out;
2004 	}
2005 
2006 	*size = t32 - SIZEOF_SECURITY_HDR;
2007 
2008 	p = kmalloc(*size, GFP_NOFS);
2009 	if (!p) {
2010 		err = -ENOMEM;
2011 		goto out;
2012 	}
2013 
2014 	err = ntfs_read_run_nb(sbi, &ni->file.run,
2015 			       le64_to_cpu(sii_e->sec_hdr.off), &d_security,
2016 			       sizeof(d_security), NULL);
2017 	if (err)
2018 		goto out;
2019 
2020 	if (memcmp(&d_security, &sii_e->sec_hdr, SIZEOF_SECURITY_HDR)) {
2021 		err = -EINVAL;
2022 		goto out;
2023 	}
2024 
2025 	err = ntfs_read_run_nb(sbi, &ni->file.run,
2026 			       le64_to_cpu(sii_e->sec_hdr.off) +
2027 				       SIZEOF_SECURITY_HDR,
2028 			       p, *size, NULL);
2029 	if (err)
2030 		goto out;
2031 
2032 	*sd = p;
2033 	p = NULL;
2034 
2035 out:
2036 	kfree(p);
2037 	fnd_put(fnd_sii);
2038 	ni_unlock(ni);
2039 
2040 	return err;
2041 }
2042 
2043 /*
2044  * ntfs_insert_security - Insert security descriptor into $Secure::SDS.
2045  *
2046  * SECURITY Descriptor Stream data is organized into chunks of 256K bytes
2047  * and it contains a mirror copy of each security descriptor.  When writing
2048  * to a security descriptor at location X, another copy will be written at
2049  * location (X+256K).
2050  * When writing a security descriptor that will cross the 256K boundary,
2051  * the pointer will be advanced by 256K to skip
2052  * over the mirror portion.
2053  */
2054 int ntfs_insert_security(struct ntfs_sb_info *sbi,
2055 			 const struct SECURITY_DESCRIPTOR_RELATIVE *sd,
2056 			 u32 size_sd, __le32 *security_id, bool *inserted)
2057 {
2058 	int err, diff;
2059 	struct ntfs_inode *ni = sbi->security.ni;
2060 	struct ntfs_index *indx_sdh = &sbi->security.index_sdh;
2061 	struct ntfs_index *indx_sii = &sbi->security.index_sii;
2062 	struct NTFS_DE_SDH *e;
2063 	struct NTFS_DE_SDH sdh_e;
2064 	struct NTFS_DE_SII sii_e;
2065 	struct SECURITY_HDR *d_security;
2066 	u32 new_sec_size = size_sd + SIZEOF_SECURITY_HDR;
2067 	u32 aligned_sec_size = ALIGN(new_sec_size, 16);
2068 	struct SECURITY_KEY hash_key;
2069 	struct ntfs_fnd *fnd_sdh = NULL;
2070 	const struct INDEX_ROOT *root_sdh;
2071 	const struct INDEX_ROOT *root_sii;
2072 	u64 mirr_off, new_sds_size;
2073 	u32 next, left;
2074 
2075 	static_assert((1 << Log2OfSecurityDescriptorsBlockSize) ==
2076 		      SecurityDescriptorsBlockSize);
2077 
2078 	hash_key.hash = security_hash(sd, size_sd);
2079 	hash_key.sec_id = SECURITY_ID_INVALID;
2080 
2081 	if (inserted)
2082 		*inserted = false;
2083 	*security_id = SECURITY_ID_INVALID;
2084 
2085 	/* Allocate a temporal buffer. */
2086 	d_security = kzalloc(aligned_sec_size, GFP_NOFS);
2087 	if (!d_security)
2088 		return -ENOMEM;
2089 
2090 	mutex_lock_nested(&ni->ni_lock, NTFS_INODE_MUTEX_SECURITY);
2091 
2092 	fnd_sdh = fnd_get();
2093 	if (!fnd_sdh) {
2094 		err = -ENOMEM;
2095 		goto out;
2096 	}
2097 
2098 	root_sdh = indx_get_root(indx_sdh, ni, NULL, NULL);
2099 	if (!root_sdh) {
2100 		err = -EINVAL;
2101 		goto out;
2102 	}
2103 
2104 	root_sii = indx_get_root(indx_sii, ni, NULL, NULL);
2105 	if (!root_sii) {
2106 		err = -EINVAL;
2107 		goto out;
2108 	}
2109 
2110 	/*
2111 	 * Check if such security already exists.
2112 	 * Use "SDH" and hash -> to get the offset in "SDS".
2113 	 */
2114 	err = indx_find(indx_sdh, ni, root_sdh, &hash_key, sizeof(hash_key),
2115 			&d_security->key.sec_id, &diff, (struct NTFS_DE **)&e,
2116 			fnd_sdh);
2117 	if (err)
2118 		goto out;
2119 
2120 	while (e) {
2121 		if (le32_to_cpu(e->sec_hdr.size) == new_sec_size) {
2122 			err = ntfs_read_run_nb(sbi, &ni->file.run,
2123 					       le64_to_cpu(e->sec_hdr.off),
2124 					       d_security, new_sec_size, NULL);
2125 			if (err)
2126 				goto out;
2127 
2128 			if (le32_to_cpu(d_security->size) == new_sec_size &&
2129 			    d_security->key.hash == hash_key.hash &&
2130 			    !memcmp(d_security + 1, sd, size_sd)) {
2131 				*security_id = d_security->key.sec_id;
2132 				/* Such security already exists. */
2133 				err = 0;
2134 				goto out;
2135 			}
2136 		}
2137 
2138 		err = indx_find_sort(indx_sdh, ni, root_sdh,
2139 				     (struct NTFS_DE **)&e, fnd_sdh);
2140 		if (err)
2141 			goto out;
2142 
2143 		if (!e || e->key.hash != hash_key.hash)
2144 			break;
2145 	}
2146 
2147 	/* Zero unused space. */
2148 	next = sbi->security.next_off & (SecurityDescriptorsBlockSize - 1);
2149 	left = SecurityDescriptorsBlockSize - next;
2150 
2151 	/* Zero gap until SecurityDescriptorsBlockSize. */
2152 	if (left < new_sec_size) {
2153 		/* Zero "left" bytes from sbi->security.next_off. */
2154 		sbi->security.next_off += SecurityDescriptorsBlockSize + left;
2155 	}
2156 
2157 	/* Zero tail of previous security. */
2158 	//used = ni->vfs_inode.i_size & (SecurityDescriptorsBlockSize - 1);
2159 
2160 	/*
2161 	 * Example:
2162 	 * 0x40438 == ni->vfs_inode.i_size
2163 	 * 0x00440 == sbi->security.next_off
2164 	 * need to zero [0x438-0x440)
2165 	 * if (next > used) {
2166 	 *  u32 tozero = next - used;
2167 	 *  zero "tozero" bytes from sbi->security.next_off - tozero
2168 	 */
2169 
2170 	/* Format new security descriptor. */
2171 	d_security->key.hash = hash_key.hash;
2172 	d_security->key.sec_id = cpu_to_le32(sbi->security.next_id);
2173 	d_security->off = cpu_to_le64(sbi->security.next_off);
2174 	d_security->size = cpu_to_le32(new_sec_size);
2175 	memcpy(d_security + 1, sd, size_sd);
2176 
2177 	/* Write main SDS bucket. */
2178 	err = ntfs_sb_write_run(sbi, &ni->file.run, sbi->security.next_off,
2179 				d_security, aligned_sec_size, 0);
2180 
2181 	if (err)
2182 		goto out;
2183 
2184 	mirr_off = sbi->security.next_off + SecurityDescriptorsBlockSize;
2185 	new_sds_size = mirr_off + aligned_sec_size;
2186 
2187 	if (new_sds_size > ni->vfs_inode.i_size) {
2188 		err = attr_set_size(ni, ATTR_DATA, SDS_NAME,
2189 				    ARRAY_SIZE(SDS_NAME), &ni->file.run,
2190 				    new_sds_size, &new_sds_size, false, NULL);
2191 		if (err)
2192 			goto out;
2193 	}
2194 
2195 	/* Write copy SDS bucket. */
2196 	err = ntfs_sb_write_run(sbi, &ni->file.run, mirr_off, d_security,
2197 				aligned_sec_size, 0);
2198 	if (err)
2199 		goto out;
2200 
2201 	/* Fill SII entry. */
2202 	sii_e.de.view.data_off =
2203 		cpu_to_le16(offsetof(struct NTFS_DE_SII, sec_hdr));
2204 	sii_e.de.view.data_size = cpu_to_le16(SIZEOF_SECURITY_HDR);
2205 	sii_e.de.view.res = 0;
2206 	sii_e.de.size = cpu_to_le16(SIZEOF_SII_DIRENTRY);
2207 	sii_e.de.key_size = cpu_to_le16(sizeof(d_security->key.sec_id));
2208 	sii_e.de.flags = 0;
2209 	sii_e.de.res = 0;
2210 	sii_e.sec_id = d_security->key.sec_id;
2211 	memcpy(&sii_e.sec_hdr, d_security, SIZEOF_SECURITY_HDR);
2212 
2213 	err = indx_insert_entry(indx_sii, ni, &sii_e.de, NULL, NULL, 0);
2214 	if (err)
2215 		goto out;
2216 
2217 	/* Fill SDH entry. */
2218 	sdh_e.de.view.data_off =
2219 		cpu_to_le16(offsetof(struct NTFS_DE_SDH, sec_hdr));
2220 	sdh_e.de.view.data_size = cpu_to_le16(SIZEOF_SECURITY_HDR);
2221 	sdh_e.de.view.res = 0;
2222 	sdh_e.de.size = cpu_to_le16(SIZEOF_SDH_DIRENTRY);
2223 	sdh_e.de.key_size = cpu_to_le16(sizeof(sdh_e.key));
2224 	sdh_e.de.flags = 0;
2225 	sdh_e.de.res = 0;
2226 	sdh_e.key.hash = d_security->key.hash;
2227 	sdh_e.key.sec_id = d_security->key.sec_id;
2228 	memcpy(&sdh_e.sec_hdr, d_security, SIZEOF_SECURITY_HDR);
2229 	sdh_e.magic[0] = cpu_to_le16('I');
2230 	sdh_e.magic[1] = cpu_to_le16('I');
2231 
2232 	fnd_clear(fnd_sdh);
2233 	err = indx_insert_entry(indx_sdh, ni, &sdh_e.de, (void *)(size_t)1,
2234 				fnd_sdh, 0);
2235 	if (err)
2236 		goto out;
2237 
2238 	*security_id = d_security->key.sec_id;
2239 	if (inserted)
2240 		*inserted = true;
2241 
2242 	/* Update Id and offset for next descriptor. */
2243 	sbi->security.next_id += 1;
2244 	sbi->security.next_off += aligned_sec_size;
2245 
2246 out:
2247 	fnd_put(fnd_sdh);
2248 	mark_inode_dirty(&ni->vfs_inode);
2249 	ni_unlock(ni);
2250 	kfree(d_security);
2251 
2252 	return err;
2253 }
2254 
2255 /*
2256  * ntfs_reparse_init - Load and parse $Extend/$Reparse.
2257  */
2258 int ntfs_reparse_init(struct ntfs_sb_info *sbi)
2259 {
2260 	int err;
2261 	struct ntfs_inode *ni = sbi->reparse.ni;
2262 	struct ntfs_index *indx = &sbi->reparse.index_r;
2263 	struct ATTRIB *attr;
2264 	struct ATTR_LIST_ENTRY *le;
2265 	const struct INDEX_ROOT *root_r;
2266 
2267 	if (!ni)
2268 		return 0;
2269 
2270 	le = NULL;
2271 	attr = ni_find_attr(ni, NULL, &le, ATTR_ROOT, SR_NAME,
2272 			    ARRAY_SIZE(SR_NAME), NULL, NULL);
2273 	if (!attr) {
2274 		err = -EINVAL;
2275 		goto out;
2276 	}
2277 
2278 	root_r = resident_data(attr);
2279 	if (root_r->type != ATTR_ZERO ||
2280 	    root_r->rule != NTFS_COLLATION_TYPE_UINTS) {
2281 		err = -EINVAL;
2282 		goto out;
2283 	}
2284 
2285 	err = indx_init(indx, sbi, attr, INDEX_MUTEX_SR);
2286 	if (err)
2287 		goto out;
2288 
2289 out:
2290 	return err;
2291 }
2292 
2293 /*
2294  * ntfs_objid_init - Load and parse $Extend/$ObjId.
2295  */
2296 int ntfs_objid_init(struct ntfs_sb_info *sbi)
2297 {
2298 	int err;
2299 	struct ntfs_inode *ni = sbi->objid.ni;
2300 	struct ntfs_index *indx = &sbi->objid.index_o;
2301 	struct ATTRIB *attr;
2302 	struct ATTR_LIST_ENTRY *le;
2303 	const struct INDEX_ROOT *root;
2304 
2305 	if (!ni)
2306 		return 0;
2307 
2308 	le = NULL;
2309 	attr = ni_find_attr(ni, NULL, &le, ATTR_ROOT, SO_NAME,
2310 			    ARRAY_SIZE(SO_NAME), NULL, NULL);
2311 	if (!attr) {
2312 		err = -EINVAL;
2313 		goto out;
2314 	}
2315 
2316 	root = resident_data(attr);
2317 	if (root->type != ATTR_ZERO ||
2318 	    root->rule != NTFS_COLLATION_TYPE_UINTS) {
2319 		err = -EINVAL;
2320 		goto out;
2321 	}
2322 
2323 	err = indx_init(indx, sbi, attr, INDEX_MUTEX_SO);
2324 	if (err)
2325 		goto out;
2326 
2327 out:
2328 	return err;
2329 }
2330 
2331 int ntfs_objid_remove(struct ntfs_sb_info *sbi, struct GUID *guid)
2332 {
2333 	int err;
2334 	struct ntfs_inode *ni = sbi->objid.ni;
2335 	struct ntfs_index *indx = &sbi->objid.index_o;
2336 
2337 	if (!ni)
2338 		return -EINVAL;
2339 
2340 	mutex_lock_nested(&ni->ni_lock, NTFS_INODE_MUTEX_OBJID);
2341 
2342 	err = indx_delete_entry(indx, ni, guid, sizeof(*guid), NULL);
2343 
2344 	mark_inode_dirty(&ni->vfs_inode);
2345 	ni_unlock(ni);
2346 
2347 	return err;
2348 }
2349 
2350 int ntfs_insert_reparse(struct ntfs_sb_info *sbi, __le32 rtag,
2351 			const struct MFT_REF *ref)
2352 {
2353 	int err;
2354 	struct ntfs_inode *ni = sbi->reparse.ni;
2355 	struct ntfs_index *indx = &sbi->reparse.index_r;
2356 	struct NTFS_DE_R re;
2357 
2358 	if (!ni)
2359 		return -EINVAL;
2360 
2361 	memset(&re, 0, sizeof(re));
2362 
2363 	re.de.view.data_off = cpu_to_le16(offsetof(struct NTFS_DE_R, zero));
2364 	re.de.size = cpu_to_le16(sizeof(struct NTFS_DE_R));
2365 	re.de.key_size = cpu_to_le16(sizeof(re.key));
2366 
2367 	re.key.ReparseTag = rtag;
2368 	memcpy(&re.key.ref, ref, sizeof(*ref));
2369 
2370 	mutex_lock_nested(&ni->ni_lock, NTFS_INODE_MUTEX_REPARSE);
2371 
2372 	err = indx_insert_entry(indx, ni, &re.de, NULL, NULL, 0);
2373 
2374 	mark_inode_dirty(&ni->vfs_inode);
2375 	ni_unlock(ni);
2376 
2377 	return err;
2378 }
2379 
2380 int ntfs_remove_reparse(struct ntfs_sb_info *sbi, __le32 rtag,
2381 			const struct MFT_REF *ref)
2382 {
2383 	int err, diff;
2384 	struct ntfs_inode *ni = sbi->reparse.ni;
2385 	struct ntfs_index *indx = &sbi->reparse.index_r;
2386 	struct ntfs_fnd *fnd = NULL;
2387 	struct REPARSE_KEY rkey;
2388 	struct NTFS_DE_R *re;
2389 	struct INDEX_ROOT *root_r;
2390 
2391 	if (!ni)
2392 		return -EINVAL;
2393 
2394 	rkey.ReparseTag = rtag;
2395 	rkey.ref = *ref;
2396 
2397 	mutex_lock_nested(&ni->ni_lock, NTFS_INODE_MUTEX_REPARSE);
2398 
2399 	if (rtag) {
2400 		err = indx_delete_entry(indx, ni, &rkey, sizeof(rkey), NULL);
2401 		goto out1;
2402 	}
2403 
2404 	fnd = fnd_get();
2405 	if (!fnd) {
2406 		err = -ENOMEM;
2407 		goto out1;
2408 	}
2409 
2410 	root_r = indx_get_root(indx, ni, NULL, NULL);
2411 	if (!root_r) {
2412 		err = -EINVAL;
2413 		goto out;
2414 	}
2415 
2416 	/* 1 - forces to ignore rkey.ReparseTag when comparing keys. */
2417 	err = indx_find(indx, ni, root_r, &rkey, sizeof(rkey), (void *)1, &diff,
2418 			(struct NTFS_DE **)&re, fnd);
2419 	if (err)
2420 		goto out;
2421 
2422 	if (memcmp(&re->key.ref, ref, sizeof(*ref))) {
2423 		/* Impossible. Looks like volume corrupt? */
2424 		goto out;
2425 	}
2426 
2427 	memcpy(&rkey, &re->key, sizeof(rkey));
2428 
2429 	fnd_put(fnd);
2430 	fnd = NULL;
2431 
2432 	err = indx_delete_entry(indx, ni, &rkey, sizeof(rkey), NULL);
2433 	if (err)
2434 		goto out;
2435 
2436 out:
2437 	fnd_put(fnd);
2438 
2439 out1:
2440 	mark_inode_dirty(&ni->vfs_inode);
2441 	ni_unlock(ni);
2442 
2443 	return err;
2444 }
2445 
2446 static inline void ntfs_unmap_and_discard(struct ntfs_sb_info *sbi, CLST lcn,
2447 					  CLST len)
2448 {
2449 	ntfs_unmap_meta(sbi->sb, lcn, len);
2450 	ntfs_discard(sbi, lcn, len);
2451 }
2452 
2453 void mark_as_free_ex(struct ntfs_sb_info *sbi, CLST lcn, CLST len, bool trim)
2454 {
2455 	CLST end, i, zone_len, zlen;
2456 	struct wnd_bitmap *wnd = &sbi->used.bitmap;
2457 
2458 	down_write_nested(&wnd->rw_lock, BITMAP_MUTEX_CLUSTERS);
2459 	if (!wnd_is_used(wnd, lcn, len)) {
2460 		ntfs_set_state(sbi, NTFS_DIRTY_ERROR);
2461 
2462 		end = lcn + len;
2463 		len = 0;
2464 		for (i = lcn; i < end; i++) {
2465 			if (wnd_is_used(wnd, i, 1)) {
2466 				if (!len)
2467 					lcn = i;
2468 				len += 1;
2469 				continue;
2470 			}
2471 
2472 			if (!len)
2473 				continue;
2474 
2475 			if (trim)
2476 				ntfs_unmap_and_discard(sbi, lcn, len);
2477 
2478 			wnd_set_free(wnd, lcn, len);
2479 			len = 0;
2480 		}
2481 
2482 		if (!len)
2483 			goto out;
2484 	}
2485 
2486 	if (trim)
2487 		ntfs_unmap_and_discard(sbi, lcn, len);
2488 	wnd_set_free(wnd, lcn, len);
2489 
2490 	/* append to MFT zone, if possible. */
2491 	zone_len = wnd_zone_len(wnd);
2492 	zlen = min(zone_len + len, sbi->zone_max);
2493 
2494 	if (zlen == zone_len) {
2495 		/* MFT zone already has maximum size. */
2496 	} else if (!zone_len) {
2497 		/* Create MFT zone only if 'zlen' is large enough. */
2498 		if (zlen == sbi->zone_max)
2499 			wnd_zone_set(wnd, lcn, zlen);
2500 	} else {
2501 		CLST zone_lcn = wnd_zone_bit(wnd);
2502 
2503 		if (lcn + len == zone_lcn) {
2504 			/* Append into head MFT zone. */
2505 			wnd_zone_set(wnd, lcn, zlen);
2506 		} else if (zone_lcn + zone_len == lcn) {
2507 			/* Append into tail MFT zone. */
2508 			wnd_zone_set(wnd, zone_lcn, zlen);
2509 		}
2510 	}
2511 
2512 out:
2513 	up_write(&wnd->rw_lock);
2514 }
2515 
2516 /*
2517  * run_deallocate - Deallocate clusters.
2518  */
2519 int run_deallocate(struct ntfs_sb_info *sbi, struct runs_tree *run, bool trim)
2520 {
2521 	CLST lcn, len;
2522 	size_t idx = 0;
2523 
2524 	while (run_get_entry(run, idx++, NULL, &lcn, &len)) {
2525 		if (lcn == SPARSE_LCN)
2526 			continue;
2527 
2528 		mark_as_free_ex(sbi, lcn, len, trim);
2529 	}
2530 
2531 	return 0;
2532 }
2533 
2534 static inline bool name_has_forbidden_chars(const struct le_str *fname)
2535 {
2536 	int i, ch;
2537 
2538 	/* check for forbidden chars */
2539 	for (i = 0; i < fname->len; ++i) {
2540 		ch = le16_to_cpu(fname->name[i]);
2541 
2542 		/* control chars */
2543 		if (ch < 0x20)
2544 			return true;
2545 
2546 		switch (ch) {
2547 		/* disallowed by Windows */
2548 		case '\\':
2549 		case '/':
2550 		case ':':
2551 		case '*':
2552 		case '?':
2553 		case '<':
2554 		case '>':
2555 		case '|':
2556 		case '\"':
2557 			return true;
2558 
2559 		default:
2560 			/* allowed char */
2561 			break;
2562 		}
2563 	}
2564 
2565 	/* file names cannot end with space or . */
2566 	if (fname->len > 0) {
2567 		ch = le16_to_cpu(fname->name[fname->len - 1]);
2568 		if (ch == ' ' || ch == '.')
2569 			return true;
2570 	}
2571 
2572 	return false;
2573 }
2574 
2575 static inline bool is_reserved_name(struct ntfs_sb_info *sbi,
2576 				    const struct le_str *fname)
2577 {
2578 	int port_digit;
2579 	const __le16 *name = fname->name;
2580 	int len = fname->len;
2581 	u16 *upcase = sbi->upcase;
2582 
2583 	/* check for 3 chars reserved names (device names) */
2584 	/* name by itself or with any extension is forbidden */
2585 	if (len == 3 || (len > 3 && le16_to_cpu(name[3]) == '.'))
2586 		if (!ntfs_cmp_names(name, 3, CON_NAME, 3, upcase, false) ||
2587 		    !ntfs_cmp_names(name, 3, NUL_NAME, 3, upcase, false) ||
2588 		    !ntfs_cmp_names(name, 3, AUX_NAME, 3, upcase, false) ||
2589 		    !ntfs_cmp_names(name, 3, PRN_NAME, 3, upcase, false))
2590 			return true;
2591 
2592 	/* check for 4 chars reserved names (port name followed by 1..9) */
2593 	/* name by itself or with any extension is forbidden */
2594 	if (len == 4 || (len > 4 && le16_to_cpu(name[4]) == '.')) {
2595 		port_digit = le16_to_cpu(name[3]);
2596 		if (port_digit >= '1' && port_digit <= '9')
2597 			if (!ntfs_cmp_names(name, 3, COM_NAME, 3, upcase, false) ||
2598 			    !ntfs_cmp_names(name, 3, LPT_NAME, 3, upcase, false))
2599 				return true;
2600 	}
2601 
2602 	return false;
2603 }
2604 
2605 /*
2606  * valid_windows_name - Check if a file name is valid in Windows.
2607  */
2608 bool valid_windows_name(struct ntfs_sb_info *sbi, const struct le_str *fname)
2609 {
2610 	return !name_has_forbidden_chars(fname) &&
2611 	       !is_reserved_name(sbi, fname);
2612 }
2613