Erik Larsson
11a3997a0d
Merge tag '2021.8.22' into edge.strict_endians
...
Conflicts:
libntfs-3g/attrib.c
libntfs-3g/bootsect.c
ntfsprogs/ntfsfix.c
2021-09-06 15:12:08 +02:00
Jean-Pierre André
1261e6b60a
Fixed the detection of the end of attribute list
...
The recent detection of a truncated attribute list entry overlooked the
normal detection of the end of list. Moreover the check for name
overflow is to be done later and not needed at this stage.
2021-07-26 08:49:45 +02:00
Jean-Pierre André
45141516d7
Renamed ntfs_attr_consistent() as ntfs_attr_inconsistent()
...
The original name was error prone while checking the condition.
2021-07-19 09:23:23 +02:00
Jean-Pierre André
bb4456d339
Redesigned the INDEX_ROOT consistency checks
...
By ordering the values from smallest to biggest, there is less chance
to be caught by an arithmetic overflow.
2021-07-19 09:23:23 +02:00
Jean-Pierre André
81725f6a54
Made sure the requested compression block size is supported
...
Compressed files can only be opened if NTFS version < 3.0, and
the only supported compression block size is 16 clusters long.
2021-07-19 09:23:23 +02:00
Jean-Pierre André
4462f82580
Reset the resident attribute offset when appending from none
...
When there is no resident attribute value, its offset is unsafe, so better
to recompute it when appending data.
2021-07-19 09:23:23 +02:00
Jean-Pierre André
b95b4ba1a5
Rejected negative data length in readall()
...
The negative data length of an attribute is an indication of a probable
corruption and must be rejected.
2021-07-19 09:23:23 +02:00
Jean-Pierre André
e70d10d848
Added a check of the minimal length of some attributes
...
The minimal lengths of STANDARD_ATTRIBUTE and OBJECT_ID were not
checked and could lead to out-of-buffer access.
2021-07-19 09:23:23 +02:00
Jean-Pierre André
55e7326350
Avoided endless recursions when allocating the main bitmap
...
Allocating clusters to the main bitmap may imply updating the bitmap
itself within a cluster not yet allocated. This can turn into endless
recursions and has to be rejected. Currently the bitmap is assumed
to be fully allocated.
2021-07-19 09:23:23 +02:00
Jean-Pierre André
61134117c1
Fixed checking the end of attrdef data
...
Incomplete attribute definitions have to be rejected.
2021-07-19 09:23:23 +02:00
Jean-Pierre André
7f45544ed7
Added and grouped generic attribute checks
...
Checked that attributes are [non-]resident when they have to be, and
grouped consistency checks on each of them in a dedicated function.
Consequenly request the checks where needed and remove existing index
checks.
2021-07-12 08:31:18 +02:00
Jean-Pierre André
68ead9b8fc
Checked expanded attribute does not overflow the space in use
...
When resizing an attribute, make sure the trailing data is moved in
the correct direction.
2021-07-12 08:31:18 +02:00
Jean-Pierre André
84478c4012
Checked attributes layout against length actually used
...
The end of the attributes must be checked against the space in use
rather than the allocated space. This contributes to the safety of
subsequent attribute resizing.
2021-07-12 08:31:18 +02:00
Jean-Pierre André
4e094563d4
Checked $MFT data to be ready before fetching an extent
2021-07-12 08:31:18 +02:00
Jean-Pierre André
e2e625065d
Checked the layout of attribute list entries
...
Make sure the attribute list has at least one element, and that each of
them has the minimal size and does not overflow out of the end of list.
2021-07-12 08:31:17 +02:00
Jean-Pierre André
4e09b252af
Checked name limits while looking up for an external attribute
...
Make sure the name of an attribute does not overflow beyond the
attribute length.
2021-07-12 08:31:17 +02:00
Jean-Pierre André
d86c34390d
Added a consistency check of attribute size in readall()
...
Make sure the attribute designated to readall() has a reasonable size.
Apart from a bitmap, in a valid call, the attribute size is limited to
65536, and bitmaps are limited by the number of cluster.
2021-05-17 15:39:52 +03:00
Jean-Pierre André
00a5478625
Added check of layout of attributes
...
Make sure the attributes fully lie within the MFT record, and make sure
their variable components (name, runlist, value) fully lie within the
attribute.
2021-05-17 15:31:52 +03:00
Erik Larsson
a00610ed15
Merge branch 'edge' into edge.strict_endians
...
Conflicts:
include/ntfs-3g/layout.h
libntfs-3g/acls.c
libntfs-3g/attrib.c
libntfs-3g/bootsect.c
libntfs-3g/dir.c
libntfs-3g/mft.c
libntfs-3g/reparse.c
ntfsprogs/ntfsinfo.c
ntfsprogs/ntfsresize.c
ntfsprogs/playlog.c
src/lowntfs-3g.c
src/ntfs-3g_common.c
2021-03-05 14:48:11 +02:00
Jean-Pierre André
4b8a660006
Fixed maintining the allocated size when updating sparse files
...
When filling a hole in a sparse file, the beginning of the runlist
does not need to be updated. However the allocated size is within
the extent holding its beginning and it needs to be updated.
2020-11-18 11:33:49 +01:00
Jean-Pierre André
c5530af508
Silenced warnings about fallthrough situations in libntfs-3g
...
Insert a comment when fallthrough situations are desired in switch cases.
2020-03-07 12:00:11 +01:00
Erik Larsson
26ed262ae4
Merge tag '2017.2.15' into edge.strict_endians
...
Conflicts:
include/ntfs-3g/layout.h
include/ntfs-3g/logfile.h
libntfs-3g/reparse.c
libntfs-3g/unistr.c
ntfsprogs/ntfsdump_logfile.c
ntfsprogs/ntfsfix.c
ntfsprogs/ntfsinfo.c
ntfsprogs/ntfsrecover.c
ntfsprogs/ntfsresize.c
ntfsprogs/playlog.c
src/lowntfs-3g.c
src/ntfs-3g.c
2017-03-21 05:41:54 +01:00
Jean-Pierre André
7a0cf11e1c
Fixed expanding $STANDARD_INFORMATION with almost-full MFT record
...
When setting a security descriptor on an NTFS v1.2 format file in an
NTFS v3.0+ volume, NTFS-3G would migrate $STANDARD_INFORMATION to the
new format, which requires extending its size from 48 to 72 bytes. If
this happened while the file's MFT record was almost full, and none of
the file's attributes could be made non-resident, and the file did not
have an attribute list attribute, then the operation would unexpectedly
fail with ENOENT. Fix this by adding an attribute list to the file in
this situation.
(contributed by Eric Biggers)
2017-02-11 10:58:46 +01:00
Jean-Pierre André
fdefd8feba
Fixed bad indentations (cosmetic)
2017-02-11 08:53:20 +01:00
Erik Larsson
c9b795489e
Merge version 2016.2.22 into the strict endians branch.
...
Conflicts:
libntfs-3g/volume.c
2016-02-22 09:40:35 +01:00
Erik Larsson
62b5c91420
Fix compiler warnings about mismatching printf format / argument type.
...
For 64-bit (e.g. x86_64) Linux the 64-bit wide types resolve to long,
not long long as is the case in 32-bit (e.g. i386) Linux. So we need an
explicit cast to long long for 64-bit types since the format string must
specify the 'll' modifier in order to print 64-bit values.
2016-02-16 09:30:49 +01:00
Erik Larsson
34bb449324
Merge branch 'edge' into edge.strict_endians
...
Conflicts:
libntfs-3g/dir.c
libntfs-3g/index.c
libntfs-3g/runlist.c
ntfsprogs/ntfsfix.c
ntfsprogs/ntfsinfo.c
2016-02-05 18:02:02 +01:00
Erik Larsson
9893ea9ee6
Merge endianness fixes.
...
Conflicts:
libntfs-3g/attrib.c
2016-01-28 09:22:42 +01:00
Erik Larsson
760ddd62cf
Merge endianness fixes required for the strict endians code to compile.
...
Conflicts:
libntfs-3g/attrib.c
libntfs-3g/dir.c
libntfs-3g/logfile.c
libntfs-3g/volume.c
ntfsprogs/ntfscp.c
ntfsprogs/ntfsdump_logfile.c
ntfsprogs/ntfsfallocate.c
ntfsprogs/ntfsfix.c
ntfsprogs/ntfsinfo.c
ntfsprogs/ntfsresize.c
ntfsprogs/ntfstruncate.c
2016-01-28 09:21:09 +01:00
Erik Larsson
597adff2bb
Replace all le32 "not" negations with le32_not(...).
2016-01-28 08:29:00 +01:00
Erik Larsson
85588b8e92
Replace all le16 "not" negations with le16_not(...).
2016-01-28 08:28:59 +01:00
Erik Larsson
1500a77676
Replace all le32 "or" calculations with le32_or(...).
2016-01-28 08:28:54 +01:00
Erik Larsson
b61e7ff449
Replace all le16 "or" calculations with le16_or(...).
2016-01-28 08:28:53 +01:00
Erik Larsson
7b3700ed5e
Replace all le32 "and" calculations with le32_and(...).
2016-01-28 08:28:51 +01:00
Erik Larsson
2b4c3a618c
Replace all le16 "and" calculations with le16_and(...).
2016-01-28 08:28:50 +01:00
Erik Larsson
e970b57c74
Replace all le32 zero "and" test conditions with le32_andz(...).
2016-01-28 08:28:49 +01:00
Erik Larsson
9f5ad52e5f
Replace all le32 non-zero "and" test conditions with !le32_andz(...).
2016-01-28 08:28:48 +01:00
Erik Larsson
1b7bfaa133
Replace all le16 zero "and" test conditions with le16_andz(...).
2016-01-28 08:28:47 +01:00
Erik Larsson
35c72761c7
Replace all le16 non-zero "and" test conditions with !le16_andz(...).
2016-01-28 08:28:46 +01:00
Erik Larsson
5097bb9ea3
Replace all sle64 zero test conditions with "sle64_cmpz(...)".
2016-01-28 08:28:44 +01:00
Erik Larsson
97ccd587d6
Replace all sle64 non-zero test conditions with "!sle64_cmpz(...)".
2016-01-28 08:28:43 +01:00
Erik Larsson
ed87a4dffa
Replace all le32 zero test conditions with "le32_cmpz(...)".
2016-01-28 08:28:40 +01:00
Erik Larsson
18990412fa
Replace all le32 non-zero test conditions with "!le32_cmpz(...)".
2016-01-28 08:28:39 +01:00
Erik Larsson
e366bef954
Replace all le16 zero test conditions with "le16_cmpz(...)".
2016-01-28 08:28:38 +01:00
Erik Larsson
90697bb5ab
Replace all le16 non-zero test conditions with "!le16_cmpz(...)".
2016-01-28 08:28:37 +01:00
Erik Larsson
0876896169
Replace all le32 usage of the '!=' operation with "!le32_eq(...)".
2016-01-28 08:28:27 +01:00
Erik Larsson
011a9e9e5e
Replace all le32 usage of the '==' operation with "le32_eq(...)".
2016-01-28 08:28:26 +01:00
Erik Larsson
59a05b5c34
Replace all le16 usage of the '!=' operation with "!le16_eq(...)".
2016-01-28 08:28:25 +01:00
Erik Larsson
347bdf21ec
Replace all le16 usage of the '==' operation with "le16_eq(...)".
2016-01-28 08:28:23 +01:00
Erik Larsson
9cf04fd2cd
Fix incorrect usage of native/little-endian types, signed types, etc.
...
This is harmless with regard to code generation but if we turn on strict
type checking these type mismatches will result in errors.
2015-12-21 23:55:31 +01:00