1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3 * NTFS kernel super block handling.
4 *
5 * Copyright (c) 2001-2012 Anton Altaparmakov and Tuxera Inc.
6 * Copyright (c) 2001,2002 Richard Russon
7 * Copyright (c) 2025 LG Electronics Co., Ltd.
8 */
9
10 #include <linux/blkdev.h> /* For bdev_logical_block_size(). */
11 #include <linux/backing-dev.h>
12 #include <linux/vfs.h>
13 #include <linux/fs_struct.h>
14 #include <linux/sched/mm.h>
15 #include <linux/fs_context.h>
16 #include <linux/fs_parser.h>
17
18 #include "sysctl.h"
19 #include "logfile.h"
20 #include "index.h"
21 #include "ntfs.h"
22 #include "ea.h"
23 #include "volume.h"
24
25 /* A global default upcase table and a corresponding reference count. */
26 static __le16 *default_upcase;
27 static unsigned long ntfs_nr_upcase_users;
28
29 static struct workqueue_struct *ntfs_wq;
30
31 /* Error constants/strings used in inode.c::ntfs_show_options(). */
32 enum {
33 /* One of these must be present, default is ON_ERRORS_CONTINUE. */
34 ON_ERRORS_PANIC = 0x01,
35 ON_ERRORS_REMOUNT_RO = 0x02,
36 ON_ERRORS_CONTINUE = 0x04,
37 };
38
39 static const struct constant_table ntfs_param_enums[] = {
40 { "panic", ON_ERRORS_PANIC },
41 { "remount-ro", ON_ERRORS_REMOUNT_RO },
42 { "continue", ON_ERRORS_CONTINUE },
43 {}
44 };
45
46 enum {
47 NATIVE_SYMLINK_RAW,
48 NATIVE_SYMLINK_REL,
49 };
50
51 static const struct constant_table ntfs_native_symlink_enums[] = {
52 { "raw", NATIVE_SYMLINK_RAW },
53 { "rel", NATIVE_SYMLINK_REL },
54 {}
55 };
56
57 enum {
58 SYMLINK_WSL,
59 SYMLINK_NATIVE,
60 };
61
62 static const struct constant_table ntfs_symlink_enums[] = {
63 { "wsl", SYMLINK_WSL },
64 { "native", SYMLINK_NATIVE },
65 {}
66 };
67
68 enum {
69 Opt_uid,
70 Opt_gid,
71 Opt_umask,
72 Opt_dmask,
73 Opt_fmask,
74 Opt_errors,
75 Opt_nls,
76 Opt_charset,
77 Opt_show_sys_files,
78 Opt_show_meta,
79 Opt_case_sensitive,
80 Opt_disable_sparse,
81 Opt_sparse,
82 Opt_mft_zone_multiplier,
83 Opt_preallocated_size,
84 Opt_sys_immutable,
85 Opt_nohidden,
86 Opt_hide_dot_files,
87 Opt_check_windows_names,
88 Opt_acl,
89 Opt_discard,
90 Opt_nocase,
91 Opt_native_symlink,
92 Opt_symlink,
93 };
94
95 static const struct fs_parameter_spec ntfs_parameters[] = {
96 fsparam_u32("uid", Opt_uid),
97 fsparam_u32("gid", Opt_gid),
98 fsparam_u32oct("umask", Opt_umask),
99 fsparam_u32oct("dmask", Opt_dmask),
100 fsparam_u32oct("fmask", Opt_fmask),
101 fsparam_string("nls", Opt_nls),
102 fsparam_string("iocharset", Opt_charset),
103 fsparam_enum("errors", Opt_errors, ntfs_param_enums),
104 fsparam_flag("show_sys_files", Opt_show_sys_files),
105 fsparam_flag("showmeta", Opt_show_meta),
106 fsparam_flag("case_sensitive", Opt_case_sensitive),
107 fsparam_flag("disable_sparse", Opt_disable_sparse),
108 fsparam_s32("mft_zone_multiplier", Opt_mft_zone_multiplier),
109 fsparam_u64("preallocated_size", Opt_preallocated_size),
110 fsparam_flag("sys_immutable", Opt_sys_immutable),
111 fsparam_flag("nohidden", Opt_nohidden),
112 fsparam_flag("hide_dot_files", Opt_hide_dot_files),
113 fsparam_flag("windows_names", Opt_check_windows_names),
114 fsparam_flag("acl", Opt_acl),
115 fsparam_flag("discard", Opt_discard),
116 fsparam_flag("sparse", Opt_sparse),
117 fsparam_flag("nocase", Opt_nocase),
118 fsparam_enum("native_symlink", Opt_native_symlink, ntfs_native_symlink_enums),
119 fsparam_enum("symlink", Opt_symlink, ntfs_symlink_enums),
120 {}
121 };
122
ntfs_parse_param(struct fs_context * fc,struct fs_parameter * param)123 static int ntfs_parse_param(struct fs_context *fc, struct fs_parameter *param)
124 {
125 struct ntfs_volume *vol = fc->s_fs_info;
126 struct fs_parse_result result;
127 int opt;
128
129 opt = fs_parse(fc, ntfs_parameters, param, &result);
130 if (opt < 0)
131 return opt;
132
133 switch (opt) {
134 case Opt_uid:
135 vol->uid = make_kuid(current_user_ns(), result.uint_32);
136 break;
137 case Opt_gid:
138 vol->gid = make_kgid(current_user_ns(), result.uint_32);
139 break;
140 case Opt_umask:
141 vol->fmask = vol->dmask = result.uint_32;
142 break;
143 case Opt_dmask:
144 vol->dmask = result.uint_32;
145 break;
146 case Opt_fmask:
147 vol->fmask = result.uint_32;
148 break;
149 case Opt_errors:
150 vol->on_errors = result.uint_32;
151 break;
152 case Opt_nls:
153 case Opt_charset:
154 if (vol->nls_map)
155 unload_nls(vol->nls_map);
156 vol->nls_map = load_nls(param->string);
157 if (!vol->nls_map) {
158 ntfs_error(vol->sb, "Failed to load NLS table '%s'.",
159 param->string);
160 return -EINVAL;
161 }
162 break;
163 case Opt_mft_zone_multiplier:
164 if (vol->mft_zone_multiplier && vol->mft_zone_multiplier !=
165 result.int_32) {
166 ntfs_error(vol->sb, "Cannot change mft_zone_multiplier on remount.");
167 return -EINVAL;
168 }
169 if (result.int_32 < 1 || result.int_32 > 4) {
170 ntfs_error(vol->sb,
171 "Invalid mft_zone_multiplier. Using default value, i.e. 1.");
172 vol->mft_zone_multiplier = 1;
173 } else
174 vol->mft_zone_multiplier = result.int_32;
175 break;
176 case Opt_show_sys_files:
177 case Opt_show_meta:
178 if (result.boolean)
179 NVolSetShowSystemFiles(vol);
180 else
181 NVolClearShowSystemFiles(vol);
182 break;
183 case Opt_case_sensitive:
184 if (result.boolean)
185 NVolSetCaseSensitive(vol);
186 else
187 NVolClearCaseSensitive(vol);
188 break;
189 case Opt_nocase:
190 if (result.boolean)
191 NVolClearCaseSensitive(vol);
192 else
193 NVolSetCaseSensitive(vol);
194 break;
195 case Opt_preallocated_size:
196 vol->preallocated_size = (loff_t)result.uint_64;
197 break;
198 case Opt_sys_immutable:
199 if (result.boolean)
200 NVolSetSysImmutable(vol);
201 else
202 NVolClearSysImmutable(vol);
203 break;
204 case Opt_nohidden:
205 if (result.boolean)
206 NVolClearShowHiddenFiles(vol);
207 else
208 NVolSetShowHiddenFiles(vol);
209 break;
210 case Opt_hide_dot_files:
211 if (result.boolean)
212 NVolSetHideDotFiles(vol);
213 else
214 NVolClearHideDotFiles(vol);
215 break;
216 case Opt_check_windows_names:
217 if (result.boolean)
218 NVolSetCheckWindowsNames(vol);
219 else
220 NVolClearCheckWindowsNames(vol);
221 break;
222 case Opt_acl:
223 #ifdef CONFIG_NTFS_FS_POSIX_ACL
224 if (result.boolean)
225 fc->sb_flags |= SB_POSIXACL;
226 else
227 fc->sb_flags &= ~SB_POSIXACL;
228 break;
229 #else
230 return -EINVAL;
231 #endif
232 case Opt_discard:
233 if (result.boolean)
234 NVolSetDiscard(vol);
235 else
236 NVolClearDiscard(vol);
237 break;
238 case Opt_disable_sparse:
239 if (result.boolean)
240 NVolSetDisableSparse(vol);
241 else
242 NVolClearDisableSparse(vol);
243 break;
244 case Opt_native_symlink:
245 if (result.uint_32 == NATIVE_SYMLINK_REL)
246 NVolSetNativeSymlinkRel(vol);
247 else
248 NVolClearNativeSymlinkRel(vol);
249 break;
250 case Opt_symlink:
251 if (result.uint_32 == SYMLINK_NATIVE)
252 NVolSetSymlinkNative(vol);
253 else
254 NVolClearSymlinkNative(vol);
255 break;
256 case Opt_sparse:
257 break;
258 default:
259 return -EINVAL;
260 }
261
262 return 0;
263 }
264
ntfs_reconfigure(struct fs_context * fc)265 static int ntfs_reconfigure(struct fs_context *fc)
266 {
267 struct super_block *sb = fc->root->d_sb;
268 struct ntfs_volume *vol = NTFS_SB(sb);
269
270 ntfs_debug("Entering with remount");
271
272 sync_filesystem(sb);
273
274 /*
275 * For the read-write compiled driver, if we are remounting read-write,
276 * make sure there are no volume errors and that no unsupported volume
277 * flags are set. Also, empty the logfile journal as it would become
278 * stale as soon as something is written to the volume and mark the
279 * volume dirty so that chkdsk is run if the volume is not umounted
280 * cleanly.
281 *
282 * When remounting read-only, mark the volume clean if no volume errors
283 * have occurred.
284 */
285 if (sb_rdonly(sb) && !(fc->sb_flags & SB_RDONLY)) {
286 static const char *es = ". Cannot remount read-write.";
287
288 /* Remounting read-write. */
289 if (NVolErrors(vol)) {
290 ntfs_error(sb, "Volume has errors and is read-only%s",
291 es);
292 return -EROFS;
293 }
294 if (vol->vol_flags & VOLUME_IS_DIRTY) {
295 ntfs_error(sb, "Volume is dirty and read-only%s", es);
296 return -EROFS;
297 }
298 if (vol->vol_flags & VOLUME_MODIFIED_BY_CHKDSK) {
299 ntfs_error(sb, "Volume has been modified by chkdsk and is read-only%s", es);
300 return -EROFS;
301 }
302 if (vol->vol_flags & VOLUME_MUST_MOUNT_RO_MASK) {
303 ntfs_error(sb, "Volume has unsupported flags set (0x%x) and is read-only%s",
304 le16_to_cpu(vol->vol_flags), es);
305 return -EROFS;
306 }
307 if (vol->logfile_ino && !ntfs_empty_logfile(vol->logfile_ino)) {
308 ntfs_error(sb, "Failed to empty journal LogFile%s",
309 es);
310 NVolSetErrors(vol);
311 return -EROFS;
312 }
313 } else if (!sb_rdonly(sb) && (fc->sb_flags & SB_RDONLY)) {
314 /* Remounting read-only. */
315 if (!NVolErrors(vol)) {
316 if (ntfs_clear_volume_flags(vol, VOLUME_IS_DIRTY))
317 ntfs_warning(sb,
318 "Failed to clear dirty bit in volume information flags. Run chkdsk.");
319 }
320 }
321
322 ntfs_debug("Done.");
323 return 0;
324 }
325
326 const struct option_t on_errors_arr[] = {
327 { ON_ERRORS_PANIC, "panic" },
328 { ON_ERRORS_REMOUNT_RO, "remount-ro", },
329 { ON_ERRORS_CONTINUE, "continue", },
330 { 0, NULL }
331 };
332
ntfs_handle_error(struct super_block * sb)333 void ntfs_handle_error(struct super_block *sb)
334 {
335 struct ntfs_volume *vol = NTFS_SB(sb);
336
337 if (sb_rdonly(sb))
338 return;
339
340 if (vol->on_errors == ON_ERRORS_REMOUNT_RO) {
341 sb->s_flags |= SB_RDONLY;
342 pr_crit("(device %s): Filesystem has been set read-only\n",
343 sb->s_id);
344 } else if (vol->on_errors == ON_ERRORS_PANIC) {
345 panic("ntfs: (device %s): panic from previous error\n",
346 sb->s_id);
347 } else if (vol->on_errors == ON_ERRORS_CONTINUE) {
348 if (errseq_check(&sb->s_wb_err, vol->wb_err) == -ENODEV) {
349 NVolSetShutdown(vol);
350 vol->wb_err = sb->s_wb_err;
351 }
352 }
353 }
354
355 /*
356 * ntfs_write_volume_flags - write new flags to the volume information flags
357 * @vol: ntfs volume on which to modify the flags
358 * @flags: new flags value for the volume information flags
359 *
360 * Internal function. You probably want to use ntfs_{set,clear}_volume_flags()
361 * instead (see below).
362 *
363 * Replace the volume information flags on the volume @vol with the value
364 * supplied in @flags. Note, this overwrites the volume information flags, so
365 * make sure to combine the flags you want to modify with the old flags and use
366 * the result when calling ntfs_write_volume_flags().
367 *
368 * Return 0 on success and -errno on error.
369 */
ntfs_write_volume_flags(struct ntfs_volume * vol,const __le16 flags)370 static int ntfs_write_volume_flags(struct ntfs_volume *vol, const __le16 flags)
371 {
372 struct ntfs_inode *ni = NTFS_I(vol->vol_ino);
373 struct volume_information *vi;
374 struct ntfs_attr_search_ctx *ctx;
375 int err;
376
377 ntfs_debug("Entering, old flags = 0x%x, new flags = 0x%x.",
378 le16_to_cpu(vol->vol_flags), le16_to_cpu(flags));
379 mutex_lock(&ni->mrec_lock);
380 if (vol->vol_flags == flags)
381 goto done;
382
383 ctx = ntfs_attr_get_search_ctx(ni, NULL);
384 if (!ctx) {
385 err = -ENOMEM;
386 goto put_unm_err_out;
387 }
388
389 err = ntfs_attr_lookup(AT_VOLUME_INFORMATION, NULL, 0, 0, 0, NULL, 0,
390 ctx);
391 if (err)
392 goto put_unm_err_out;
393
394 vi = (struct volume_information *)((u8 *)ctx->attr +
395 le16_to_cpu(ctx->attr->data.resident.value_offset));
396 vol->vol_flags = vi->flags = flags;
397 mark_mft_record_dirty(ctx->ntfs_ino);
398 ntfs_attr_put_search_ctx(ctx);
399 done:
400 mutex_unlock(&ni->mrec_lock);
401 ntfs_debug("Done.");
402 return 0;
403 put_unm_err_out:
404 if (ctx)
405 ntfs_attr_put_search_ctx(ctx);
406 mutex_unlock(&ni->mrec_lock);
407 ntfs_error(vol->sb, "Failed with error code %i.", -err);
408 return err;
409 }
410
411 /*
412 * ntfs_set_volume_flags - set bits in the volume information flags
413 * @vol: ntfs volume on which to modify the flags
414 * @flags: flags to set on the volume
415 *
416 * Set the bits in @flags in the volume information flags on the volume @vol.
417 *
418 * Return 0 on success and -errno on error.
419 */
ntfs_set_volume_flags(struct ntfs_volume * vol,__le16 flags)420 int ntfs_set_volume_flags(struct ntfs_volume *vol, __le16 flags)
421 {
422 flags &= VOLUME_FLAGS_MASK;
423 return ntfs_write_volume_flags(vol, vol->vol_flags | flags);
424 }
425
426 /*
427 * ntfs_clear_volume_flags - clear bits in the volume information flags
428 * @vol: ntfs volume on which to modify the flags
429 * @flags: flags to clear on the volume
430 *
431 * Clear the bits in @flags in the volume information flags on the volume @vol.
432 *
433 * Return 0 on success and -errno on error.
434 */
ntfs_clear_volume_flags(struct ntfs_volume * vol,__le16 flags)435 int ntfs_clear_volume_flags(struct ntfs_volume *vol, __le16 flags)
436 {
437 flags &= VOLUME_FLAGS_MASK;
438 flags = vol->vol_flags & cpu_to_le16(~le16_to_cpu(flags));
439 return ntfs_write_volume_flags(vol, flags);
440 }
441
ntfs_write_volume_label(struct ntfs_volume * vol,char * label)442 int ntfs_write_volume_label(struct ntfs_volume *vol, char *label)
443 {
444 struct ntfs_inode *vol_ni = NTFS_I(vol->vol_ino);
445 struct ntfs_attr_search_ctx *ctx;
446 char *new_label;
447 __le16 *uname;
448 int uname_len, ret;
449
450 uname_len = ntfs_nlstoucs(vol, label, strlen(label),
451 &uname, FSLABEL_MAX);
452 if (uname_len < 0) {
453 ntfs_error(vol->sb,
454 "Failed to convert volume label '%s' to Unicode.",
455 label);
456 return uname_len;
457 }
458
459 if (uname_len > NTFS_MAX_LABEL_LEN) {
460 ntfs_error(vol->sb,
461 "Volume label is too long (max %d characters).",
462 NTFS_MAX_LABEL_LEN);
463 kvfree(uname);
464 return -EINVAL;
465 }
466
467 /*
468 * Allocate the in-memory label copy up front. If kstrdup() fails we
469 * bail out before touching on-disk metadata, so the in-memory label
470 * and the on-disk label stay in sync.
471 */
472 new_label = kstrdup(label, GFP_KERNEL);
473 if (!new_label) {
474 kvfree(uname);
475 return -ENOMEM;
476 }
477
478 mutex_lock(&vol_ni->mrec_lock);
479 ctx = ntfs_attr_get_search_ctx(vol_ni, NULL);
480 if (!ctx) {
481 ret = -ENOMEM;
482 goto out;
483 }
484
485 ret = ntfs_attr_lookup(AT_VOLUME_NAME, NULL, 0, 0, 0, NULL, 0,
486 ctx);
487 if (!ret)
488 ret = ntfs_attr_record_rm(ctx);
489 else if (ret == -ENOENT)
490 ret = 0;
491 ntfs_attr_put_search_ctx(ctx);
492 if (ret)
493 goto out;
494
495 ret = ntfs_resident_attr_record_add(vol_ni, AT_VOLUME_NAME, AT_UNNAMED, 0,
496 (u8 *)uname, uname_len * sizeof(__le16), 0);
497 out:
498 if (ret >= 0) {
499 char *old_label;
500
501 mutex_lock(&vol->volume_label_lock);
502 old_label = vol->volume_label;
503 vol->volume_label = new_label;
504 mutex_unlock(&vol->volume_label_lock);
505
506 kfree(old_label);
507 mark_inode_dirty_sync(vol->vol_ino);
508 ret = 0;
509 }
510 mutex_unlock(&vol_ni->mrec_lock);
511 kvfree(uname);
512
513 if (ret < 0)
514 kfree(new_label);
515 return ret;
516 }
517
518 /*
519 * is_boot_sector_ntfs - check whether a boot sector is a valid NTFS boot sector
520 * @sb: Super block of the device to which @b belongs.
521 * @b: Boot sector of device @sb to check.
522 * @silent: If 'true', all output will be silenced.
523 *
524 * is_boot_sector_ntfs() checks whether the boot sector @b is a valid NTFS boot
525 * sector. Returns 'true' if it is valid and 'false' if not.
526 *
527 * @sb is only needed for warning/error output, i.e. it can be NULL when silent
528 * is 'true'.
529 */
is_boot_sector_ntfs(const struct super_block * sb,const struct ntfs_boot_sector * b,const bool silent)530 static bool is_boot_sector_ntfs(const struct super_block *sb,
531 const struct ntfs_boot_sector *b, const bool silent)
532 {
533 /*
534 * Check that checksum == sum of u32 values from b to the checksum
535 * field. If checksum is zero, no checking is done. We will work when
536 * the checksum test fails, since some utilities update the boot sector
537 * ignoring the checksum which leaves the checksum out-of-date. We
538 * report a warning if this is the case.
539 */
540 if ((void *)b < (void *)&b->checksum && b->checksum && !silent) {
541 __le32 *u;
542 u32 i;
543
544 for (i = 0, u = (__le32 *)b; u < (__le32 *)(&b->checksum); ++u)
545 i += le32_to_cpup(u);
546 if (le32_to_cpu(b->checksum) != i)
547 ntfs_warning(sb, "Invalid boot sector checksum.");
548 }
549 /* Check OEMidentifier is "NTFS " */
550 if (b->oem_id != magicNTFS)
551 goto not_ntfs;
552 /* Check bytes per sector value is between 256 and 4096. */
553 if (le16_to_cpu(b->bpb.bytes_per_sector) < 0x100 ||
554 le16_to_cpu(b->bpb.bytes_per_sector) > 0x1000)
555 goto not_ntfs;
556 /*
557 * Check sectors per cluster value is valid and the cluster size
558 * is not above the maximum (2MB).
559 */
560 if (b->bpb.sectors_per_cluster < 0xf4 &&
561 !is_power_of_2(b->bpb.sectors_per_cluster))
562 goto not_ntfs;
563
564 /* Check reserved/unused fields are really zero. */
565 if (le16_to_cpu(b->bpb.reserved_sectors) ||
566 le16_to_cpu(b->bpb.root_entries) ||
567 le16_to_cpu(b->bpb.sectors) ||
568 le16_to_cpu(b->bpb.sectors_per_fat) ||
569 le32_to_cpu(b->bpb.large_sectors) || b->bpb.fats)
570 goto not_ntfs;
571 /* Check clusters per file mft record value is valid. */
572 if ((u8)b->clusters_per_mft_record < 0xe1 ||
573 (u8)b->clusters_per_mft_record > 0xf7)
574 switch (b->clusters_per_mft_record) {
575 case 1: case 2: case 4: case 8: case 16: case 32: case 64:
576 break;
577 default:
578 goto not_ntfs;
579 }
580 /* Check clusters per index block value is valid. */
581 if ((u8)b->clusters_per_index_record < 0xe1 ||
582 (u8)b->clusters_per_index_record > 0xf7)
583 switch (b->clusters_per_index_record) {
584 case 1: case 2: case 4: case 8: case 16: case 32: case 64:
585 break;
586 default:
587 goto not_ntfs;
588 }
589 /*
590 * Check for valid end of sector marker. We will work without it, but
591 * many BIOSes will refuse to boot from a bootsector if the magic is
592 * incorrect, so we emit a warning.
593 */
594 if (!silent && b->end_of_sector_marker != cpu_to_le16(0xaa55))
595 ntfs_warning(sb, "Invalid end of sector marker.");
596 return true;
597 not_ntfs:
598 return false;
599 }
600
601 /*
602 * read_ntfs_boot_sector - read the NTFS boot sector of a device
603 * @sb: super block of device to read the boot sector from
604 * @silent: if true, suppress all output
605 *
606 * Reads the boot sector from the device and validates it.
607 */
read_ntfs_boot_sector(struct super_block * sb,const int silent)608 static char *read_ntfs_boot_sector(struct super_block *sb,
609 const int silent)
610 {
611 char *boot_sector;
612
613 boot_sector = kzalloc(PAGE_SIZE, GFP_NOFS);
614 if (!boot_sector)
615 return NULL;
616
617 if (ntfs_bdev_read(sb->s_bdev, boot_sector, 0, PAGE_SIZE)) {
618 if (!silent)
619 ntfs_error(sb, "Unable to read primary boot sector.");
620 kfree(boot_sector);
621 return NULL;
622 }
623
624 if (!is_boot_sector_ntfs(sb, (struct ntfs_boot_sector *)boot_sector,
625 silent)) {
626 if (!silent)
627 ntfs_error(sb, "Primary boot sector is invalid.");
628 kfree(boot_sector);
629 return NULL;
630 }
631
632 return boot_sector;
633 }
634
635 /*
636 * parse_ntfs_boot_sector - parse the boot sector and store the data in @vol
637 * @vol: volume structure to initialise with data from boot sector
638 * @b: boot sector to parse
639 *
640 * Parse the ntfs boot sector @b and store all imporant information therein in
641 * the ntfs super block @vol. Return 'true' on success and 'false' on error.
642 */
parse_ntfs_boot_sector(struct ntfs_volume * vol,const struct ntfs_boot_sector * b)643 static bool parse_ntfs_boot_sector(struct ntfs_volume *vol,
644 const struct ntfs_boot_sector *b)
645 {
646 unsigned int sectors_per_cluster, sectors_per_cluster_bits, nr_hidden_sects;
647 int clusters_per_mft_record, clusters_per_index_record;
648 u64 ll;
649
650 vol->sector_size = le16_to_cpu(b->bpb.bytes_per_sector);
651 vol->sector_size_bits = ffs(vol->sector_size) - 1;
652 ntfs_debug("vol->sector_size = %i (0x%x)", vol->sector_size,
653 vol->sector_size);
654 ntfs_debug("vol->sector_size_bits = %i (0x%x)", vol->sector_size_bits,
655 vol->sector_size_bits);
656 if (vol->sector_size < vol->sb->s_blocksize) {
657 ntfs_error(vol->sb,
658 "Sector size (%i) is smaller than the device block size (%lu). This is not supported.",
659 vol->sector_size, vol->sb->s_blocksize);
660 return false;
661 }
662
663 if (b->bpb.sectors_per_cluster >= 0xf4)
664 sectors_per_cluster = 1U << -(s8)b->bpb.sectors_per_cluster;
665 else
666 sectors_per_cluster = b->bpb.sectors_per_cluster;
667 ntfs_debug("sectors_per_cluster = 0x%x", b->bpb.sectors_per_cluster);
668 sectors_per_cluster_bits = ffs(sectors_per_cluster) - 1;
669 ntfs_debug("sectors_per_cluster_bits = 0x%x",
670 sectors_per_cluster_bits);
671 nr_hidden_sects = le32_to_cpu(b->bpb.hidden_sectors);
672 ntfs_debug("number of hidden sectors = 0x%x", nr_hidden_sects);
673 vol->cluster_size = vol->sector_size << sectors_per_cluster_bits;
674 vol->cluster_size_mask = vol->cluster_size - 1;
675 vol->cluster_size_bits = ffs(vol->cluster_size) - 1;
676 ntfs_debug("vol->cluster_size = %i (0x%x)", vol->cluster_size,
677 vol->cluster_size);
678 ntfs_debug("vol->cluster_size_mask = 0x%x", vol->cluster_size_mask);
679 ntfs_debug("vol->cluster_size_bits = %i", vol->cluster_size_bits);
680 if (vol->cluster_size < vol->sector_size) {
681 ntfs_error(vol->sb,
682 "Cluster size (%i) is smaller than the sector size (%i). This is not supported.",
683 vol->cluster_size, vol->sector_size);
684 return false;
685 }
686 clusters_per_mft_record = b->clusters_per_mft_record;
687 ntfs_debug("clusters_per_mft_record = %i (0x%x)",
688 clusters_per_mft_record, clusters_per_mft_record);
689 if (clusters_per_mft_record > 0)
690 vol->mft_record_size = vol->cluster_size <<
691 (ffs(clusters_per_mft_record) - 1);
692 else
693 /*
694 * When mft_record_size < cluster_size, clusters_per_mft_record
695 * = -log2(mft_record_size) bytes. mft_record_size normaly is
696 * 1024 bytes, which is encoded as 0xF6 (-10 in decimal).
697 */
698 vol->mft_record_size = 1U << -clusters_per_mft_record;
699 vol->mft_record_size_mask = vol->mft_record_size - 1;
700 vol->mft_record_size_bits = ffs(vol->mft_record_size) - 1;
701 ntfs_debug("vol->mft_record_size = %i (0x%x)", vol->mft_record_size,
702 vol->mft_record_size);
703 ntfs_debug("vol->mft_record_size_mask = 0x%x",
704 vol->mft_record_size_mask);
705 ntfs_debug("vol->mft_record_size_bits = %i (0x%x)",
706 vol->mft_record_size_bits, vol->mft_record_size_bits);
707 /*
708 * We cannot support mft record sizes above the PAGE_SIZE since
709 * we store $MFT/$DATA, the table of mft records in the page cache.
710 */
711 if (vol->mft_record_size > PAGE_SIZE) {
712 ntfs_error(vol->sb,
713 "Mft record size (%i) exceeds the PAGE_SIZE on your system (%lu). This is not supported.",
714 vol->mft_record_size, PAGE_SIZE);
715 return false;
716 }
717 /* We cannot support mft record sizes below the sector size. */
718 if (vol->mft_record_size < vol->sector_size) {
719 ntfs_warning(vol->sb, "Mft record size (%i) is smaller than the sector size (%i).",
720 vol->mft_record_size, vol->sector_size);
721 }
722 clusters_per_index_record = b->clusters_per_index_record;
723 ntfs_debug("clusters_per_index_record = %i (0x%x)",
724 clusters_per_index_record, clusters_per_index_record);
725 if (clusters_per_index_record > 0)
726 vol->index_record_size = vol->cluster_size <<
727 (ffs(clusters_per_index_record) - 1);
728 else
729 /*
730 * When index_record_size < cluster_size,
731 * clusters_per_index_record = -log2(index_record_size) bytes.
732 * index_record_size normaly equals 4096 bytes, which is
733 * encoded as 0xF4 (-12 in decimal).
734 */
735 vol->index_record_size = 1U << -clusters_per_index_record;
736 vol->index_record_size_mask = vol->index_record_size - 1;
737 vol->index_record_size_bits = ffs(vol->index_record_size) - 1;
738 ntfs_debug("vol->index_record_size = %i (0x%x)",
739 vol->index_record_size, vol->index_record_size);
740 ntfs_debug("vol->index_record_size_mask = 0x%x",
741 vol->index_record_size_mask);
742 ntfs_debug("vol->index_record_size_bits = %i (0x%x)",
743 vol->index_record_size_bits,
744 vol->index_record_size_bits);
745 /* We cannot support index record sizes below the sector size. */
746 if (vol->index_record_size < vol->sector_size) {
747 ntfs_error(vol->sb,
748 "Index record size (%i) is smaller than the sector size (%i). This is not supported.",
749 vol->index_record_size, vol->sector_size);
750 return false;
751 }
752 /*
753 * Get the size of the volume in clusters and check for 64-bit-ness.
754 * Windows currently only uses 32 bits to save the clusters so we do
755 * the same as it is much faster on 32-bit CPUs.
756 */
757 ll = le64_to_cpu(b->number_of_sectors) >> sectors_per_cluster_bits;
758 if (ll >= 1ULL << 32) {
759 ntfs_error(vol->sb, "Cannot handle 64-bit clusters.");
760 return false;
761 }
762 vol->nr_clusters = ll;
763 ntfs_debug("vol->nr_clusters = 0x%llx", vol->nr_clusters);
764 ll = le64_to_cpu(b->mft_lcn);
765 if (ll >= (u64)vol->nr_clusters) {
766 ntfs_error(vol->sb, "MFT LCN (%llu, 0x%llx) is beyond end of volume. Weird.",
767 ll, ll);
768 return false;
769 }
770 vol->mft_lcn = ll;
771 ntfs_debug("vol->mft_lcn = 0x%llx", vol->mft_lcn);
772 ll = le64_to_cpu(b->mftmirr_lcn);
773 if (ll >= (u64)vol->nr_clusters) {
774 ntfs_error(vol->sb, "MFTMirr LCN (%llu, 0x%llx) is beyond end of volume. Weird.",
775 ll, ll);
776 return false;
777 }
778 vol->mftmirr_lcn = ll;
779 ntfs_debug("vol->mftmirr_lcn = 0x%llx", vol->mftmirr_lcn);
780 /*
781 * Work out the size of the mft mirror in number of mft records. If the
782 * cluster size is less than or equal to the size taken by four mft
783 * records, the mft mirror stores the first four mft records. If the
784 * cluster size is bigger than the size taken by four mft records, the
785 * mft mirror contains as many mft records as will fit into one
786 * cluster.
787 */
788 if (vol->cluster_size <= (4 << vol->mft_record_size_bits))
789 vol->mftmirr_size = 4;
790 else
791 vol->mftmirr_size = vol->cluster_size >>
792 vol->mft_record_size_bits;
793 ntfs_debug("vol->mftmirr_size = %i", vol->mftmirr_size);
794 vol->serial_no = le64_to_cpu(b->volume_serial_number);
795 ntfs_debug("vol->serial_no = 0x%llx", vol->serial_no);
796
797 vol->sparse_compression_unit = 4;
798 if (vol->cluster_size > 4096) {
799 switch (vol->cluster_size) {
800 case 65536:
801 vol->sparse_compression_unit = 0;
802 break;
803 case 32768:
804 vol->sparse_compression_unit = 1;
805 break;
806 case 16384:
807 vol->sparse_compression_unit = 2;
808 break;
809 case 8192:
810 vol->sparse_compression_unit = 3;
811 break;
812 }
813 }
814
815 return true;
816 }
817
818 /*
819 * ntfs_setup_allocators - initialize the cluster and mft allocators
820 * @vol: volume structure for which to setup the allocators
821 *
822 * Setup the cluster (lcn) and mft allocators to the starting values.
823 */
ntfs_setup_allocators(struct ntfs_volume * vol)824 static void ntfs_setup_allocators(struct ntfs_volume *vol)
825 {
826 s64 mft_zone_size, mft_lcn;
827
828 ntfs_debug("vol->mft_zone_multiplier = 0x%x",
829 vol->mft_zone_multiplier);
830 /* Determine the size of the MFT zone. */
831 mft_zone_size = vol->nr_clusters;
832 switch (vol->mft_zone_multiplier) { /* % of volume size in clusters */
833 case 4:
834 mft_zone_size >>= 1; /* 50% */
835 break;
836 case 3:
837 mft_zone_size = (mft_zone_size +
838 (mft_zone_size >> 1)) >> 2; /* 37.5% */
839 break;
840 case 2:
841 mft_zone_size >>= 2; /* 25% */
842 break;
843 /* case 1: */
844 default:
845 mft_zone_size >>= 3; /* 12.5% */
846 break;
847 }
848 /* Setup the mft zone. */
849 vol->mft_zone_start = vol->mft_zone_pos = vol->mft_lcn;
850 ntfs_debug("vol->mft_zone_pos = 0x%llx", vol->mft_zone_pos);
851 /*
852 * Calculate the mft_lcn for an unmodified NTFS volume (see mkntfs
853 * source) and if the actual mft_lcn is in the expected place or even
854 * further to the front of the volume, extend the mft_zone to cover the
855 * beginning of the volume as well. This is in order to protect the
856 * area reserved for the mft bitmap as well within the mft_zone itself.
857 * On non-standard volumes we do not protect it as the overhead would
858 * be higher than the speed increase we would get by doing it.
859 */
860 mft_lcn = NTFS_B_TO_CLU(vol, 8192 + 2 * vol->cluster_size - 1);
861 if (mft_lcn * vol->cluster_size < 16 * 1024)
862 mft_lcn = (16 * 1024 + vol->cluster_size - 1) >>
863 vol->cluster_size_bits;
864 if (vol->mft_zone_start <= mft_lcn)
865 vol->mft_zone_start = 0;
866 ntfs_debug("vol->mft_zone_start = 0x%llx", vol->mft_zone_start);
867 /*
868 * Need to cap the mft zone on non-standard volumes so that it does
869 * not point outside the boundaries of the volume. We do this by
870 * halving the zone size until we are inside the volume.
871 */
872 vol->mft_zone_end = vol->mft_lcn + mft_zone_size;
873 while (vol->mft_zone_end >= vol->nr_clusters) {
874 mft_zone_size >>= 1;
875 vol->mft_zone_end = vol->mft_lcn + mft_zone_size;
876 }
877 ntfs_debug("vol->mft_zone_end = 0x%llx", vol->mft_zone_end);
878 /*
879 * Set the current position within each data zone to the start of the
880 * respective zone.
881 */
882 vol->data1_zone_pos = vol->mft_zone_end;
883 ntfs_debug("vol->data1_zone_pos = 0x%llx", vol->data1_zone_pos);
884 vol->data2_zone_pos = 0;
885 ntfs_debug("vol->data2_zone_pos = 0x%llx", vol->data2_zone_pos);
886
887 /* Set the mft data allocation position to mft record 24. */
888 vol->mft_data_pos = 24;
889 ntfs_debug("vol->mft_data_pos = 0x%llx", vol->mft_data_pos);
890 }
891
892 static struct lock_class_key mftmirr_runlist_lock_key,
893 mftmirr_mrec_lock_key;
894 /*
895 * load_and_init_mft_mirror - load and setup the mft mirror inode for a volume
896 * @vol: ntfs super block describing device whose mft mirror to load
897 *
898 * Return 'true' on success or 'false' on error.
899 */
load_and_init_mft_mirror(struct ntfs_volume * vol)900 static bool load_and_init_mft_mirror(struct ntfs_volume *vol)
901 {
902 struct inode *tmp_ino;
903 struct ntfs_inode *tmp_ni;
904
905 ntfs_debug("Entering.");
906 /* Get mft mirror inode. */
907 tmp_ino = ntfs_iget(vol->sb, FILE_MFTMirr);
908 if (IS_ERR(tmp_ino)) {
909 if (!IS_ERR(tmp_ino))
910 iput(tmp_ino);
911 /* Caller will display error message. */
912 return false;
913 }
914 lockdep_set_class(&NTFS_I(tmp_ino)->runlist.lock,
915 &mftmirr_runlist_lock_key);
916 lockdep_set_class(&NTFS_I(tmp_ino)->mrec_lock,
917 &mftmirr_mrec_lock_key);
918 /*
919 * Re-initialize some specifics about $MFTMirr's inode as
920 * ntfs_read_inode() will have set up the default ones.
921 */
922 /* Set uid and gid to root. */
923 tmp_ino->i_uid = GLOBAL_ROOT_UID;
924 tmp_ino->i_gid = GLOBAL_ROOT_GID;
925 /* Regular file. No access for anyone. */
926 tmp_ino->i_mode = S_IFREG;
927 /* No VFS initiated operations allowed for $MFTMirr. */
928 tmp_ino->i_op = &ntfs_empty_inode_ops;
929 tmp_ino->i_fop = &ntfs_empty_file_ops;
930 /* Put in our special address space operations. */
931 tmp_ino->i_mapping->a_ops = &ntfs_aops;
932 tmp_ni = NTFS_I(tmp_ino);
933 /* The $MFTMirr, like the $MFT is multi sector transfer protected. */
934 NInoSetMstProtected(tmp_ni);
935 NInoSetSparseDisabled(tmp_ni);
936 /*
937 * Set up our little cheat allowing us to reuse the async read io
938 * completion handler for directories.
939 */
940 tmp_ni->itype.index.block_size = vol->mft_record_size;
941 tmp_ni->itype.index.block_size_bits = vol->mft_record_size_bits;
942 vol->mftmirr_ino = tmp_ino;
943 ntfs_debug("Done.");
944 return true;
945 }
946
947 /*
948 * check_mft_mirror - compare contents of the mft mirror with the mft
949 * @vol: ntfs super block describing device whose mft mirror to check
950 *
951 * Return 'true' on success or 'false' on error.
952 *
953 * Note, this function also results in the mft mirror runlist being completely
954 * mapped into memory. The mft mirror write code requires this and will BUG()
955 * should it find an unmapped runlist element.
956 */
check_mft_mirror(struct ntfs_volume * vol)957 static bool check_mft_mirror(struct ntfs_volume *vol)
958 {
959 struct super_block *sb = vol->sb;
960 struct ntfs_inode *mirr_ni;
961 struct folio *mft_folio = NULL, *mirr_folio = NULL;
962 u8 *kmft = NULL, *kmirr = NULL;
963 struct runlist_element *rl, rl2[2];
964 pgoff_t index;
965 int mrecs_per_page, i;
966
967 ntfs_debug("Entering.");
968 /* Compare contents of $MFT and $MFTMirr. */
969 mrecs_per_page = PAGE_SIZE / vol->mft_record_size;
970 index = i = 0;
971 do {
972 u32 bytes;
973
974 /* Switch pages if necessary. */
975 if (!(i % mrecs_per_page)) {
976 if (index) {
977 kunmap_local(kmirr);
978 folio_put(mirr_folio);
979 kunmap_local(kmft);
980 folio_put(mft_folio);
981 }
982 /* Get the $MFT page. */
983 mft_folio = read_mapping_folio(vol->mft_ino->i_mapping,
984 index, NULL);
985 if (IS_ERR(mft_folio)) {
986 ntfs_error(sb, "Failed to read $MFT.");
987 return false;
988 }
989 kmft = kmap_local_folio(mft_folio, 0);
990 /* Get the $MFTMirr page. */
991 mirr_folio = read_mapping_folio(vol->mftmirr_ino->i_mapping,
992 index, NULL);
993 if (IS_ERR(mirr_folio)) {
994 ntfs_error(sb, "Failed to read $MFTMirr.");
995 goto mft_unmap_out;
996 }
997 kmirr = kmap_local_folio(mirr_folio, 0);
998 ++index;
999 }
1000
1001 /* Do not check the record if it is not in use. */
1002 if (((struct mft_record *)kmft)->flags & MFT_RECORD_IN_USE) {
1003 /* Make sure the record is ok. */
1004 if (ntfs_is_baad_recordp((__le32 *)kmft)) {
1005 ntfs_error(sb,
1006 "Incomplete multi sector transfer detected in mft record %i.",
1007 i);
1008 mm_unmap_out:
1009 kunmap_local(kmirr);
1010 folio_put(mirr_folio);
1011 mft_unmap_out:
1012 kunmap_local(kmft);
1013 folio_put(mft_folio);
1014 return false;
1015 }
1016 }
1017 /* Do not check the mirror record if it is not in use. */
1018 if (((struct mft_record *)kmirr)->flags & MFT_RECORD_IN_USE) {
1019 if (ntfs_is_baad_recordp((__le32 *)kmirr)) {
1020 ntfs_error(sb,
1021 "Incomplete multi sector transfer detected in mft mirror record %i.",
1022 i);
1023 goto mm_unmap_out;
1024 }
1025 }
1026 /* Get the amount of data in the current record. */
1027 bytes = le32_to_cpu(((struct mft_record *)kmft)->bytes_in_use);
1028 if (bytes < sizeof(struct mft_record_old) ||
1029 bytes > vol->mft_record_size ||
1030 ntfs_is_baad_recordp((__le32 *)kmft)) {
1031 bytes = le32_to_cpu(((struct mft_record *)kmirr)->bytes_in_use);
1032 if (bytes < sizeof(struct mft_record_old) ||
1033 bytes > vol->mft_record_size ||
1034 ntfs_is_baad_recordp((__le32 *)kmirr))
1035 bytes = vol->mft_record_size;
1036 }
1037 /* Compare the two records. */
1038 if (memcmp(kmft, kmirr, bytes)) {
1039 ntfs_error(sb,
1040 "$MFT and $MFTMirr record %i do not match. Run chkdsk.",
1041 i);
1042 goto mm_unmap_out;
1043 }
1044 kmft += vol->mft_record_size;
1045 kmirr += vol->mft_record_size;
1046 } while (++i < vol->mftmirr_size);
1047 /* Release the last folios. */
1048 kunmap_local(kmirr);
1049 folio_put(mirr_folio);
1050 kunmap_local(kmft);
1051 folio_put(mft_folio);
1052
1053 /* Construct the mft mirror runlist by hand. */
1054 rl2[0].vcn = 0;
1055 rl2[0].lcn = vol->mftmirr_lcn;
1056 rl2[0].length = NTFS_B_TO_CLU(vol, vol->mftmirr_size * vol->mft_record_size +
1057 vol->cluster_size - 1);
1058 rl2[1].vcn = rl2[0].length;
1059 rl2[1].lcn = LCN_ENOENT;
1060 rl2[1].length = 0;
1061 /*
1062 * Because we have just read all of the mft mirror, we know we have
1063 * mapped the full runlist for it.
1064 */
1065 mirr_ni = NTFS_I(vol->mftmirr_ino);
1066 down_read(&mirr_ni->runlist.lock);
1067 rl = mirr_ni->runlist.rl;
1068 /* Compare the two runlists. They must be identical. */
1069 i = 0;
1070 do {
1071 if (rl2[i].vcn != rl[i].vcn || rl2[i].lcn != rl[i].lcn ||
1072 rl2[i].length != rl[i].length) {
1073 ntfs_error(sb, "$MFTMirr location mismatch. Run chkdsk.");
1074 up_read(&mirr_ni->runlist.lock);
1075 return false;
1076 }
1077 } while (rl2[i++].length);
1078 up_read(&mirr_ni->runlist.lock);
1079 ntfs_debug("Done.");
1080 return true;
1081 }
1082
1083 /*
1084 * load_and_check_logfile - load and check the logfile inode for a volume
1085 * @vol: ntfs volume to load the logfile for
1086 * @rp: on success, set to the restart page header
1087 *
1088 * Return 0 on success or errno on error.
1089 */
load_and_check_logfile(struct ntfs_volume * vol,struct restart_page_header ** rp)1090 static int load_and_check_logfile(struct ntfs_volume *vol,
1091 struct restart_page_header **rp)
1092 {
1093 struct inode *tmp_ino;
1094 int err = 0;
1095
1096 ntfs_debug("Entering.");
1097 tmp_ino = ntfs_iget(vol->sb, FILE_LogFile);
1098 if (IS_ERR(tmp_ino)) {
1099 if (!IS_ERR(tmp_ino))
1100 iput(tmp_ino);
1101 /* Caller will display error message. */
1102 return -ENOENT;
1103 }
1104 if (!ntfs_check_logfile(tmp_ino, rp))
1105 err = -EINVAL;
1106 NInoSetSparseDisabled(NTFS_I(tmp_ino));
1107 vol->logfile_ino = tmp_ino;
1108 ntfs_debug("Done.");
1109 return err;
1110 }
1111
1112 #define NTFS_HIBERFIL_HEADER_SIZE 4096
1113
1114 /*
1115 * check_windows_hibernation_status - check if Windows is suspended on a volume
1116 * @vol: ntfs super block of device to check
1117 *
1118 * Check if Windows is hibernated on the ntfs volume @vol. This is done by
1119 * looking for the file hiberfil.sys in the root directory of the volume. If
1120 * the file is not present Windows is definitely not suspended.
1121 *
1122 * If hiberfil.sys exists and is less than 4kiB in size it means Windows is
1123 * definitely suspended (this volume is not the system volume). Caveat: on a
1124 * system with many volumes it is possible that the < 4kiB check is bogus but
1125 * for now this should do fine.
1126 *
1127 * If hiberfil.sys exists and is larger than 4kiB in size, we need to read the
1128 * hiberfil header (which is the first 4kiB). If this begins with "hibr",
1129 * Windows is definitely suspended. If it is completely full of zeroes,
1130 * Windows is definitely not hibernated. Any other case is treated as if
1131 * Windows is suspended. This caters for the above mentioned caveat of a
1132 * system with many volumes where no "hibr" magic would be present and there is
1133 * no zero header.
1134 *
1135 * Return 0 if Windows is not hibernated on the volume, >0 if Windows is
1136 * hibernated on the volume, and -errno on error.
1137 */
check_windows_hibernation_status(struct ntfs_volume * vol)1138 static int check_windows_hibernation_status(struct ntfs_volume *vol)
1139 {
1140 static const __le16 hiberfil[13] = { cpu_to_le16('h'),
1141 cpu_to_le16('i'), cpu_to_le16('b'),
1142 cpu_to_le16('e'), cpu_to_le16('r'),
1143 cpu_to_le16('f'), cpu_to_le16('i'),
1144 cpu_to_le16('l'), cpu_to_le16('.'),
1145 cpu_to_le16('s'), cpu_to_le16('y'),
1146 cpu_to_le16('s'), 0 };
1147 u64 mref;
1148 struct inode *vi;
1149 struct folio *folio;
1150 u32 *kaddr, *kend, *start_addr = NULL;
1151 struct ntfs_name *name = NULL;
1152 int ret = 1;
1153
1154 ntfs_debug("Entering.");
1155 /*
1156 * Find the inode number for the hibernation file by looking up the
1157 * filename hiberfil.sys in the root directory.
1158 */
1159 inode_lock(vol->root_ino);
1160 mref = ntfs_lookup_inode_by_name(NTFS_I(vol->root_ino), hiberfil, 12,
1161 &name);
1162 inode_unlock(vol->root_ino);
1163 kfree(name);
1164 if (IS_ERR_MREF(mref)) {
1165 ret = MREF_ERR(mref);
1166 /* If the file does not exist, Windows is not hibernated. */
1167 if (ret == -ENOENT) {
1168 ntfs_debug("hiberfil.sys not present. Windows is not hibernated on the volume.");
1169 return 0;
1170 }
1171 /* A real error occurred. */
1172 ntfs_error(vol->sb, "Failed to find inode number for hiberfil.sys.");
1173 return ret;
1174 }
1175 /* Get the inode. */
1176 vi = ntfs_iget(vol->sb, MREF(mref));
1177 if (IS_ERR(vi)) {
1178 if (!IS_ERR(vi))
1179 iput(vi);
1180 ntfs_error(vol->sb, "Failed to load hiberfil.sys.");
1181 return IS_ERR(vi) ? PTR_ERR(vi) : -EIO;
1182 }
1183 if (unlikely(i_size_read(vi) < NTFS_HIBERFIL_HEADER_SIZE)) {
1184 ntfs_debug("hiberfil.sys is smaller than 4kiB (0x%llx). Windows is hibernated on the volume. This is not the system volume.",
1185 i_size_read(vi));
1186 goto iput_out;
1187 }
1188
1189 folio = read_mapping_folio(vi->i_mapping, 0, NULL);
1190 if (IS_ERR(folio)) {
1191 ntfs_error(vol->sb, "Failed to read from hiberfil.sys.");
1192 ret = PTR_ERR(folio);
1193 goto iput_out;
1194 }
1195 start_addr = (u32 *)kmap_local_folio(folio, 0);
1196 kaddr = start_addr;
1197 if (*(__le32 *)kaddr == cpu_to_le32(0x72626968)/*'hibr'*/) {
1198 ntfs_debug("Magic \"hibr\" found in hiberfil.sys. Windows is hibernated on the volume. This is the system volume.");
1199 goto unm_iput_out;
1200 }
1201 kend = kaddr + NTFS_HIBERFIL_HEADER_SIZE/sizeof(*kaddr);
1202 do {
1203 if (unlikely(*kaddr)) {
1204 ntfs_debug("hiberfil.sys is larger than 4kiB (0x%llx), does not contain the \"hibr\" magic, and does not have a zero header. Windows is hibernated on the volume. This is not the system volume.",
1205 i_size_read(vi));
1206 goto unm_iput_out;
1207 }
1208 } while (++kaddr < kend);
1209 ntfs_debug("hiberfil.sys contains a zero header. Windows is not hibernated on the volume. This is the system volume.");
1210 ret = 0;
1211 unm_iput_out:
1212 kunmap_local(start_addr);
1213 folio_put(folio);
1214 iput_out:
1215 iput(vi);
1216 return ret;
1217 }
1218
1219 /*
1220 * load_and_init_attrdef - load the attribute definitions table for a volume
1221 * @vol: ntfs super block describing device whose attrdef to load
1222 *
1223 * Return 'true' on success or 'false' on error.
1224 */
load_and_init_attrdef(struct ntfs_volume * vol)1225 static bool load_and_init_attrdef(struct ntfs_volume *vol)
1226 {
1227 loff_t i_size;
1228 struct super_block *sb = vol->sb;
1229 struct inode *ino;
1230 struct folio *folio;
1231 u8 *addr;
1232 pgoff_t index, max_index;
1233 unsigned int size;
1234
1235 ntfs_debug("Entering.");
1236 /* Read attrdef table and setup vol->attrdef and vol->attrdef_size. */
1237 ino = ntfs_iget(sb, FILE_AttrDef);
1238 if (IS_ERR(ino)) {
1239 if (!IS_ERR(ino))
1240 iput(ino);
1241 goto failed;
1242 }
1243 NInoSetSparseDisabled(NTFS_I(ino));
1244 /* FILE_AttrDef must hold at least one entry and fit inside 31 bits. */
1245 i_size = i_size_read(ino);
1246 if (i_size < (s64)sizeof(struct attr_def) || i_size > 0x7fffffff)
1247 goto iput_failed;
1248 vol->attrdef = kvzalloc(i_size, GFP_NOFS);
1249 if (!vol->attrdef)
1250 goto iput_failed;
1251 index = 0;
1252 max_index = i_size >> PAGE_SHIFT;
1253 size = PAGE_SIZE;
1254 while (index < max_index) {
1255 /* Read the attrdef table and copy it into the linear buffer. */
1256 read_partial_attrdef_page:
1257 folio = read_mapping_folio(ino->i_mapping, index, NULL);
1258 if (IS_ERR(folio))
1259 goto free_iput_failed;
1260 addr = kmap_local_folio(folio, 0);
1261 memcpy((u8 *)vol->attrdef + (index++ << PAGE_SHIFT),
1262 addr, size);
1263 kunmap_local(addr);
1264 folio_put(folio);
1265 }
1266 if (size == PAGE_SIZE) {
1267 size = i_size & ~PAGE_MASK;
1268 if (size)
1269 goto read_partial_attrdef_page;
1270 }
1271 vol->attrdef_size = i_size;
1272 ntfs_debug("Read %llu bytes from $AttrDef.", i_size);
1273 iput(ino);
1274 return true;
1275 free_iput_failed:
1276 kvfree(vol->attrdef);
1277 vol->attrdef = NULL;
1278 iput_failed:
1279 iput(ino);
1280 failed:
1281 ntfs_error(sb, "Failed to initialize attribute definition table.");
1282 return false;
1283 }
1284
1285 /*
1286 * load_and_init_upcase - load the upcase table for an ntfs volume
1287 * @vol: ntfs super block describing device whose upcase to load
1288 *
1289 * Return 'true' on success or 'false' on error.
1290 */
load_and_init_upcase(struct ntfs_volume * vol)1291 static bool load_and_init_upcase(struct ntfs_volume *vol)
1292 {
1293 loff_t i_size;
1294 struct super_block *sb = vol->sb;
1295 struct inode *ino;
1296 struct folio *folio;
1297 u8 *addr;
1298 pgoff_t index, max_index;
1299 unsigned int size;
1300
1301 ntfs_debug("Entering.");
1302 /* Read upcase table and setup vol->upcase and vol->upcase_len. */
1303 ino = ntfs_iget(sb, FILE_UpCase);
1304 if (IS_ERR(ino)) {
1305 if (!IS_ERR(ino))
1306 iput(ino);
1307 goto upcase_failed;
1308 }
1309 /*
1310 * The upcase size must not be above 64k Unicode characters, must not
1311 * be zero and must be a multiple of sizeof(__le16).
1312 */
1313 i_size = i_size_read(ino);
1314 if (!i_size || i_size & (sizeof(__le16) - 1) ||
1315 i_size > 64ULL * 1024 * sizeof(__le16))
1316 goto iput_upcase_failed;
1317 vol->upcase = kvzalloc(i_size, GFP_NOFS);
1318 if (!vol->upcase)
1319 goto iput_upcase_failed;
1320 index = 0;
1321 max_index = i_size >> PAGE_SHIFT;
1322 size = PAGE_SIZE;
1323 while (index < max_index) {
1324 /* Read the upcase table and copy it into the linear buffer. */
1325 read_partial_upcase_page:
1326 folio = read_mapping_folio(ino->i_mapping, index, NULL);
1327 if (IS_ERR(folio))
1328 goto iput_upcase_failed;
1329 addr = kmap_local_folio(folio, 0);
1330 memcpy((char *)vol->upcase + (index++ << PAGE_SHIFT),
1331 addr, size);
1332 kunmap_local(addr);
1333 folio_put(folio);
1334 }
1335 if (size == PAGE_SIZE) {
1336 size = i_size & ~PAGE_MASK;
1337 if (size)
1338 goto read_partial_upcase_page;
1339 }
1340 vol->upcase_len = i_size >> sizeof(unsigned char);
1341 ntfs_debug("Read %llu bytes from $UpCase (expected %zu bytes).",
1342 i_size, 64 * 1024 * sizeof(__le16));
1343 iput(ino);
1344 mutex_lock(&ntfs_lock);
1345 if (!default_upcase) {
1346 ntfs_debug("Using volume specified $UpCase since default is not present.");
1347 mutex_unlock(&ntfs_lock);
1348 return true;
1349 }
1350 if (default_upcase_len == vol->upcase_len &&
1351 !memcmp(vol->upcase, default_upcase,
1352 default_upcase_len * sizeof(*default_upcase))) {
1353 kvfree(vol->upcase);
1354 vol->upcase = default_upcase;
1355 ntfs_nr_upcase_users++;
1356 mutex_unlock(&ntfs_lock);
1357 ntfs_debug("Volume specified $UpCase matches default. Using default.");
1358 return true;
1359 }
1360 mutex_unlock(&ntfs_lock);
1361 ntfs_debug("Using volume specified $UpCase since it does not match the default.");
1362 return true;
1363 iput_upcase_failed:
1364 iput(ino);
1365 kvfree(vol->upcase);
1366 vol->upcase = NULL;
1367 upcase_failed:
1368 mutex_lock(&ntfs_lock);
1369 if (default_upcase) {
1370 vol->upcase = default_upcase;
1371 vol->upcase_len = default_upcase_len;
1372 ntfs_nr_upcase_users++;
1373 mutex_unlock(&ntfs_lock);
1374 ntfs_error(sb, "Failed to load $UpCase from the volume. Using default.");
1375 return true;
1376 }
1377 mutex_unlock(&ntfs_lock);
1378 ntfs_error(sb, "Failed to initialize upcase table.");
1379 return false;
1380 }
1381
1382 /*
1383 * The lcn and mft bitmap inodes are NTFS-internal inodes with
1384 * their own special locking rules:
1385 */
1386 static struct lock_class_key
1387 lcnbmp_runlist_lock_key, lcnbmp_mrec_lock_key,
1388 mftbmp_runlist_lock_key, mftbmp_mrec_lock_key;
1389
1390 /*
1391 * load_system_files - open the system files using normal functions
1392 * @vol: ntfs super block describing device whose system files to load
1393 *
1394 * Open the system files with normal access functions and complete setting up
1395 * the ntfs super block @vol.
1396 *
1397 * Return 'true' on success or 'false' on error.
1398 */
load_system_files(struct ntfs_volume * vol)1399 static bool load_system_files(struct ntfs_volume *vol)
1400 {
1401 struct super_block *sb = vol->sb;
1402 struct mft_record *m;
1403 struct volume_information *vi;
1404 struct ntfs_attr_search_ctx *ctx;
1405 struct restart_page_header *rp;
1406 int err;
1407
1408 ntfs_debug("Entering.");
1409 /* Get mft mirror inode compare the contents of $MFT and $MFTMirr. */
1410 if (!load_and_init_mft_mirror(vol) || !check_mft_mirror(vol)) {
1411 /* If a read-write mount, convert it to a read-only mount. */
1412 if (!sb_rdonly(sb) && vol->on_errors == ON_ERRORS_REMOUNT_RO) {
1413 static const char *es1 = "Failed to load $MFTMirr";
1414 static const char *es2 = "$MFTMirr does not match $MFT";
1415 static const char *es3 = ". Run ntfsck and/or chkdsk.";
1416
1417 sb->s_flags |= SB_RDONLY;
1418 ntfs_error(sb, "%s. Mounting read-only%s",
1419 !vol->mftmirr_ino ? es1 : es2, es3);
1420 }
1421 NVolSetErrors(vol);
1422 }
1423 /* Get mft bitmap attribute inode. */
1424 vol->mftbmp_ino = ntfs_attr_iget(vol->mft_ino, AT_BITMAP, NULL, 0);
1425 if (IS_ERR(vol->mftbmp_ino)) {
1426 ntfs_error(sb, "Failed to load $MFT/$BITMAP attribute.");
1427 goto iput_mirr_err_out;
1428 }
1429 lockdep_set_class(&NTFS_I(vol->mftbmp_ino)->runlist.lock,
1430 &mftbmp_runlist_lock_key);
1431 lockdep_set_class(&NTFS_I(vol->mftbmp_ino)->mrec_lock,
1432 &mftbmp_mrec_lock_key);
1433 /* Read upcase table and setup @vol->upcase and @vol->upcase_len. */
1434 if (!load_and_init_upcase(vol))
1435 goto iput_mftbmp_err_out;
1436 /*
1437 * Read attribute definitions table and setup @vol->attrdef and
1438 * @vol->attrdef_size.
1439 */
1440 if (!load_and_init_attrdef(vol))
1441 goto iput_upcase_err_out;
1442 /*
1443 * Get the cluster allocation bitmap inode and verify the size, no
1444 * need for any locking at this stage as we are already running
1445 * exclusively as we are mount in progress task.
1446 */
1447 vol->lcnbmp_ino = ntfs_iget(sb, FILE_Bitmap);
1448 if (IS_ERR(vol->lcnbmp_ino)) {
1449 if (!IS_ERR(vol->lcnbmp_ino))
1450 iput(vol->lcnbmp_ino);
1451 goto bitmap_failed;
1452 }
1453 lockdep_set_class(&NTFS_I(vol->lcnbmp_ino)->runlist.lock,
1454 &lcnbmp_runlist_lock_key);
1455 lockdep_set_class(&NTFS_I(vol->lcnbmp_ino)->mrec_lock,
1456 &lcnbmp_mrec_lock_key);
1457
1458 NInoSetSparseDisabled(NTFS_I(vol->lcnbmp_ino));
1459 if ((vol->nr_clusters + 7) >> 3 > i_size_read(vol->lcnbmp_ino)) {
1460 iput(vol->lcnbmp_ino);
1461 bitmap_failed:
1462 ntfs_error(sb, "Failed to load $Bitmap.");
1463 goto iput_attrdef_err_out;
1464 }
1465 /*
1466 * Get the volume inode and setup our cache of the volume flags and
1467 * version.
1468 */
1469 vol->vol_ino = ntfs_iget(sb, FILE_Volume);
1470 if (IS_ERR(vol->vol_ino)) {
1471 if (!IS_ERR(vol->vol_ino))
1472 iput(vol->vol_ino);
1473 volume_failed:
1474 ntfs_error(sb, "Failed to load $Volume.");
1475 goto iput_lcnbmp_err_out;
1476 }
1477 m = map_mft_record(NTFS_I(vol->vol_ino));
1478 if (IS_ERR(m)) {
1479 iput_volume_failed:
1480 iput(vol->vol_ino);
1481 goto volume_failed;
1482 }
1483
1484 ctx = ntfs_attr_get_search_ctx(NTFS_I(vol->vol_ino), m);
1485 if (!ctx) {
1486 ntfs_error(sb, "Failed to get attribute search context.");
1487 goto get_ctx_vol_failed;
1488 }
1489
1490 if (!ntfs_attr_lookup(AT_VOLUME_NAME, NULL, 0, 0, 0, NULL, 0, ctx) &&
1491 !ctx->attr->non_resident &&
1492 !(ctx->attr->flags & (ATTR_IS_SPARSE | ATTR_IS_COMPRESSED)) &&
1493 le32_to_cpu(ctx->attr->data.resident.value_length) > 0) {
1494 err = ntfs_ucstonls(vol, (__le16 *)((u8 *)ctx->attr +
1495 le16_to_cpu(ctx->attr->data.resident.value_offset)),
1496 le32_to_cpu(ctx->attr->data.resident.value_length) / 2,
1497 &vol->volume_label, NTFS_MAX_LABEL_LEN);
1498 if (err < 0)
1499 vol->volume_label = NULL;
1500 }
1501
1502 ntfs_attr_reinit_search_ctx(ctx);
1503 if (ntfs_attr_lookup(AT_VOLUME_INFORMATION, NULL, 0, 0, 0, NULL, 0,
1504 ctx) || ctx->attr->non_resident || ctx->attr->flags) {
1505 ntfs_attr_put_search_ctx(ctx);
1506 get_ctx_vol_failed:
1507 unmap_mft_record(NTFS_I(vol->vol_ino));
1508 goto iput_volume_failed;
1509 }
1510 vi = (struct volume_information *)((char *)ctx->attr +
1511 le16_to_cpu(ctx->attr->data.resident.value_offset));
1512 /* Copy the volume flags and version to the struct ntfs_volume structure. */
1513 vol->vol_flags = vi->flags;
1514 vol->major_ver = vi->major_ver;
1515 vol->minor_ver = vi->minor_ver;
1516 ntfs_attr_put_search_ctx(ctx);
1517 unmap_mft_record(NTFS_I(vol->vol_ino));
1518 pr_info("volume version %i.%i, dev %s, cluster size %d\n",
1519 vol->major_ver, vol->minor_ver, sb->s_id, vol->cluster_size);
1520
1521 /* Make sure that no unsupported volume flags are set. */
1522 if (vol->vol_flags & VOLUME_MUST_MOUNT_RO_MASK) {
1523 static const char *es1a = "Volume is dirty";
1524 static const char *es1b = "Volume has been modified by chkdsk";
1525 static const char *es1c = "Volume has unsupported flags set";
1526 static const char *es2a = ". Run chkdsk and mount in Windows.";
1527 static const char *es2b = ". Mount in Windows.";
1528 const char *es1, *es2;
1529
1530 es2 = es2a;
1531 if (vol->vol_flags & VOLUME_IS_DIRTY)
1532 es1 = es1a;
1533 else if (vol->vol_flags & VOLUME_MODIFIED_BY_CHKDSK) {
1534 es1 = es1b;
1535 es2 = es2b;
1536 } else {
1537 es1 = es1c;
1538 ntfs_warning(sb, "Unsupported volume flags 0x%x encountered.",
1539 (unsigned int)le16_to_cpu(vol->vol_flags));
1540 }
1541 /* If a read-write mount, convert it to a read-only mount. */
1542 if (!sb_rdonly(sb) && vol->on_errors == ON_ERRORS_REMOUNT_RO) {
1543 sb->s_flags |= SB_RDONLY;
1544 ntfs_error(sb, "%s. Mounting read-only%s", es1, es2);
1545 }
1546 /*
1547 * Do not set NVolErrors() because ntfs_remount() re-checks the
1548 * flags which we need to do in case any flags have changed.
1549 */
1550 }
1551 /*
1552 * Get the inode for the logfile, check it and determine if the volume
1553 * was shutdown cleanly.
1554 */
1555 rp = NULL;
1556 err = load_and_check_logfile(vol, &rp);
1557 if (err) {
1558 /* If a read-write mount, convert it to a read-only mount. */
1559 if (!sb_rdonly(sb) && vol->on_errors == ON_ERRORS_REMOUNT_RO) {
1560 sb->s_flags |= SB_RDONLY;
1561 ntfs_error(sb, "Failed to load LogFile. Mounting read-only.");
1562 }
1563 NVolSetErrors(vol);
1564 }
1565
1566 kvfree(rp);
1567 /* Get the root directory inode so we can do path lookups. */
1568 vol->root_ino = ntfs_iget(sb, FILE_root);
1569 if (IS_ERR(vol->root_ino)) {
1570 if (!IS_ERR(vol->root_ino))
1571 iput(vol->root_ino);
1572 ntfs_error(sb, "Failed to load root directory.");
1573 goto iput_logfile_err_out;
1574 }
1575 /*
1576 * Check if Windows is suspended to disk on the target volume. If it
1577 * is hibernated, we must not write *anything* to the disk so set
1578 * NVolErrors() without setting the dirty volume flag and mount
1579 * read-only. This will prevent read-write remounting and it will also
1580 * prevent all writes.
1581 */
1582 err = check_windows_hibernation_status(vol);
1583 if (unlikely(err)) {
1584 static const char *es1a = "Failed to determine if Windows is hibernated";
1585 static const char *es1b = "Windows is hibernated";
1586 static const char *es2 = ". Run chkdsk.";
1587 const char *es1;
1588
1589 es1 = err < 0 ? es1a : es1b;
1590 /* If a read-write mount, convert it to a read-only mount. */
1591 if (!sb_rdonly(sb) && vol->on_errors == ON_ERRORS_REMOUNT_RO) {
1592 sb->s_flags |= SB_RDONLY;
1593 ntfs_error(sb, "%s. Mounting read-only%s", es1, es2);
1594 }
1595 NVolSetErrors(vol);
1596 }
1597
1598 /* If (still) a read-write mount, empty the logfile. */
1599 if (!sb_rdonly(sb) &&
1600 vol->logfile_ino && !ntfs_empty_logfile(vol->logfile_ino) &&
1601 vol->on_errors == ON_ERRORS_REMOUNT_RO) {
1602 static const char *es1 = "Failed to empty LogFile";
1603 static const char *es2 = ". Mount in Windows.";
1604
1605 /* Convert to a read-only mount. */
1606 ntfs_error(sb, "%s. Mounting read-only%s", es1, es2);
1607 sb->s_flags |= SB_RDONLY;
1608 NVolSetErrors(vol);
1609 }
1610 /* If on NTFS versions before 3.0, we are done. */
1611 if (unlikely(vol->major_ver < 3))
1612 return true;
1613 /* NTFS 3.0+ specific initialization. */
1614 /* Get the security descriptors inode. */
1615 vol->secure_ino = ntfs_iget(sb, FILE_Secure);
1616 if (IS_ERR(vol->secure_ino)) {
1617 if (!IS_ERR(vol->secure_ino))
1618 iput(vol->secure_ino);
1619 ntfs_error(sb, "Failed to load $Secure.");
1620 goto iput_root_err_out;
1621 }
1622 /* Get the extended system files' directory inode. */
1623 vol->extend_ino = ntfs_iget(sb, FILE_Extend);
1624 if (IS_ERR(vol->extend_ino) ||
1625 !S_ISDIR(vol->extend_ino->i_mode)) {
1626 if (!IS_ERR(vol->extend_ino))
1627 iput(vol->extend_ino);
1628 ntfs_error(sb, "Failed to load $Extend.");
1629 goto iput_sec_err_out;
1630 }
1631 return true;
1632
1633 iput_sec_err_out:
1634 iput(vol->secure_ino);
1635 iput_root_err_out:
1636 iput(vol->root_ino);
1637 iput_logfile_err_out:
1638 if (vol->logfile_ino)
1639 iput(vol->logfile_ino);
1640 iput(vol->vol_ino);
1641 iput_lcnbmp_err_out:
1642 iput(vol->lcnbmp_ino);
1643 iput_attrdef_err_out:
1644 vol->attrdef_size = 0;
1645 if (vol->attrdef) {
1646 kvfree(vol->attrdef);
1647 vol->attrdef = NULL;
1648 }
1649 iput_upcase_err_out:
1650 vol->upcase_len = 0;
1651 mutex_lock(&ntfs_lock);
1652 if (vol->upcase && vol->upcase == default_upcase) {
1653 ntfs_nr_upcase_users--;
1654 vol->upcase = NULL;
1655 }
1656 mutex_unlock(&ntfs_lock);
1657 if (vol->upcase) {
1658 kvfree(vol->upcase);
1659 vol->upcase = NULL;
1660 }
1661 iput_mftbmp_err_out:
1662 iput(vol->mftbmp_ino);
1663 iput_mirr_err_out:
1664 iput(vol->mftmirr_ino);
1665 return false;
1666 }
1667
ntfs_volume_free(struct ntfs_volume * vol)1668 static void ntfs_volume_free(struct ntfs_volume *vol)
1669 {
1670 /* Throw away the table of attribute definitions. */
1671 vol->attrdef_size = 0;
1672 if (vol->attrdef) {
1673 kvfree(vol->attrdef);
1674 vol->attrdef = NULL;
1675 }
1676 vol->upcase_len = 0;
1677 /*
1678 * Destroy the global default upcase table if necessary. Also decrease
1679 * the number of upcase users if we are a user.
1680 */
1681 mutex_lock(&ntfs_lock);
1682 if (vol->upcase && vol->upcase == default_upcase) {
1683 ntfs_nr_upcase_users--;
1684 vol->upcase = NULL;
1685 }
1686
1687 if (!ntfs_nr_upcase_users) {
1688 kvfree(default_upcase);
1689 default_upcase = NULL;
1690 }
1691
1692 free_compression_buffers();
1693
1694 mutex_unlock(&ntfs_lock);
1695 if (vol->upcase) {
1696 kvfree(vol->upcase);
1697 vol->upcase = NULL;
1698 }
1699
1700 unload_nls(vol->nls_map);
1701
1702 kvfree(vol->lcn_empty_bits_per_page);
1703 kfree(vol->volume_label);
1704 kfree(vol);
1705 }
1706
1707 /*
1708 * ntfs_put_super - called by the vfs to unmount a volume
1709 * @sb: vfs superblock of volume to unmount
1710 */
ntfs_put_super(struct super_block * sb)1711 static void ntfs_put_super(struct super_block *sb)
1712 {
1713 struct ntfs_volume *vol = NTFS_SB(sb);
1714
1715 pr_info("Entering %s, dev %s\n", __func__, sb->s_id);
1716
1717 cancel_work_sync(&vol->precalc_work);
1718
1719 /*
1720 * Commit all inodes while they are still open in case some of them
1721 * cause others to be dirtied.
1722 */
1723 ntfs_commit_inode(vol->vol_ino);
1724
1725 /* NTFS 3.0+ specific. */
1726 if (vol->major_ver >= 3) {
1727 if (vol->extend_ino)
1728 ntfs_commit_inode(vol->extend_ino);
1729 if (vol->secure_ino)
1730 ntfs_commit_inode(vol->secure_ino);
1731 }
1732
1733 ntfs_commit_inode(vol->root_ino);
1734
1735 ntfs_commit_inode(vol->lcnbmp_ino);
1736
1737 /*
1738 * the GFP_NOFS scope is not needed because ntfs_commit_inode
1739 * does nothing
1740 */
1741 ntfs_commit_inode(vol->mftbmp_ino);
1742
1743 if (vol->logfile_ino)
1744 ntfs_commit_inode(vol->logfile_ino);
1745
1746 if (vol->mftmirr_ino)
1747 ntfs_commit_inode(vol->mftmirr_ino);
1748 ntfs_commit_inode(vol->mft_ino);
1749
1750 /*
1751 * If a read-write mount and no volume errors have occurred, mark the
1752 * volume clean. Also, re-commit all affected inodes.
1753 */
1754 if (!sb_rdonly(sb)) {
1755 if (!NVolErrors(vol)) {
1756 if (ntfs_clear_volume_flags(vol, VOLUME_IS_DIRTY))
1757 ntfs_warning(sb,
1758 "Failed to clear dirty bit in volume information flags. Run chkdsk.");
1759 ntfs_commit_inode(vol->vol_ino);
1760 ntfs_commit_inode(vol->root_ino);
1761 if (vol->mftmirr_ino)
1762 ntfs_commit_inode(vol->mftmirr_ino);
1763 ntfs_commit_inode(vol->mft_ino);
1764 } else {
1765 ntfs_warning(sb,
1766 "Volume has errors. Leaving volume marked dirty. Run chkdsk.");
1767 }
1768 }
1769
1770 iput(vol->vol_ino);
1771 vol->vol_ino = NULL;
1772
1773 /* NTFS 3.0+ specific clean up. */
1774 if (vol->major_ver >= 3) {
1775 if (vol->extend_ino) {
1776 iput(vol->extend_ino);
1777 vol->extend_ino = NULL;
1778 }
1779 if (vol->secure_ino) {
1780 iput(vol->secure_ino);
1781 vol->secure_ino = NULL;
1782 }
1783 }
1784
1785 iput(vol->root_ino);
1786 vol->root_ino = NULL;
1787
1788 iput(vol->lcnbmp_ino);
1789 vol->lcnbmp_ino = NULL;
1790
1791 iput(vol->mftbmp_ino);
1792 vol->mftbmp_ino = NULL;
1793
1794 if (vol->logfile_ino) {
1795 iput(vol->logfile_ino);
1796 vol->logfile_ino = NULL;
1797 }
1798 if (vol->mftmirr_ino) {
1799 /* Re-commit the mft mirror and mft just in case. */
1800 ntfs_commit_inode(vol->mftmirr_ino);
1801 ntfs_commit_inode(vol->mft_ino);
1802 iput(vol->mftmirr_ino);
1803 vol->mftmirr_ino = NULL;
1804 }
1805 /*
1806 * We should have no dirty inodes left, due to
1807 * mft.c::ntfs_mft_writepage() cleaning all the dirty pages as
1808 * the underlying mft records are written out and cleaned.
1809 */
1810 ntfs_commit_inode(vol->mft_ino);
1811 write_inode_now(vol->mft_ino, 1);
1812
1813 iput(vol->mft_ino);
1814 vol->mft_ino = NULL;
1815 blkdev_issue_flush(sb->s_bdev);
1816
1817 ntfs_volume_free(vol);
1818 }
1819
ntfs_force_shutdown(struct super_block * sb,u32 flags)1820 int ntfs_force_shutdown(struct super_block *sb, u32 flags)
1821 {
1822 struct ntfs_volume *vol = NTFS_SB(sb);
1823 int ret;
1824
1825 if (NVolShutdown(vol))
1826 return 0;
1827
1828 switch (flags) {
1829 case FS_SHUTDOWN_FLAGS_DEFAULT:
1830 case FS_SHUTDOWN_FLAGS_LOGFLUSH:
1831 ret = bdev_freeze(sb->s_bdev);
1832 if (ret)
1833 return ret;
1834 bdev_thaw(sb->s_bdev);
1835 NVolSetShutdown(vol);
1836 break;
1837 case FS_SHUTDOWN_FLAGS_NOLOGFLUSH:
1838 NVolSetShutdown(vol);
1839 break;
1840 default:
1841 return -EINVAL;
1842 }
1843
1844 return 0;
1845 }
1846
ntfs_shutdown(struct super_block * sb)1847 static void ntfs_shutdown(struct super_block *sb)
1848 {
1849 ntfs_force_shutdown(sb, FS_SHUTDOWN_FLAGS_NOLOGFLUSH);
1850
1851 }
1852
ntfs_sync_fs(struct super_block * sb,int wait)1853 static int ntfs_sync_fs(struct super_block *sb, int wait)
1854 {
1855 struct ntfs_volume *vol = NTFS_SB(sb);
1856 int err = 0;
1857
1858 if (NVolShutdown(vol))
1859 return -EIO;
1860
1861 if (!wait)
1862 return 0;
1863
1864 /* If there are some dirty buffers in the bdev inode */
1865 if (!NVolErrors(vol) &&
1866 ntfs_clear_volume_flags(vol, VOLUME_IS_DIRTY)) {
1867 ntfs_warning(sb, "Failed to clear dirty bit in volume information flags. Run chkdsk.");
1868 err = -EIO;
1869 }
1870 sync_inodes_sb(sb);
1871 sync_blockdev(sb->s_bdev);
1872 blkdev_issue_flush(sb->s_bdev);
1873 return err;
1874 }
1875
1876 /*
1877 * get_nr_free_clusters - return the number of free clusters on a volume
1878 * @vol: ntfs volume for which to obtain free cluster count
1879 *
1880 * Calculate the number of free clusters on the mounted NTFS volume @vol. We
1881 * actually calculate the number of clusters in use instead because this
1882 * allows us to not care about partial pages as these will be just zero filled
1883 * and hence not be counted as allocated clusters.
1884 *
1885 * The only particularity is that clusters beyond the end of the logical ntfs
1886 * volume will be marked as allocated to prevent errors which means we have to
1887 * discount those at the end. This is important as the cluster bitmap always
1888 * has a size in multiples of 8 bytes, i.e. up to 63 clusters could be outside
1889 * the logical volume and marked in use when they are not as they do not exist.
1890 *
1891 * If any pages cannot be read we assume all clusters in the erroring pages are
1892 * in use. This means we return an underestimate on errors which is better than
1893 * an overestimate.
1894 */
get_nr_free_clusters(struct ntfs_volume * vol)1895 s64 get_nr_free_clusters(struct ntfs_volume *vol)
1896 {
1897 s64 nr_free = vol->nr_clusters;
1898 u32 nr_used;
1899 struct address_space *mapping = vol->lcnbmp_ino->i_mapping;
1900 struct folio *folio;
1901 pgoff_t index, max_index;
1902 struct file_ra_state ra = { 0 };
1903
1904 ntfs_debug("Entering.");
1905 /* Serialize accesses to the cluster bitmap. */
1906
1907 if (NVolFreeClusterKnown(vol))
1908 return atomic64_read(&vol->free_clusters);
1909
1910 file_ra_state_init(&ra, mapping);
1911
1912 /*
1913 * Convert the number of bits into bytes rounded up, then convert into
1914 * multiples of PAGE_SIZE, rounding up so that if we have one
1915 * full and one partial page max_index = 2.
1916 */
1917 max_index = (((vol->nr_clusters + 7) >> 3) + PAGE_SIZE - 1) >>
1918 PAGE_SHIFT;
1919 /* Use multiples of 4 bytes, thus max_size is PAGE_SIZE / 4. */
1920 ntfs_debug("Reading $Bitmap, max_index = 0x%lx, max_size = 0x%lx.",
1921 max_index, PAGE_SIZE / 4);
1922 for (index = 0; index < max_index; index++) {
1923 unsigned long *kaddr;
1924
1925 /*
1926 * Get folio from page cache, getting it from backing store
1927 * if necessary, and increment the use count.
1928 */
1929 folio = ntfs_get_locked_folio(mapping, index, max_index, &ra);
1930
1931 /* Ignore pages which errored synchronously. */
1932 if (IS_ERR(folio)) {
1933 ntfs_debug("Skipping page (index 0x%lx).", index);
1934 nr_free -= PAGE_SIZE * 8;
1935 vol->lcn_empty_bits_per_page[index] = 0;
1936 continue;
1937 }
1938
1939 kaddr = kmap_local_folio(folio, 0);
1940 /*
1941 * Subtract the number of set bits. If this
1942 * is the last page and it is partial we don't really care as
1943 * it just means we do a little extra work but it won't affect
1944 * the result as all out of range bytes are set to zero by
1945 * ntfs_readpage().
1946 */
1947 nr_used = bitmap_weight(kaddr, PAGE_SIZE * BITS_PER_BYTE);
1948 nr_free -= nr_used;
1949 vol->lcn_empty_bits_per_page[index] = PAGE_SIZE * BITS_PER_BYTE - nr_used;
1950 kunmap_local(kaddr);
1951 folio_unlock(folio);
1952 folio_put(folio);
1953 }
1954 ntfs_debug("Finished reading $Bitmap, last index = 0x%lx.", index - 1);
1955 /*
1956 * Fixup for eventual bits outside logical ntfs volume (see function
1957 * description above).
1958 */
1959 if (vol->nr_clusters & 63)
1960 nr_free += 64 - (vol->nr_clusters & 63);
1961
1962 /* If errors occurred we may well have gone below zero, fix this. */
1963 if (nr_free < 0)
1964 nr_free = 0;
1965 else
1966 atomic64_set(&vol->free_clusters, nr_free);
1967
1968 NVolSetFreeClusterKnown(vol);
1969 wake_up_all(&vol->free_waitq);
1970 ntfs_debug("Exiting.");
1971 return nr_free;
1972 }
1973
1974 /*
1975 * @nr_clusters is the number of clusters requested for allocation.
1976 *
1977 * Return the number of clusters available for allocation within
1978 * the range of @nr_clusters, which is counts that considered
1979 * for delayed allocation.
1980 */
ntfs_available_clusters_count(struct ntfs_volume * vol,s64 nr_clusters)1981 s64 ntfs_available_clusters_count(struct ntfs_volume *vol, s64 nr_clusters)
1982 {
1983 s64 free_clusters;
1984
1985 /* wait event */
1986 if (!NVolFreeClusterKnown(vol))
1987 wait_event(vol->free_waitq, NVolFreeClusterKnown(vol));
1988
1989 free_clusters = atomic64_read(&vol->free_clusters) -
1990 atomic64_read(&vol->dirty_clusters);
1991 if (free_clusters <= 0)
1992 return -ENOSPC;
1993 else if (free_clusters < nr_clusters)
1994 nr_clusters = free_clusters;
1995
1996 return nr_clusters;
1997 }
1998
1999 /*
2000 * __get_nr_free_mft_records - return the number of free inodes on a volume
2001 * @vol: ntfs volume for which to obtain free inode count
2002 * @nr_free: number of mft records in filesystem
2003 * @max_index: maximum number of pages containing set bits
2004 *
2005 * Calculate the number of free mft records (inodes) on the mounted NTFS
2006 * volume @vol. We actually calculate the number of mft records in use instead
2007 * because this allows us to not care about partial pages as these will be just
2008 * zero filled and hence not be counted as allocated mft record.
2009 *
2010 * If any pages cannot be read we assume all mft records in the erroring pages
2011 * are in use. This means we return an underestimate on errors which is better
2012 * than an overestimate.
2013 *
2014 * NOTE: Caller must hold mftbmp_lock rw_semaphore for reading or writing.
2015 */
__get_nr_free_mft_records(struct ntfs_volume * vol,s64 nr_free,const pgoff_t max_index)2016 static unsigned long __get_nr_free_mft_records(struct ntfs_volume *vol,
2017 s64 nr_free, const pgoff_t max_index)
2018 {
2019 struct address_space *mapping = vol->mftbmp_ino->i_mapping;
2020 struct folio *folio;
2021 pgoff_t index;
2022 struct file_ra_state ra = { 0 };
2023
2024 ntfs_debug("Entering.");
2025
2026 file_ra_state_init(&ra, mapping);
2027
2028 /* Use multiples of 4 bytes, thus max_size is PAGE_SIZE / 4. */
2029 ntfs_debug("Reading $MFT/$BITMAP, max_index = 0x%lx, max_size = 0x%lx.",
2030 max_index, PAGE_SIZE / 4);
2031 for (index = 0; index < max_index; index++) {
2032 unsigned long *kaddr;
2033
2034 /*
2035 * Get folio from page cache, getting it from backing store
2036 * if necessary, and increment the use count.
2037 */
2038 folio = ntfs_get_locked_folio(mapping, index, max_index, &ra);
2039
2040 /* Ignore pages which errored synchronously. */
2041 if (IS_ERR(folio)) {
2042 ntfs_debug("read_mapping_page() error. Skipping page (index 0x%lx).",
2043 index);
2044 nr_free -= PAGE_SIZE * 8;
2045 continue;
2046 }
2047
2048 kaddr = kmap_local_folio(folio, 0);
2049 /*
2050 * Subtract the number of set bits. If this
2051 * is the last page and it is partial we don't really care as
2052 * it just means we do a little extra work but it won't affect
2053 * the result as all out of range bytes are set to zero by
2054 * ntfs_readpage().
2055 */
2056 nr_free -= bitmap_weight(kaddr,
2057 PAGE_SIZE * BITS_PER_BYTE);
2058 kunmap_local(kaddr);
2059 folio_unlock(folio);
2060 folio_put(folio);
2061 }
2062 ntfs_debug("Finished reading $MFT/$BITMAP, last index = 0x%lx.",
2063 index - 1);
2064 /* If errors occurred we may well have gone below zero, fix this. */
2065 if (nr_free < 0)
2066 nr_free = 0;
2067 else
2068 atomic64_set(&vol->free_mft_records, nr_free);
2069
2070 ntfs_debug("Exiting.");
2071 return nr_free;
2072 }
2073
2074 /*
2075 * ntfs_statfs - return information about mounted NTFS volume
2076 * @dentry: dentry from mounted volume
2077 * @sfs: statfs structure in which to return the information
2078 *
2079 * Return information about the mounted NTFS volume @dentry in the statfs structure
2080 * pointed to by @sfs (this is initialized with zeros before ntfs_statfs is
2081 * called). We interpret the values to be correct of the moment in time at
2082 * which we are called. Most values are variable otherwise and this isn't just
2083 * the free values but the totals as well. For example we can increase the
2084 * total number of file nodes if we run out and we can keep doing this until
2085 * there is no more space on the volume left at all.
2086 *
2087 * Called from vfs_statfs which is used to handle the statfs, fstatfs, and
2088 * ustat system calls.
2089 *
2090 * Return 0 on success or -errno on error.
2091 */
ntfs_statfs(struct dentry * dentry,struct kstatfs * sfs)2092 static int ntfs_statfs(struct dentry *dentry, struct kstatfs *sfs)
2093 {
2094 struct super_block *sb = dentry->d_sb;
2095 s64 size;
2096 struct ntfs_volume *vol = NTFS_SB(sb);
2097 struct ntfs_inode *mft_ni = NTFS_I(vol->mft_ino);
2098 unsigned long flags;
2099
2100 ntfs_debug("Entering.");
2101 /* Type of filesystem. */
2102 sfs->f_type = NTFS_SB_MAGIC;
2103 /* Optimal transfer block size. */
2104 sfs->f_bsize = vol->cluster_size;
2105 /* Fundamental file system block size, used as the unit. */
2106 sfs->f_frsize = vol->cluster_size;
2107
2108 /*
2109 * Total data blocks in filesystem in units of f_bsize and since
2110 * inodes are also stored in data blocs ($MFT is a file) this is just
2111 * the total clusters.
2112 */
2113 sfs->f_blocks = vol->nr_clusters;
2114
2115 /* wait event */
2116 if (!NVolFreeClusterKnown(vol))
2117 wait_event(vol->free_waitq, NVolFreeClusterKnown(vol));
2118
2119 /* Free data blocks in filesystem in units of f_bsize. */
2120 size = atomic64_read(&vol->free_clusters) -
2121 atomic64_read(&vol->dirty_clusters);
2122 if (size < 0LL)
2123 size = 0LL;
2124
2125 /* Free blocks avail to non-superuser, same as above on NTFS. */
2126 sfs->f_bavail = sfs->f_bfree = size;
2127
2128 /* Number of inodes in filesystem (at this point in time). */
2129 read_lock_irqsave(&mft_ni->size_lock, flags);
2130 sfs->f_files = i_size_read(vol->mft_ino) >> vol->mft_record_size_bits;
2131 read_unlock_irqrestore(&mft_ni->size_lock, flags);
2132
2133 /* Free inodes in fs (based on current total count). */
2134 sfs->f_ffree = atomic64_read(&vol->free_mft_records);
2135
2136 /*
2137 * File system id. This is extremely *nix flavour dependent and even
2138 * within Linux itself all fs do their own thing. I interpret this to
2139 * mean a unique id associated with the mounted fs and not the id
2140 * associated with the filesystem driver, the latter is already given
2141 * by the filesystem type in sfs->f_type. Thus we use the 64-bit
2142 * volume serial number splitting it into two 32-bit parts. We enter
2143 * the least significant 32-bits in f_fsid[0] and the most significant
2144 * 32-bits in f_fsid[1].
2145 */
2146 sfs->f_fsid = u64_to_fsid(vol->serial_no);
2147 /* Maximum length of filenames. */
2148 sfs->f_namelen = NTFS_MAX_NAME_LEN;
2149
2150 return 0;
2151 }
2152
ntfs_write_inode(struct inode * vi,struct writeback_control * wbc)2153 static int ntfs_write_inode(struct inode *vi, struct writeback_control *wbc)
2154 {
2155 return __ntfs_write_inode(vi, wbc->sync_mode == WB_SYNC_ALL);
2156 }
2157
2158 /*
2159 * The complete super operations.
2160 */
2161 static const struct super_operations ntfs_sops = {
2162 .alloc_inode = ntfs_alloc_big_inode, /* VFS: Allocate new inode. */
2163 .free_inode = ntfs_free_big_inode, /* VFS: Deallocate inode. */
2164 .drop_inode = ntfs_drop_big_inode,
2165 .write_inode = ntfs_write_inode, /* VFS: Write dirty inode to disk. */
2166 .put_super = ntfs_put_super, /* Syscall: umount. */
2167 .shutdown = ntfs_shutdown,
2168 .sync_fs = ntfs_sync_fs, /* Syscall: sync. */
2169 .statfs = ntfs_statfs, /* Syscall: statfs */
2170 .evict_inode = ntfs_evict_big_inode,
2171 .show_options = ntfs_show_options, /* Show mount options in proc. */
2172 };
2173
precalc_free_clusters(struct work_struct * work)2174 static void precalc_free_clusters(struct work_struct *work)
2175 {
2176 struct ntfs_volume *vol = container_of(work, struct ntfs_volume, precalc_work);
2177 s64 nr_free;
2178
2179 nr_free = get_nr_free_clusters(vol);
2180
2181 ntfs_debug("pre-calculate free clusters(%lld) using workqueue",
2182 nr_free);
2183 }
2184
2185 static struct lock_class_key ntfs_mft_inval_lock_key;
2186
2187 /*
2188 * ntfs_fill_super - mount an ntfs filesystem
2189 * @sb: super block of the device to mount
2190 * @fc: filesystem context containing mount options
2191 *
2192 * ntfs_fill_super() is called by the VFS to mount the device described by @sb
2193 * with the mount otions in @data with the NTFS filesystem.
2194 *
2195 * If @silent is true, remain silent even if errors are detected. This is used
2196 * during bootup, when the kernel tries to mount the root filesystem with all
2197 * registered filesystems one after the other until one succeeds. This implies
2198 * that all filesystems except the correct one will quite correctly and
2199 * expectedly return an error, but nobody wants to see error messages when in
2200 * fact this is what is supposed to happen.
2201 */
ntfs_fill_super(struct super_block * sb,struct fs_context * fc)2202 static int ntfs_fill_super(struct super_block *sb, struct fs_context *fc)
2203 {
2204 char *boot;
2205 struct inode *tmp_ino;
2206 int blocksize, result;
2207 pgoff_t lcn_bit_pages;
2208 struct ntfs_volume *vol = NTFS_SB(sb);
2209 int silent = fc->sb_flags & SB_SILENT;
2210
2211 vol->sb = sb;
2212
2213 /*
2214 * We do a pretty difficult piece of bootstrap by reading the
2215 * MFT (and other metadata) from disk into memory. We'll only
2216 * release this metadata during umount, so the locking patterns
2217 * observed during bootstrap do not count. So turn off the
2218 * observation of locking patterns (strictly for this context
2219 * only) while mounting NTFS. [The validator is still active
2220 * otherwise, even for this context: it will for example record
2221 * lock class registrations.]
2222 */
2223 lockdep_off();
2224 ntfs_debug("Entering.");
2225
2226 if (vol->nls_map && !strcmp(vol->nls_map->charset, "utf8"))
2227 vol->nls_utf8 = true;
2228 if (NVolDisableSparse(vol))
2229 vol->preallocated_size = 0;
2230
2231 if (NVolDiscard(vol) && !bdev_max_discard_sectors(sb->s_bdev)) {
2232 ntfs_warning(
2233 sb,
2234 "Discard requested but device does not support discard. Discard disabled.");
2235 NVolClearDiscard(vol);
2236 }
2237
2238 /* We support sector sizes up to the PAGE_SIZE. */
2239 if (bdev_logical_block_size(sb->s_bdev) > PAGE_SIZE) {
2240 if (!silent)
2241 ntfs_error(sb,
2242 "Device has unsupported sector size (%i). The maximum supported sector size on this architecture is %lu bytes.",
2243 bdev_logical_block_size(sb->s_bdev),
2244 PAGE_SIZE);
2245 goto err_out_now;
2246 }
2247
2248 /*
2249 * Setup the device access block size to NTFS_BLOCK_SIZE or the hard
2250 * sector size, whichever is bigger.
2251 */
2252 blocksize = sb_min_blocksize(sb, NTFS_BLOCK_SIZE);
2253 if (blocksize < NTFS_BLOCK_SIZE) {
2254 if (!silent)
2255 ntfs_error(sb, "Unable to set device block size.");
2256 goto err_out_now;
2257 }
2258
2259 ntfs_debug("Set device block size to %i bytes (block size bits %i).",
2260 blocksize, sb->s_blocksize_bits);
2261 /* Determine the size of the device in units of block_size bytes. */
2262 if (!bdev_nr_bytes(sb->s_bdev)) {
2263 if (!silent)
2264 ntfs_error(sb, "Unable to determine device size.");
2265 goto err_out_now;
2266 }
2267 vol->nr_blocks = bdev_nr_bytes(sb->s_bdev) >>
2268 sb->s_blocksize_bits;
2269 /* Read the boot sector and return unlocked buffer head to it. */
2270 boot = read_ntfs_boot_sector(sb, silent);
2271 if (!boot) {
2272 if (!silent)
2273 ntfs_error(sb, "Not an NTFS volume.");
2274 goto err_out_now;
2275 }
2276 /*
2277 * Extract the data from the boot sector and setup the ntfs volume
2278 * using it.
2279 */
2280 result = parse_ntfs_boot_sector(vol, (struct ntfs_boot_sector *)boot);
2281 kfree(boot);
2282 if (!result) {
2283 if (!silent)
2284 ntfs_error(sb, "Unsupported NTFS filesystem.");
2285 goto err_out_now;
2286 }
2287
2288 if (vol->sector_size > blocksize) {
2289 blocksize = sb_set_blocksize(sb, vol->sector_size);
2290 if (blocksize != vol->sector_size) {
2291 if (!silent)
2292 ntfs_error(sb,
2293 "Unable to set device block size to sector size (%i).",
2294 vol->sector_size);
2295 goto err_out_now;
2296 }
2297 vol->nr_blocks = bdev_nr_bytes(sb->s_bdev) >>
2298 sb->s_blocksize_bits;
2299 ntfs_debug("Changed device block size to %i bytes (block size bits %i) to match volume sector size.",
2300 blocksize, sb->s_blocksize_bits);
2301 }
2302 /* Initialize the cluster and mft allocators. */
2303 ntfs_setup_allocators(vol);
2304 /* Setup remaining fields in the super block. */
2305 sb->s_magic = NTFS_SB_MAGIC;
2306 /*
2307 * Ntfs allows 63 bits for the file size, i.e. correct would be:
2308 * sb->s_maxbytes = ~0ULL >> 1;
2309 * But the kernel uses a long as the page cache page index which on
2310 * 32-bit architectures is only 32-bits. MAX_LFS_FILESIZE is kernel
2311 * defined to the maximum the page cache page index can cope with
2312 * without overflowing the index or to 2^63 - 1, whichever is smaller.
2313 */
2314 sb->s_maxbytes = MAX_LFS_FILESIZE;
2315 /* Ntfs measures time in 100ns intervals. */
2316 sb->s_time_gran = 100;
2317
2318 sb->s_xattr = ntfs_xattr_handlers;
2319 /*
2320 * Now load the metadata required for the page cache and our address
2321 * space operations to function. We do this by setting up a specialised
2322 * read_inode method and then just calling the normal iget() to obtain
2323 * the inode for $MFT which is sufficient to allow our normal inode
2324 * operations and associated address space operations to function.
2325 */
2326 sb->s_op = &ntfs_sops;
2327 tmp_ino = new_inode(sb);
2328 if (!tmp_ino) {
2329 if (!silent)
2330 ntfs_error(sb, "Failed to load essential metadata.");
2331 goto err_out_now;
2332 }
2333
2334 tmp_ino->i_ino = FILE_MFT;
2335 insert_inode_hash(tmp_ino);
2336 if (ntfs_read_inode_mount(tmp_ino) < 0) {
2337 if (!silent)
2338 ntfs_error(sb, "Failed to load essential metadata.");
2339 goto iput_tmp_ino_err_out_now;
2340 }
2341 lockdep_set_class(&tmp_ino->i_mapping->invalidate_lock,
2342 &ntfs_mft_inval_lock_key);
2343
2344 mutex_lock(&ntfs_lock);
2345
2346 /*
2347 * Generate the global default upcase table if necessary. Also
2348 * temporarily increment the number of upcase users to avoid race
2349 * conditions with concurrent (u)mounts.
2350 */
2351 if (!default_upcase)
2352 default_upcase = generate_default_upcase();
2353 ntfs_nr_upcase_users++;
2354 mutex_unlock(&ntfs_lock);
2355
2356 lcn_bit_pages = (((vol->nr_clusters + 7) >> 3) + PAGE_SIZE - 1) >> PAGE_SHIFT;
2357 vol->lcn_empty_bits_per_page = kvmalloc_array(lcn_bit_pages, sizeof(unsigned int),
2358 GFP_KERNEL);
2359 if (!vol->lcn_empty_bits_per_page) {
2360 ntfs_error(sb,
2361 "Unable to allocate pages for storing LCN empty bit counts\n");
2362 goto unl_upcase_iput_tmp_ino_err_out_now;
2363 }
2364
2365 /*
2366 * From now on, ignore @silent parameter. If we fail below this line,
2367 * it will be due to a corrupt fs or a system error, so we report it.
2368 */
2369 /*
2370 * Open the system files with normal access functions and complete
2371 * setting up the ntfs super block.
2372 */
2373 if (!load_system_files(vol)) {
2374 ntfs_error(sb, "Failed to load system files.");
2375 goto unl_upcase_iput_tmp_ino_err_out_now;
2376 }
2377
2378 /* We grab a reference, simulating an ntfs_iget(). */
2379 ihold(vol->root_ino);
2380 sb->s_root = d_make_root(vol->root_ino);
2381 if (sb->s_root) {
2382 s64 nr_records;
2383
2384 ntfs_debug("Exiting, status successful.");
2385
2386 /* Release the default upcase if it has no users. */
2387 mutex_lock(&ntfs_lock);
2388 if (!--ntfs_nr_upcase_users && default_upcase) {
2389 kvfree(default_upcase);
2390 default_upcase = NULL;
2391 }
2392 mutex_unlock(&ntfs_lock);
2393 sb->s_export_op = &ntfs_export_ops;
2394 lockdep_on();
2395
2396 nr_records = __get_nr_free_mft_records(vol,
2397 i_size_read(vol->mft_ino) >> vol->mft_record_size_bits,
2398 ((((NTFS_I(vol->mft_ino)->initialized_size >>
2399 vol->mft_record_size_bits) +
2400 7) >> 3) + PAGE_SIZE - 1) >> PAGE_SHIFT);
2401 ntfs_debug("Free mft records(%lld)", nr_records);
2402
2403 init_waitqueue_head(&vol->free_waitq);
2404 INIT_WORK(&vol->precalc_work, precalc_free_clusters);
2405 queue_work(ntfs_wq, &vol->precalc_work);
2406 return 0;
2407 }
2408 ntfs_error(sb, "Failed to allocate root directory.");
2409 /* Clean up after the successful load_system_files() call from above. */
2410 iput(vol->vol_ino);
2411 vol->vol_ino = NULL;
2412 /* NTFS 3.0+ specific clean up. */
2413 if (vol->major_ver >= 3) {
2414 if (vol->extend_ino) {
2415 iput(vol->extend_ino);
2416 vol->extend_ino = NULL;
2417 }
2418 if (vol->secure_ino) {
2419 iput(vol->secure_ino);
2420 vol->secure_ino = NULL;
2421 }
2422 }
2423 iput(vol->root_ino);
2424 vol->root_ino = NULL;
2425 iput(vol->lcnbmp_ino);
2426 vol->lcnbmp_ino = NULL;
2427 iput(vol->mftbmp_ino);
2428 vol->mftbmp_ino = NULL;
2429 if (vol->logfile_ino) {
2430 iput(vol->logfile_ino);
2431 vol->logfile_ino = NULL;
2432 }
2433 if (vol->mftmirr_ino) {
2434 iput(vol->mftmirr_ino);
2435 vol->mftmirr_ino = NULL;
2436 }
2437 /* Throw away the table of attribute definitions. */
2438 vol->attrdef_size = 0;
2439 if (vol->attrdef) {
2440 kvfree(vol->attrdef);
2441 vol->attrdef = NULL;
2442 }
2443 vol->upcase_len = 0;
2444 mutex_lock(&ntfs_lock);
2445 if (vol->upcase && vol->upcase == default_upcase) {
2446 ntfs_nr_upcase_users--;
2447 vol->upcase = NULL;
2448 }
2449 mutex_unlock(&ntfs_lock);
2450 if (vol->upcase) {
2451 kvfree(vol->upcase);
2452 vol->upcase = NULL;
2453 }
2454 if (vol->nls_map) {
2455 unload_nls(vol->nls_map);
2456 vol->nls_map = NULL;
2457 }
2458 /* Error exit code path. */
2459 unl_upcase_iput_tmp_ino_err_out_now:
2460 /*
2461 * Decrease the number of upcase users and destroy the global default
2462 * upcase table if necessary.
2463 */
2464 mutex_lock(&ntfs_lock);
2465 if (!--ntfs_nr_upcase_users && default_upcase) {
2466 kvfree(default_upcase);
2467 default_upcase = NULL;
2468 }
2469
2470 mutex_unlock(&ntfs_lock);
2471 iput_tmp_ino_err_out_now:
2472 iput(tmp_ino);
2473 if (vol->mft_ino && vol->mft_ino != tmp_ino)
2474 iput(vol->mft_ino);
2475 vol->mft_ino = NULL;
2476 /* Errors at this stage are irrelevant. */
2477 err_out_now:
2478 sb->s_fs_info = NULL;
2479 kvfree(vol->lcn_empty_bits_per_page);
2480 kfree(vol->volume_label);
2481 unload_nls(vol->nls_map);
2482 kfree(vol);
2483 ntfs_debug("Failed, returning -EINVAL.");
2484 lockdep_on();
2485 return -EINVAL;
2486 }
2487
2488 /*
2489 * This is a slab cache to optimize allocations and deallocations of Unicode
2490 * strings of the maximum length allowed by NTFS, which is NTFS_MAX_NAME_LEN
2491 * (255) Unicode characters + a terminating NULL Unicode character.
2492 */
2493 struct kmem_cache *ntfs_name_cache;
2494
2495 /* Slab caches for efficient allocation/deallocation of inodes. */
2496 struct kmem_cache *ntfs_inode_cache;
2497 struct kmem_cache *ntfs_big_inode_cache;
2498
2499 /* Init once constructor for the inode slab cache. */
ntfs_big_inode_init_once(void * foo)2500 static void ntfs_big_inode_init_once(void *foo)
2501 {
2502 struct ntfs_inode *ni = foo;
2503
2504 inode_init_once(VFS_I(ni));
2505 }
2506
2507 /*
2508 * Slab caches to optimize allocations and deallocations of attribute search
2509 * contexts and index contexts, respectively.
2510 */
2511 struct kmem_cache *ntfs_attr_ctx_cache;
2512 struct kmem_cache *ntfs_index_ctx_cache;
2513
2514 /* Driver wide mutex. */
2515 DEFINE_MUTEX(ntfs_lock);
2516
ntfs_get_tree(struct fs_context * fc)2517 static int ntfs_get_tree(struct fs_context *fc)
2518 {
2519 return get_tree_bdev(fc, ntfs_fill_super);
2520 }
2521
ntfs_free_fs_context(struct fs_context * fc)2522 static void ntfs_free_fs_context(struct fs_context *fc)
2523 {
2524 struct ntfs_volume *vol = fc->s_fs_info;
2525
2526 if (vol)
2527 ntfs_volume_free(vol);
2528 }
2529
2530 static const struct fs_context_operations ntfs_context_ops = {
2531 .parse_param = ntfs_parse_param,
2532 .get_tree = ntfs_get_tree,
2533 .free = ntfs_free_fs_context,
2534 .reconfigure = ntfs_reconfigure,
2535 };
2536
ntfs_init_fs_context(struct fs_context * fc)2537 static int ntfs_init_fs_context(struct fs_context *fc)
2538 {
2539 struct ntfs_volume *vol;
2540
2541 /* Allocate a new struct ntfs_volume and place it in sb->s_fs_info. */
2542 vol = kmalloc_obj(struct ntfs_volume, GFP_NOFS);
2543 if (!vol)
2544 return -ENOMEM;
2545
2546 /* Initialize struct ntfs_volume structure. */
2547 *vol = (struct ntfs_volume) {
2548 .uid = INVALID_UID,
2549 .gid = INVALID_GID,
2550 .fmask = 0,
2551 .dmask = 0,
2552 .mft_zone_multiplier = 1,
2553 .on_errors = ON_ERRORS_CONTINUE,
2554 .nls_map = load_nls_default(),
2555 .preallocated_size = NTFS_DEF_PREALLOC_SIZE,
2556 };
2557
2558 NVolSetShowHiddenFiles(vol);
2559 NVolSetCaseSensitive(vol);
2560 init_rwsem(&vol->mftbmp_lock);
2561 init_rwsem(&vol->lcnbmp_lock);
2562 mutex_init(&vol->volume_label_lock);
2563
2564 fc->s_fs_info = vol;
2565 fc->ops = &ntfs_context_ops;
2566 return 0;
2567 }
2568
2569 static struct file_system_type ntfs_fs_type = {
2570 .owner = THIS_MODULE,
2571 .name = "ntfs",
2572 .init_fs_context = ntfs_init_fs_context,
2573 .parameters = ntfs_parameters,
2574 .kill_sb = kill_block_super,
2575 .fs_flags = FS_REQUIRES_DEV | FS_ALLOW_IDMAP,
2576 };
2577 MODULE_ALIAS_FS("ntfs");
2578
ntfs_workqueue_init(void)2579 static int ntfs_workqueue_init(void)
2580 {
2581 ntfs_wq = alloc_workqueue("ntfs-bg-io", WQ_PERCPU, 0);
2582 if (!ntfs_wq)
2583 return -ENOMEM;
2584 return 0;
2585 }
2586
ntfs_workqueue_destroy(void)2587 static void ntfs_workqueue_destroy(void)
2588 {
2589 destroy_workqueue(ntfs_wq);
2590 ntfs_wq = NULL;
2591 }
2592
2593 /* Stable names for the slab caches. */
2594 static const char ntfs_index_ctx_cache_name[] = "ntfs_index_ctx_cache";
2595 static const char ntfs_attr_ctx_cache_name[] = "ntfs_attr_ctx_cache";
2596 static const char ntfs_name_cache_name[] = "ntfs_name_cache";
2597 static const char ntfs_inode_cache_name[] = "ntfs_inode_cache";
2598 static const char ntfs_big_inode_cache_name[] = "ntfs_big_inode_cache";
2599
init_ntfs_fs(void)2600 static int __init init_ntfs_fs(void)
2601 {
2602 int err = 0;
2603
2604 err = ntfs_workqueue_init();
2605 if (err) {
2606 pr_crit("Failed to register workqueue!\n");
2607 return err;
2608 }
2609
2610 ntfs_index_ctx_cache = kmem_cache_create(ntfs_index_ctx_cache_name,
2611 sizeof(struct ntfs_index_context), 0 /* offset */,
2612 SLAB_HWCACHE_ALIGN, NULL /* ctor */);
2613 if (!ntfs_index_ctx_cache) {
2614 pr_crit("Failed to create %s!\n", ntfs_index_ctx_cache_name);
2615 goto ictx_err_out;
2616 }
2617 ntfs_attr_ctx_cache = kmem_cache_create(ntfs_attr_ctx_cache_name,
2618 sizeof(struct ntfs_attr_search_ctx), 0 /* offset */,
2619 SLAB_HWCACHE_ALIGN, NULL /* ctor */);
2620 if (!ntfs_attr_ctx_cache) {
2621 pr_crit("NTFS: Failed to create %s!\n",
2622 ntfs_attr_ctx_cache_name);
2623 goto actx_err_out;
2624 }
2625
2626 ntfs_name_cache = kmem_cache_create(ntfs_name_cache_name,
2627 (NTFS_MAX_NAME_LEN+2) * sizeof(__le16), 0,
2628 SLAB_HWCACHE_ALIGN, NULL);
2629 if (!ntfs_name_cache) {
2630 pr_crit("Failed to create %s!\n", ntfs_name_cache_name);
2631 goto name_err_out;
2632 }
2633
2634 ntfs_inode_cache = kmem_cache_create(ntfs_inode_cache_name,
2635 sizeof(struct ntfs_inode), 0, SLAB_RECLAIM_ACCOUNT, NULL);
2636 if (!ntfs_inode_cache) {
2637 pr_crit("Failed to create %s!\n", ntfs_inode_cache_name);
2638 goto inode_err_out;
2639 }
2640
2641 ntfs_big_inode_cache = kmem_cache_create(ntfs_big_inode_cache_name,
2642 sizeof(struct big_ntfs_inode), 0, SLAB_HWCACHE_ALIGN |
2643 SLAB_RECLAIM_ACCOUNT | SLAB_ACCOUNT,
2644 ntfs_big_inode_init_once);
2645 if (!ntfs_big_inode_cache) {
2646 pr_crit("Failed to create %s!\n", ntfs_big_inode_cache_name);
2647 goto big_inode_err_out;
2648 }
2649
2650 /* Register the ntfs sysctls. */
2651 err = ntfs_sysctl(1);
2652 if (err) {
2653 pr_crit("Failed to register NTFS sysctls!\n");
2654 goto sysctl_err_out;
2655 }
2656
2657 err = register_filesystem(&ntfs_fs_type);
2658 if (!err) {
2659 ntfs_debug("NTFS driver registered successfully.");
2660 return 0; /* Success! */
2661 }
2662 pr_crit("Failed to register NTFS filesystem driver!\n");
2663
2664 /* Unregister the ntfs sysctls. */
2665 ntfs_sysctl(0);
2666 sysctl_err_out:
2667 kmem_cache_destroy(ntfs_big_inode_cache);
2668 big_inode_err_out:
2669 kmem_cache_destroy(ntfs_inode_cache);
2670 inode_err_out:
2671 kmem_cache_destroy(ntfs_name_cache);
2672 name_err_out:
2673 kmem_cache_destroy(ntfs_attr_ctx_cache);
2674 actx_err_out:
2675 kmem_cache_destroy(ntfs_index_ctx_cache);
2676 ictx_err_out:
2677 if (!err) {
2678 pr_crit("Aborting NTFS filesystem driver registration...\n");
2679 err = -ENOMEM;
2680 }
2681 return err;
2682 }
2683
exit_ntfs_fs(void)2684 static void __exit exit_ntfs_fs(void)
2685 {
2686 ntfs_debug("Unregistering NTFS driver.");
2687
2688 unregister_filesystem(&ntfs_fs_type);
2689
2690 /*
2691 * Make sure all delayed rcu free inodes are flushed before we
2692 * destroy cache.
2693 */
2694 rcu_barrier();
2695 #ifdef CONFIG_NTFS_FS_WOF_COMPRESSION
2696 ntfs_wof_free_workspaces();
2697 #endif
2698 kmem_cache_destroy(ntfs_big_inode_cache);
2699 kmem_cache_destroy(ntfs_inode_cache);
2700 kmem_cache_destroy(ntfs_name_cache);
2701 kmem_cache_destroy(ntfs_attr_ctx_cache);
2702 kmem_cache_destroy(ntfs_index_ctx_cache);
2703 ntfs_workqueue_destroy();
2704 /* Unregister the ntfs sysctls. */
2705 ntfs_sysctl(0);
2706 }
2707
2708 module_init(init_ntfs_fs);
2709 module_exit(exit_ntfs_fs);
2710
2711 MODULE_AUTHOR("Anton Altaparmakov <anton@tuxera.com>"); /* Original read-only NTFS driver */
2712 MODULE_AUTHOR("Namjae Jeon <linkinjeon@kernel.org>"); /* Add write, iomap and various features */
2713 MODULE_DESCRIPTION("NTFS read-write filesystem driver");
2714 MODULE_LICENSE("GPL");
2715 #ifdef DEBUG
2716 module_param(debug_msgs, uint, 0);
2717 MODULE_PARM_DESC(debug_msgs, "Enable debug messages.");
2718 #endif
2719