cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

fsntfs.c (53407B)


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