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