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