forked from dosfstools/dosfstools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathChangeLog
5074 lines (3405 loc) · 166 KB
/
ChangeLog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
commit eb9111e
Author: Pali Rohár <[email protected]>
Date: Sun Jan 31 13:26:03 2021 +0100
Add missing files into distribution tarball
commit 52518ae
Author: Pali Rohár <[email protected]>
Date: Sun Jan 31 03:03:39 2021 +0100
mkfs.fat: Read geom_start from sysfs
HDIO_GETGEO which provides start member is not supported for loop block
devices. Also start member is only unsigned long so it cannot be used for
bigger disks. So instead read geom_start from sysfs and store it into long
long type to prevent overflow.
commit ed2062b
Author: Pali Rohár <[email protected]>
Date: Fri Jan 29 16:40:56 2021 +0100
Autogenerate release date in manpages
commit fca589b
Author: Pali Rohár <[email protected]>
Date: Fri Jan 29 16:40:20 2021 +0100
Update (C) and maintainers
commit c251412
Author: Pali Rohár <[email protected]>
Date: Fri Jan 29 16:33:41 2021 +0100
Add TODO comments for checking integer overflow
commit 73003cd
Author: Pali Rohár <[email protected]>
Date: Sat Jan 19 13:28:45 2019 +0100
Replace uint64_t type by unsigned long long type
commit c56ef3d
Author: Pali Rohár <[email protected]>
Date: Sat Jan 19 13:22:05 2019 +0100
Remove useless casting to uint64_t or long long in check_file()
Value of clusters * fs->cluster_size is file size and it always fits into
32bit value. So use just unsigned int type for it.
commit 2e597d6
Author: Pali Rohár <[email protected]>
Date: Sat Jan 19 13:20:16 2019 +0100
Check that file size is not larger than maximal possible size
commit 53d04ff
Author: Pali Rohár <[email protected]>
Date: Sat Jan 19 13:15:25 2019 +0100
Change fat_size type from off_t to unsigned int
Value in fat_size is result of multiplication of two 16bit unsigned values,
therefore it fits into unsigned int.
commit 2f6d8cf
Author: Pali Rohár <[email protected]>
Date: Fri Jan 29 02:10:58 2021 +0100
testsuite: Add reference images of fsck result tests
This ensures that fsck does not change its behavior and repair filesystems
in the same way. Repaired reference images were generated by dosfstools 4.1
to ensure that they are still same.
commit 5265c64
Author: Pali Rohár <[email protected]>
Date: Fri Jan 29 02:10:22 2021 +0100
testsuite: Add fsck tests for fat labels
commit 2260f80
Author: Pali Rohár <[email protected]>
Date: Sun Jan 3 23:22:42 2021 +0100
fsck.fat: Check and fix label
Checks the volume label from the root directory entry that is valid and
matches the label stored in boot sector.
Add new command line option -U which consider lowercase volume label as
invalid and allows only uppercase labels. By default lowercase volume
labels are allowed.
commit 77c3de9
Author: Pali Rohár <[email protected]>
Date: Tue Jan 14 00:58:21 2020 +0100
Simplify usage of validate_volume_label() function
Use new function dos_string_to_wchar_string() for converting label from DOS
OEM code page to wchar_t* string. Therefore caller does not have to supply
label in both DOS OEM encoding and locale independent wchar_t* string.
commit f89b42d
Author: Pali Rohár <[email protected]>
Date: Sun Aug 19 18:54:07 2018 +0200
Update warning message about lowercase labels
They are working fine on MS-DOS and Windows systems.
commit 5bbae89
Author: Pali Rohár <[email protected]>
Date: Wed Aug 15 16:35:48 2018 +0200
charconv: Add functions for converting DOS strings to locale independent wchar_t strings
Use iconv library for it. And as a fallback use internal cp850_table.
commit 3a3c1d3
Author: Pali Rohár <[email protected]>
Date: Thu Jan 28 10:39:36 2021 +0100
testsuite: Update mkfs-fat32_2_res_sects.xxd test as it is now not aligned due to -a
commit 289fa53
Author: Pali Rohár <[email protected]>
Date: Wed Jan 27 02:03:39 2021 +0100
manpages: End every sentence by a newline
commit 61390f3
Author: Pali Rohár <[email protected]>
Date: Wed Jan 27 02:01:48 2021 +0100
mkfs.fat: Do not align number of sectors when -a was specified
commit 7deb97d
Author: Pali Rohár <[email protected]>
Date: Wed Jan 27 02:00:33 2021 +0100
mkfs.fat: Document that -r and -R specify minimal number (and not exact)
commit 4e06c33
Author: Pali Rohár <[email protected]>
Date: Wed Jan 27 01:58:38 2021 +0100
fsck: Move check_dirty_bits() from boot.c to check.c
commit 738ee98
Author: Pali Rohár <[email protected]>
Date: Sun Jan 17 16:15:41 2021 +0100
fatlabel: Print warnings on stderr
Fixes: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=803391
commit e62e52c
Author: Pali Rohár <[email protected]>
Date: Sun Jan 17 19:45:26 2021 +0100
fatlabel: Do not call parts of fsck repair procedure
This change adds a new parameter for read_fat() function to indicate a mode
in which filesystem is doing to be used: Read-only, Read-write or Repair.
fsck.fat uses Repair mode and fatlabel either Read-only or Read-write
(which depends on fatlabel operation).
fatlabel cannot repair broken FAT filesystem like fsck.fat. So when trying
to modify FAT label on currupted FAT filesystem rather throw an fatal error
indicating that running fsck.fat is needed.
When fatlabel was called to just read existing FAT label, first FAT table
is corrupted and second FAT table is clean then use second FAT table.
This change also ensures that fatlabel does not print fsck/repair messages
on stdout, which should be used only for printing FAT label.
commit b8c8531
Author: Pali Rohár <[email protected]>
Date: Sun Jan 17 22:47:18 2021 +0100
testsuite: Add tests for DOS Clean Shutdown bit
commit 82c2111
Author: Pali Rohár <[email protected]>
Date: Sun Jan 17 20:20:39 2021 +0100
testsuite: Add fsck tests with broken first FAT cluster
Extend also test-fsck script to read additional arguments from .args file.
commit 82e9730
Author: Pali Rohár <[email protected]>
Date: Sun Jan 17 19:34:10 2021 +0100
fsck.fat: Add code for fixing first FAT cluster
This patch tries to fix infamous fsck.fat error:
Both FATs appear to be corrupt. Giving up.
It just fill again FAT media type and sets other bits to one as it is
required by FAT specification. Similar thing is doing also Windows chkdsk
tool.
In the most cases corrupted first FAT cluster is fatal error which
indicates totally corrupted filesystem impossible to repair. So fixing
first FAT cluster is not done by fsck.fat automatically and needs to be
enabled by a new -F option, which forces usage of specified FAT table
(either clean or corrupted).
commit e579a7d
Author: Pali Rohár <[email protected]>
Date: Sat Nov 17 01:12:52 2018 +0100
mkfs.fat: Allow to specify disk geometry via new -g option
commit 9443732
Author: Pali Rohár <[email protected]>
Date: Fri Jan 8 11:49:27 2021 +0100
testsuite: Add mkfs test for 600MB large 4K disk
commit 3300839
Author: Pali Rohár <[email protected]>
Date: Sun Oct 14 16:19:51 2018 +0200
mkfs.fat: Do not show verbose messages not relevant to selected FAT size
commit 43f0c4e
Author: Pali Rohár <[email protected]>
Date: Fri Aug 17 14:26:30 2018 +0200
mkfs.fat: Fix text of verbose messages
commit c01f78b
Author: Pali Rohár <[email protected]>
Date: Tue Aug 14 15:48:50 2018 +0200
mkfs.fat: Fix limits for number of clusters
According to Microsoft FAT specification (fatgen103.doc) disk with at least
4085 clusters and less then 65525 clusters is FAT16.
But Microsoft Windows FAT driver fastfat.sys detects disk with less then
4087 clusters as FAT12. Linux FAT drivers msdos.ko and vfat.ko detect disk
with 4085 clusters (or more) as FAT16, therefore for compatibility reasons
with both systems disallow formatting disks to 4085 or 4086 clusters.
So after this change mkfs.fat disallow to create a FAT16 which would be
misinterpreted as FAT12. Next run of cluster detection algorithm would
choose higher cluster size which decrease number of clusters.
According to specification, FAT32 is detected by at least 65525 clusters,
but Microsoft Windows FAT driver fastfat.sys, Linux FAT drivers msdos.ko
and vfat.ko detect disk as FAT32 when Sectors Per FAT (fat_length) is set
to zero.
commit 404ead8
Author: Pali Rohár <[email protected]>
Date: Sat Aug 11 20:34:08 2018 +0200
mkfs.fat: Fix calculation of FAT32 cluster size on non 512 bytes sector disks
Previous FAT32 calculation worked correctly only for disks with 512 byte
sectors. New calculation formula is generalized variant of previous one,
but to be sector size independent.
commit e6d2fc7
Author: Pali Rohár <[email protected]>
Date: Wed Aug 15 15:11:30 2018 +0200
mkfs.fat: Fix printing number of sectors
It is unsigned 32bit number therefore use %u format.
commit b29eb5b
Author: Pali Rohár <[email protected]>
Date: Wed Aug 15 15:15:06 2018 +0200
mkfs.fat: Align total number of sectors to be multiple of sectors per track
This requirement is needed by DOS systems and also by Linux mtools project.
Without proper alignment, mtools applications refuse to work on such
filesystem.
commit 8c81232
Author: Pali Rohár <[email protected]>
Date: Sun Jan 10 22:29:48 2021 +0100
testsuite: Add referenceFAT32mbr test data to dist_check_DATA
commit 468aad7
Author: Pali Rohár <[email protected]>
Date: Sun Jan 10 22:16:49 2021 +0100
manpages: Escape dot in fsck.fat manpage at the beginning of the line
commit 9069ba0
Author: felix <[email protected]>
Date: Mon Apr 2 22:43:46 2018 +0200
fsck.fat: properly check for valid "." and ".." entries
This change makes fsck.fat check whether "." and ".." entries exist in
all non-root directories as the two very first. If those entries are
occupied by some other file, fsck.fat will offer to move them to some
later slot. "." and ".." entries found in any other slots are treated
as ordinary bad-shortname entries. The test case for this situation has
been enabled and verified to perform as expected.
The function drop_file() was also modified so that it does not mark
dropped file clusters as free. This was necessary because otherwise
dropping too-late "." and ".." entries would delete their containing
directory. If deleted entries' clusters are truly no longer used, they
shall be picked up by a later reclamation stage.
Additionally, subdirs() and check_file() were modified not to check
unused directory entries.
Additionally-fixed-by: Dave Odell <[email protected]>
commit 512141a
Author: C. Masloch <[email protected]>
Date: Sat Oct 24 13:53:08 2020 +0200
fsck.fat: preserve info sector reserved fields
This allows the FSIBOOT stage of lDOS boot32.asm to remain
in the FSINFO sector even when the info entries are reset.
I reviewed several sources to determine whether we are in the right to
assume that the reserved 480 bytes used by FSIBOOT should be preserved
by drivers updating the FSINFO entry fields.
Quoting the document "Microsoft Extensible Firmware Initiative - FAT32
File System Specification - FAT: General Overview of On-Disk Format -
Version 1.03, December 6, 2000" on these bytes:
> [Name] FSI_Reserved1
>
> [Offset (byte)] 4
>
> [Size (bytes)] 480
>
> [Description] This field is currently reserved for future expansion.
> FAT32 format code should always initialize all bytes of this field
> to 0. Bytes in this field must currently never be used.
This specifically states that "FAT32 format code" should zero-initialise
this space. It does not specify that a driver should or should not reset
this space.
The FreeDOS kernel uses a struct [1] that does not include the space
used by FSIBOOT. Its driver's implementation [2] does preserve the
FSIBOOT area. I have verified this in dosemu2; if the FreeDOS kernel
updates the FSINFO sector it preserves this area.
The Linux kernel uses a struct with a "reserved1" member [3] which is
commented as being "Nothing as far as I can tell". If I am reading the
source correctly, its driver [4] also preserves this area when updating
the FSINFO entries.
Testing on MS-DOS version 7.10 (as bundled with MS Windows 98 SE) I
determined that it also preserves the area when updating the FSINFO entries.
The free software RxDOS/lDOS boot loader for FAT32 that I wrote uses
this reserved area to store its FSIBOOT stage, essentially an extension
to the primary boot sector loader. To avoid clashing with Microsoft
loaders which may use some of the reserved sectors, the large reserved
area in the FSINFO sector was selected to hold this stage (if sector
size is <= 512 bytes). If valid, the area starts with a signature [5]
the first four bytes of which form the letters "FSIB"; the subsequent
four bytes specify a protocol version. For example, the current
(non-experimental) version is "FSIBOOT3" [6].
If there is no FSINFO sector or the FSIBOOT signature does not match the
one expected, then the 'I' error code letter ("i"nvalid FS"I"BOOT) is
displayed and the loading is aborted [7]. Prior to this patch, if the
FSINFO entries were invalid (any of the three FSINFO signatures don't
match) and then fsck.fat was used and instructed to correct this, it
would reset the space used by FSIBOOT, rendering the image unbootable
if the lDOS boot32 loader had been installed into the image.
I previously posted a similar patch for mtools to the info-mtools
mailing list [8]. I was approached to check whether dosfstools behaved
as expected. I determined that this patch is needed to fix the corner
case of invalid FSINFO entries with FSIBOOT installed into the sector.
I also patched the lDOS instsect application [9] so it insures that the
FSINFO entries are valid while installing FSIBOOT. With either that
patch to instsect or this patch to dosfstools, FSIBOOT will always be
preserved when running fsck.fat on a file system.
[1]:
https://github.com/FDOS/kernel/blob/6e42bb6d7c6dd304f738cf0d7a2db719598f1b9e/hdr/device.h#L325
[2]:
https://github.com/FDOS/kernel/blob/6e42bb6d7c6dd304f738cf0d7a2db719598f1b9e/kernel/fattab.c#L116
[3]:
https://github.com/torvalds/linux/blob/7cf726a59435301046250c42131554d9ccc566b8/include/uapi/linux/msdos_fs.h#L163
[4]:
https://github.com/torvalds/linux/blob/7cf726a59435301046250c42131554d9ccc566b8/fs/fat/misc.c#L60
[5]: https://hg.ulukai.org/ecm/ldosboot/file/aa15fd7bc58e/boot32.asm#l1164
[6]: https://hg.ulukai.org/ecm/ldosboot/file/aa15fd7bc58e/boot32.asm#l27
[7]: https://hg.ulukai.org/ecm/ldosboot/file/aa15fd7bc58e/boot32.asm#l775
[8]: https://lists.gnu.org/archive/html/info-mtools/2020-10/msg00000.html
[9]: https://hg.ulukai.org/ecm/instsect/rev/eee5dfaa52f6
commit 201665c
Author: Pali Rohár <[email protected]>
Date: Sun Feb 16 12:33:32 2020 +0100
mkfs.fat: Update --help for -h (hidden sectors)
commit 25da96e
Author: Pali Rohár <[email protected]>
Date: Sun Feb 16 12:22:04 2020 +0100
mkfs.fat: Relax -D option (BIOS drive number)
Allow to specify also second hard disk (0x81) or second floppy device
(0x01) as -D option = BIOS drive number.
commit bce0940
Author: Pali Rohár <[email protected]>
Date: Sun Feb 17 18:59:54 2019 +0100
manpages: Update mkfs.fat manpage about FAT32 backup boot sector
commit da36707
Author: Pali Rohár <[email protected]>
Date: Sun Feb 17 11:48:32 2019 +0100
mkfs.fat: Write FAT32 backup info sector after FAT32 backup boot sector
Write it only in the case when location does not conflict with real/primary
FAT32 info sector and reserved area is big enough.
commit 5b61d9f
Author: Pali Rohár <[email protected]>
Date: Sun Feb 17 11:01:15 2019 +0100
testsuite: Run fsck test step always even if mkfs test step fails
fsck test step can show more details about badly created image by mkfs.
commit 53bfa1f
Author: Pali Rohár <[email protected]>
Date: Sun Feb 17 10:56:06 2019 +0100
testsuite: Add test for mkfs.fat with two FAT32 sectors in reserved area
commit 3cca83a
Author: Pali Rohár <[email protected]>
Date: Sun Feb 17 10:36:33 2019 +0100
mkfs.fat: Fix setting location of FAT32 backup boot sector
For FAT32 if there are only two sectors in reserved area, first must be
boot sector and second must be FAT32 fs info sector. And there would not be
FAT32 backup boot sector as it is optional. FAT32 info sector is for FAT32
media mandatory.
When backup_boot variable is set to zero it means that no FAT32 backup boot
sector is written. Check that FAT32 backup boot sector differs from FAT32
info sector is already there.
Also allow user to specify zero for -b option which disable creating of
FAT32 backup boot sector.
commit c5e35e7
Author: Pali Rohár <[email protected]>
Date: Sun Feb 17 10:34:24 2019 +0100
mkfs.fat: Put FAT32 info sector number into variable
Also check that it is not same as backup boot sector value.
commit d276ddb
Author: Pali Rohár <[email protected]>
Date: Sun Feb 17 10:32:08 2019 +0100
mkfs.fat: Rename info_sector buffer variable to info_sector_buffer
Also call free() unconditionally as it does nothing for NULL argument.
commit 5e936c9
Author: Pali Rohár <[email protected]>
Date: Sat Nov 24 19:45:39 2018 +0100
mkfs.fat: Remove dependency on systemd/udev
There is no need that mkfs.fat depends on systemd. It uses it only for
reading additional information about block device.
This patch replace systemd/udev dependency code by reading those additional
information about block device directly from sysfs.
So no functionality of mkfs.fat is lost or removed.
commit 18a05e7
Author: Pali Rohár <[email protected]>
Date: Sun Jan 5 00:58:41 2020 +0100
manpages: Fix '. SF' file names
commit 7e6d7d3
Author: Pali Rohár <[email protected]>
Date: Sat Nov 24 18:18:53 2018 +0100
manpages: Fix switching to previous font style
In troff manpage language previous font style is selected by "\fP"
sequence, not by "\fR". "\fR" selects roman font style.
commit ffa5dfa
Author: Pali Rohár <[email protected]>
Date: Sun Nov 18 21:14:24 2018 +0100
manpages: Fix formatting of bullets
In troff manpage language bullet is written as "\(bu".
commit bc65dd6
Author: Pali Rohár <[email protected]>
Date: Sun Nov 18 21:10:29 2018 +0100
manpages: Fix formatting of emphases
To emphasize use italic font style instead of putting word into two
apostrophes. Ascii apostrophe in troff manpage language means "right single
quotation mark", therefore putting word into two apostrophes is fully
wrong.
Also arguments and file names should be formatted in italic.
commit 0273989
Author: Pali Rohár <[email protected]>
Date: Sun Nov 18 21:01:55 2018 +0100
manpages: Fix formatting of hyphens, en and em dashes
In troff manpage language ascii minus is written as "\-", mathematical
minus as "\(mi", hyphen as "-", en-dash as "\(en" and em-dash as "\(em".
commit c85c863
Author: Pali Rohár <[email protected]>
Date: Sun Oct 21 12:58:19 2018 +0200
manpages: Clarify unit of BLOCK-COUNT
BLOCK-COUNT is always in KiB unit independently of the disk sector size,
FAT sector size or FAT cluster size.
commit 69fcfe5
Author: Pali Rohár <[email protected]>
Date: Sun Aug 19 16:35:22 2018 +0200
fsck.fat: Check for DOS Clean Shutdown bit
DOS Clean Shutdown bit in first reserved FAT entry is cleared when DOS or
Windows FAT driver mounts a volume and set is back when doing unmount.
Therefore set this bit when clearing FAT dirty bit in boot sector.
commit 68e8e54
Author: Pali Rohár <[email protected]>
Date: Sat Jan 4 14:53:28 2020 +0100
mkfs.fat: Calculate CHS geometry according to SD Card Part 2 File System Specification
Use this CHS calculation when disk geometry is not available. This change
replaces hardcoded 64/32 value by formula based on total number of sectors.
For SD cards with more then 256MB capacity is CHS calculation according to
SD Card Part 2 File System Specification same as CHS calculation for hard
disks via LBA-Assist Translation.
commit 5199d68
Author: Pali Rohár <[email protected]>
Date: Sun Aug 19 09:57:41 2018 +0200
mkfs.fat: Add a new option --mbr which fills MBR table with one partition
It is needed only for non-removable disks used on Microsoft Windows systems
and only when formatting whole unpartitioned disk.
Also some removable USB flash disks accessed via USB Mass Storage declares
themselves as non-removable and Microsoft Windows systems do not recognize
them without MBR partition table and MBR disk signature.
Because MBR sector and first FAT sector are very similar (starts with
boot code, ends with boot sign 0xAA55) they can live together at one
sector. Moreover location of the MBR partition table overlaps only with the
end of FAT boot code where is just place for the error message, it is
possible to fill (fake) MBR partition table with one partition which refers
to whole disk itself (starts at sector 0 and spans whole disk).
Similar thing is doing mformat (FAT12/16/32 formatting tool) from mtools
project or mkudffs (UDF formatting tool) from udftools project.
commit 9f856b7
Author: Pali Rohár <[email protected]>
Date: Mon Jan 27 22:12:38 2020 +0100
charconv: Do not use %lc format modifier for wide char which cannot be converted to multibyte string
commit 032ec02
Author: Pali Rohár <[email protected]>
Date: Tue Jan 14 00:27:31 2020 +0100
charconv: Fix usage of iconv() for state-dependent encodings
After first main iconv() call set conversion state to the initial state and
store corresponding shift sequence to output buffer via second iconv() call.
commit 4428d7d
Author: Pali Rohár <[email protected]>
Date: Mon Jan 13 23:15:22 2020 +0100
charconv: Fix checks for overlong input strings
commit 2779d70
Author: Pali Rohár <[email protected]>
Date: Wed Jan 8 01:03:24 2020 +0100
charconv: Use ICONV_CONST macro to fix compile warnings with GNU libiconv
Macro ICONV_CONST is defined by autoconf and expands either to "const" or
nothing based on what API provides iconv() implementation, either according
to SUSv2 or POSIX.1-2001/POSIX.1-2008.
commit 565d7a2
Author: Pali Rohár <[email protected]>
Date: Wed Jan 8 01:02:16 2020 +0100
charconv: Fix check for return value of iconv
iconv() returns (unsigned) size_t type, so its return value is always
different from (signed) negative -1. To compare with -1 it first needs to
be casted to size_t type.
commit e9b42f5
Author: Pali Rohár <[email protected]>
Date: Wed Jan 8 00:44:27 2020 +0100
charconv: Increase buffer size for output strings in current locale
MSDOS_NAME * 4 does not have to be enough size as iconv in translit mode
can return also 5 bytes per one wide character.
commit 1403c53
Author: Pali Rohár <[email protected]>
Date: Wed Jan 8 00:42:35 2020 +0100
charconv: Fix buffer overflows by specifying output buffer size
commit 917846b
Author: Pali Rohár <[email protected]>
Date: Tue Jan 7 00:54:15 2020 +0100
charconv: Fix put_char() function
Ensure that this function always print characters according to current
locale. So do not treat characters above 0xA0 as printable when
dos_char_to_printable() cannot process them.
commit 6dc68a8
Author: Pali Rohár <[email protected]>
Date: Tue Jan 7 00:52:43 2020 +0100
charconv: Fix comment for init_conversion() function
commit 2d6c37d
Author: Pali Rohár <[email protected]>
Date: Tue Jan 7 00:52:25 2020 +0100
charconv: For internal CP850 conversion add translit table
This CP850 translit table was created by iconv ASCII//TRANSLIT as a 7bit ASCII fallback.
commit 3ccfe29
Author: Pali Rohár <[email protected]>
Date: Tue Jan 7 00:50:09 2020 +0100
charconv: As a fallback try to use also non-translit iconv conversion
commit 1b72fdf
Author: Pali Rohár <[email protected]>
Date: Mon Jan 6 18:30:28 2020 +0100
charconv: Use const for input strings
commit 102aa76
Author: Pali Rohár <[email protected]>
Date: Mon Jan 6 18:29:30 2020 +0100
charconv: Rename third argument of local_string_to_dos_string()
Correct name is out_size as it is size of output buffer and not length of string.
commit 49cc12a
Author: Lennart Poettering <[email protected]>
Date: Mon Aug 3 12:17:12 2020 +0200
mkfs: fsync() the block device before exiting
Let's make sure to sync the block device, before exiting. Otherwise, if
we operate on a loop device and people issue "losetup -d" right after
this command finishes our in-flight writes might never hit the disk.
(This took 4h of my life for me to figure out. The mkfs for all other
file systems I tested appear to synchronize when done, hence fat should
do too.)
commit cc75143
Author: Pali Rohár <[email protected]>
Date: Mon Jan 27 22:22:35 2020 +0100
mkfs.fat: Mark struct fat32_fsinfo as packed
commit f8f455b
Author: Pali Rohár <[email protected]>
Date: Mon Jan 27 22:25:20 2020 +0100
fatlabel: Update documentation about DOS codepage
commit 3ce32fa
Author: Pali Rohár <[email protected]>
Date: Sat Jan 4 15:27:59 2020 +0100
mkfs.fat: Clarify licensing of the dummy boot sector
Original author H. Peter Anvin allowed to put mkfs.fat boot sector code
into the public domain.
commit 8dc8976
Author: Pali Rohár <[email protected]>
Date: Fri Feb 14 00:00:27 2020 +0100
manpages: Update documentation about hidden sectors
Fixes #29
commit 17be357
Author: David Gumberg <[email protected]>
Date: Sun Oct 13 18:21:57 2019 -0600
Get cross-platform libc6 generically
commit 5e2529e
Author: Pali Rohár <[email protected]>
Date: Mon Oct 14 12:21:36 2019 +0200
travis: use if ... fi construction
As single test command has side effect in return value for Travis.
commit 20092b8
Author: Pali Rohár <[email protected]>
Date: Mon Oct 14 12:14:07 2019 +0200
travis: Check for fatlabel test errors only for non-static builds
Static builds have broken iconv support which is detected at configure time
as usable. This leads to usage of internal CP850 conversion table as
fallback solution which throws runtime non-fatal error.
commit a4a0d62
Author: Pali Rohár <[email protected]>
Date: Mon Oct 14 09:48:43 2019 +0200
tests: Check for stderr errors from fatlabel tests
commit 84a8d1c
Author: Pali Rohár <[email protected]>
Date: Sun Jun 23 12:01:48 2019 +0200
charconv: Update Travis configuration
Use autogen.sh instead of non-working autoreconf and test also
static linked versions and configurations without iconv.
commit b657ede
Author: Pali Rohár <[email protected]>
Date: Sun Jun 23 10:47:44 2019 +0200
charconv: Add autogen.sh script
AM_ICONV macro depends on gettext installation. Unfortunately autoreconf is
not able to install config.rpath file so do it manually in autogen.sh.
See reported bug:
https://lists.gnu.org/archive/html/bug-gettext/2011-10/msg00012.html
commit 0dec6a7
Author: Pali Rohár <[email protected]>
Date: Sat Jun 22 22:14:31 2019 +0200
charconv: Fix sources for testdevinfo target
testdevinfo does not use any of charconv functions, nor any of mkfs
functions. So do not link charconv/mkfs into testdevinfo.
This fixes linking problems when iconv functions are not present in
standard libraries.
commit 664192e
Author: Pali Rohár <[email protected]>
Date: Sat Jun 22 01:23:54 2019 +0200
charconv: Check return value of all set_dos_codepage() calls
commit 6d49a1f
Author: Pali Rohár <[email protected]>
Date: Sat Jun 22 01:16:44 2019 +0200
charconv: Check presence of iconv
Use autoconf AM_ICONV macro for it. AM_ICONV should handle both cases when
iconv_open is available in external libiconv library or as part of libc
library.
To force compilation of dosfstools without iconv support there is a new
configure option --without-iconv.
commit fa9761f
Author: Pali Rohár <[email protected]>
Date: Sat Jun 22 01:14:37 2019 +0200
charconv: Fix return value from iconv_init_codepage function
commit d74c592
Author: Pali Rohár <[email protected]>
Date: Sat Jun 22 01:12:46 2019 +0200
charconv: Add fallback to internal CP850 table
Static linked version of glibc does not contain iconv with CP850 support.
As CP850 is default code page for all dosfstools programs add own internal
implementation which will be always supported. It would be used only in
case iconv_open() fails.
commit 91978a2
Author: Michael Forney <[email protected]>
Date: Fri Jun 7 08:48:13 2019 -0700
Use static inline function instead of statement expression
commit e06e759
Author: Pali Rohár <[email protected]>
Date: Wed Jun 5 09:25:52 2019 +0200
Fix Travis CI configuration for powerpc and arm
commit fc55b63
Author: Noé Rubinstein <[email protected]>
Date: Mon Aug 31 15:19:57 2015 +0200
mkfs: document --offset in the man page
commit f473459
Author: Noé Rubinstein <[email protected]>
Date: Thu Jul 2 15:49:06 2015 +0200
Allow specifying an offset in the device file in mkfs
commit 93b4288
Author: Tobias Stoeckmann <[email protected]>
Date: Sun Feb 24 20:55:15 2019 +0100
Fix out of boundary read in fsck.fat/fatlabel
Faulty filesystems are able to trigger integer overflows in read_boot which eventually lead to insufficient allocation of memory for the FAT and therefore out of boundary reads.
commit af3e50d
Author: Pali Rohár <[email protected]>
Date: Sun Aug 12 12:15:45 2018 +0200
device_info: Fix parsing partition number
Ensures that it is always valid number which does not overflow or
underflow.
commit 086e13c
Author: Pali Rohár <[email protected]>
Date: Sun Aug 12 12:15:21 2018 +0200
mkfs.fat: Fix parsing of block number
Block number must not be negative. It is 32bit so use long long type and
strtoll() function to ensure that converted positive 32bit value would fit
into type.
commit a2b97c9
Author: Pali Rohár <[email protected]>
Date: Sun Aug 12 12:13:35 2018 +0200
mkfs.fat: Fix validation of numeric command line arguments
Ensures that argument is always valid number which does not overflow or
underflow.
commit 07e63ac
Author: Pali Rohár <[email protected]>
Date: Sun Aug 12 11:56:32 2018 +0200
mkfs.fat: Fix validation of volume ID
Use same logic as in fatlabel.
commit 425a415
Author: Pali Rohár <[email protected]>
Date: Sat Aug 11 22:49:37 2018 +0200
fatlabel: Fix validation of volume ID
Standard C function strtoull() does not signal underflow, therefore it
cannot be used for conversion of arbitrary string to integer with detection
of failure.
Instead use function strtoll() and detect underflow (negative value)
manually.
Note that strto* functions skips and ignores leading whitespace characters,
so detects them manually via standard C function isspace().
commit da07aa4
Author: Pali Rohár <[email protected]>
Date: Sat Jan 19 09:48:25 2019 +0100
Update Travis configuration
* Use both gcc and clang compilers
* Compile with -fwrapv and -fsanitize=address
* Compile in both 32 and 64 modes for x86 systems
* Cross compile for little endian arm and big endian powerpc
* Run cross compiled binaries in qemu
commit a6ec69d
Author: Tobias Stoeckmann <[email protected]>
Date: Mon Jan 14 22:47:40 2019 +0100
Renamed len to out_size.
As pointed out by pali it makes sense to rename len to out_size
to make explicitly sure by proper naming that this is the actually
available memory size at "out", not the length of a string.
Signed-off-by: Tobias Stoeckmann <[email protected]>
commit 6080fe2
Author: Tobias Stoeckmann <[email protected]>
Date: Mon Jan 14 19:36:11 2019 +0100
Fixed off-by-one in local_string_to_dos_string.
The function local_string_to_dos_string is vulnerable to an off-by-one
buffer overflow. In fact, it is triggered in default usage and becomes
visible when compiled with ASAN:
$ CFLAGS="-fsanitize=address" ./configure
$ dd if=/dev/zero of=example.iso bs=1024 seek=64 count=1
$ ./src/mkfs.fat example.iso
mkfs.fat 4.1+git (2017-01-24)
=================================================================
==3857==ERROR: AddressSanitizer: stack-buffer-overflow on address ...
The problem is that the argument "len" to local_string_to_dos_string
stores the length of the output buffer. Yet it can also be used as an
index to store '\0':
If the whole "out" buffer has been written to, bytes_out is 0 and
the assignment in out[len-bytes_out] therefore leads to an off-by-one.
Signed-off-by: Tobias Stoeckmann <[email protected]>
commit 332fc29
Author: Pali Rohár <[email protected]>
Date: Sun Nov 18 20:47:29 2018 +0100
Fix memory leaks in read_fat() function
Function read_fat() allocates memory to the user supplied buffer. Therefore
that function needs complement function for releasing allocated memory and
user needs to call if after finish its work.
This patch fixes memory leaks in fsck.fat and fatlabel tools.
Fixes #13
commit 4cfd643
Author: Pali Rohár <[email protected]>
Date: Sat Sep 29 10:08:12 2018 +0200
mkfs.fat: Fix endianity for hidden_sectors
Global variable hidden_sectors is in host byte order.