OSDN Git Service

Fixed a bad sanity check in ntfsfix
authorJean-Pierre André <jpandre@users.sourceforge.net>
Wed, 30 Sep 2015 06:51:20 +0000 (08:51 +0200)
committerJean-Pierre André <jpandre@users.sourceforge.net>
Wed, 30 Sep 2015 06:51:20 +0000 (08:51 +0200)
Fix misordered checks to avoid potential segfaults on badly damaged partitions.

ntfsprogs/ntfsfix.c

index add14d0..d5cbf72 100644 (file)
@@ -739,13 +739,14 @@ static ATTR_RECORD *find_unnamed_attr(MFT_RECORD *mrec, ATTR_TYPES type)
                        /* fetch the requested attribute */
        offset = le16_to_cpu(mrec->attrs_offset);
        a = (ATTR_RECORD*)((char*)mrec + offset);
-       while ((a->type != AT_END)
-           && ((a->type != type) || a->name_length)
-           && (offset < le32_to_cpu(mrec->bytes_in_use))) {
+       while ((offset < le32_to_cpu(mrec->bytes_in_use))
+           && (a->type != AT_END)
+           && ((a->type != type) || a->name_length)) {
                offset += le32_to_cpu(a->length);
                a = (ATTR_RECORD*)((char*)mrec + offset);
        }
-       if ((a->type != type)
+       if ((offset >= le32_to_cpu(mrec->bytes_in_use))
+           || (a->type != type)
            || a->name_length)
                a = (ATTR_RECORD*)NULL;
        return (a);