[syslinux:master] ntfs: remove wrong checks

syslinux-bot for Paulo Alcantara pcacjr at gmail.com
Fri Feb 24 10:45:42 PST 2012


Commit-ID:  83a76e01ba0172202adf0a0ebdac0fd9710ccae5
Gitweb:     http://www.syslinux.org/commit/83a76e01ba0172202adf0a0ebdac0fd9710ccae5
Author:     Paulo Alcantara <pcacjr at gmail.com>
AuthorDate: Sat, 11 Feb 2012 21:24:56 -0300
Committer:  Paulo Alcantara <pcacjr at gmail.com>
CommitDate: Sat, 11 Feb 2012 21:30:16 -0300

ntfs: remove wrong checks

As an attribute may be stored in a NTFS record rather than the current
record being used, these checks wouldn't work anymore for this case.

Signed-off-by: Paulo Alcantara <pcacjr at gmail.com>

---
 core/fs/ntfs/ntfs.c |   72 +++++++++++++++++----------------------------------
 1 files changed, 24 insertions(+), 48 deletions(-)

diff --git a/core/fs/ntfs/ntfs.c b/core/fs/ntfs/ntfs.c
index 75690fe..0f6cc44 100644
--- a/core/fs/ntfs/ntfs.c
+++ b/core/fs/ntfs/ntfs.c
@@ -77,7 +77,7 @@ static void ntfs_fixups_writeback(struct fs_info *fs, struct ntfs_record *nrec)
     uint16_t usa_count;
     uint16_t *blk;
 
-    dprintf("in %s\n", __func__);
+    dprintf("in %s()\n", __func__);
 
     if (nrec->magic != NTFS_MAGIC_FILE && nrec->magic != NTFS_MAGIC_INDX)
         return;
@@ -114,7 +114,7 @@ static int ntfs_read(struct fs_info *fs, void *buf, size_t len, uint64_t count,
     uint64_t loffset;
     uint64_t k;
 
-    dprintf("in %s\n", __func__);
+    dprintf("in %s()\n", __func__);
 
     if (count > len)
         goto out;
@@ -192,7 +192,7 @@ static struct ntfs_mft_record *ntfs_mft_record_lookup_3_0(struct fs_info *fs,
     int err;
     struct ntfs_mft_record *mrec;
 
-    dprintf("in %s\n", __func__);
+    dprintf("in %s()\n", __func__);
 
     buf = (uint8_t *)malloc(mft_record_size);
     if (!buf)
@@ -207,7 +207,7 @@ static struct ntfs_mft_record *ntfs_mft_record_lookup_3_0(struct fs_info *fs,
         err = ntfs_read(fs, buf, mft_record_size, mft_record_size, &right_blk,
                         &offset, &next_offset, &lcn);
         if (err) {
-            printf("Error on reading from cache.\n");
+            printf("Error while reading from cache.\n");
             break;
         }
 
@@ -254,7 +254,7 @@ static struct ntfs_mft_record *ntfs_mft_record_lookup_3_1(struct fs_info *fs,
     int err;
     struct ntfs_mft_record *mrec;
 
-    dprintf("in %s\n", __func__);
+    dprintf("in %s()\n", __func__);
 
     buf = (uint8_t *)malloc(mft_record_size);
     if (!buf)
@@ -268,7 +268,7 @@ static struct ntfs_mft_record *ntfs_mft_record_lookup_3_1(struct fs_info *fs,
         err = ntfs_read(fs, buf, mft_record_size, mft_record_size, &right_blk,
                         &offset, &next_offset, &lcn);
         if (err) {
-            printf("Error on reading from cache.\n");
+            printf("Error while reading from cache.\n");
             break;
         }
 
@@ -305,7 +305,7 @@ static bool ntfs_filename_cmp(const char *dname, struct ntfs_idx_entry *ie)
     uint8_t entry_fn_len;
     unsigned i;
 
-    dprintf("in %s\n", __func__);
+    dprintf("in %s()\n", __func__);
 
     entry_fn = ie->key.file_name.file_name;
     entry_fn_len = ie->key.file_name.file_name_len;
@@ -357,7 +357,7 @@ static int parse_data_run(const void *stream, uint32_t *offset,
 
     (void)attr_len;
 
-    dprintf("in %s\n", __func__);
+    dprintf("in %s()\n", __func__);
 
     chunk->flags &= ~MAP_MASK;
 
@@ -436,7 +436,7 @@ ntfs_attr_list_lookup(struct fs_info *fs, struct ntfs_attr_record *attr,
     struct ntfs_mft_record *retval;
     uint64_t start_blk = 0;
 
-    dprintf("in %s\n", __func__);
+    dprintf("in %s()\n", __func__);
 
     if (attr->non_resident)
         goto handle_non_resident_attr;
@@ -482,7 +482,7 @@ handle_non_resident_attr:
                 err = ntfs_read(fs, buf, blk_size, blk_size, &blk,
                                 &blk_offset, NULL, (uint64_t *)&lcn);
                 if (err) {
-                    printf("Error on reading from cache.\n");
+                    printf("Error while reading from cache.\n");
                     goto out;
                 }
 
@@ -491,8 +491,8 @@ handle_non_resident_attr:
                 for (; (uint8_t *)attr_entry < (uint8_t *)&buf[0] + len;
                      attr_entry = (struct ntfs_attr_list_entry *)
                          ((uint8_t *)attr_entry + attr_entry->length)) {
-                    printf("<$ATTRIBUTE_LIST> Attribute type: 0x%x\n",
-                           attr_entry->type);
+                    dprintf("<$ATTRIBUTE_LIST> Attribute type: 0x%x\n",
+                            attr_entry->type);
                     if (attr_entry->type == type)
                         goto found; /* We got the attribute! :-) */
                 }
@@ -540,7 +540,7 @@ __ntfs_attr_lookup(struct fs_info *fs, uint32_t type,
     struct ntfs_attr_record *attr;
     struct ntfs_attr_record *attr_list_attr;
 
-    dprintf("in %s\n", __func__);
+    dprintf("in %s()\n", __func__);
 
     if (!_mrec || type == NTFS_AT_END)
         goto out;
@@ -625,15 +625,13 @@ static int index_inode_setup(struct fs_info *fs, unsigned long mft_no,
     struct ntfs_mft_record *mrec, *lmrec;
     struct ntfs_attr_record *attr;
     enum dirent_type d_type;
-    uint32_t len;
-    struct ntfs_idx_root *ir;
     uint8_t *attr_len;
     struct mapping_chunk chunk;
     int err;
     uint8_t *stream;
     uint32_t offset;
 
-    dprintf("in %s\n", __func__);
+    dprintf("in %s()\n", __func__);
 
     mrec = NTFS_SB(fs)->mft_record_lookup(fs, mft_no, &start_blk);
     if (!mrec) {
@@ -658,16 +656,6 @@ static int index_inode_setup(struct fs_info *fs, unsigned long mft_no,
             goto out;
         }
 
-        /* note: struct ntfs_idx_root is always resident */
-        ir = (struct ntfs_idx_root *)((uint8_t *)attr +
-                                    attr->data.resident.value_offset);
-        len = attr->data.resident.value_len;
-        if ((uint8_t *)ir + len > (uint8_t *)mrec +
-                        NTFS_SB(fs)->mft_record_size) {
-            printf("Corrupt index.\n");
-            goto out;
-        }
-
         /* check if we have a previous allocated state structure */
         if (readdir_state) {
             free(readdir_state);
@@ -751,7 +739,6 @@ static struct inode *ntfs_index_lookup(const char *dname, struct inode *dir)
     uint64_t blk_offset;
     struct ntfs_attr_record *attr;
     struct ntfs_idx_root *ir;
-    uint32_t len;
     struct ntfs_idx_entry *ie;
     const uint64_t blk_size = UINT64_C(1) << BLOCK_SHIFT(fs);
     uint8_t buf[blk_size];
@@ -766,7 +753,7 @@ static struct inode *ntfs_index_lookup(const char *dname, struct inode *dir)
     int64_t last_lcn;
     struct inode *inode;
 
-    dprintf("in %s\n", __func__);
+    dprintf("in %s()\n", __func__);
 
     mrec = NTFS_SB(fs)->mft_record_lookup(fs, NTFS_PVT(dir)->mft_no, NULL);
     if (!mrec) {
@@ -783,10 +770,6 @@ static struct inode *ntfs_index_lookup(const char *dname, struct inode *dir)
 
     ir = (struct ntfs_idx_root *)((uint8_t *)attr +
                             attr->data.resident.value_offset);
-    len = attr->data.resident.value_len;
-    if ((uint8_t *)ir + len > (uint8_t *)mrec + NTFS_SB(fs)->mft_record_size)
-        goto index_err;
-
     ie = (struct ntfs_idx_entry *)((uint8_t *)&ir->index +
                                 ir->index.entries_offset);
     for (;; ie = (struct ntfs_idx_entry *)((uint8_t *)ie + ie->len)) {
@@ -853,7 +836,7 @@ static struct inode *ntfs_index_lookup(const char *dname, struct inode *dir)
                 err = ntfs_read(fs, &buf, blk_size, blk_size, &blk,
                                 &blk_offset, NULL, (uint64_t *)&lcn);
                 if (err) {
-                    printf("Error on reading from cache.\n");
+                    printf("Error while reading from cache.\n");
                     goto not_found;
                 }
 
@@ -896,8 +879,6 @@ not_found:
     dprintf("Index not found\n");
 
 out:
-    dprintf("%s not found!\n", dname);
-
     free(mrec);
 
     return NULL;
@@ -912,8 +893,6 @@ found:
         goto out;
     }
 
-    dprintf("%s found!\n", dname);
-
     free(mrec);
 
     return inode;
@@ -952,7 +931,7 @@ static int ntfs_next_extent(struct inode *inode, uint32_t lstart)
     const uint32_t sec_size = SECTOR_SIZE(fs);
     const uint32_t sec_shift = SECTOR_SHIFT(fs);
 
-    dprintf("in %s\n", __func__);
+    dprintf("in %s()\n", __func__);
 
     if (!NTFS_PVT(inode)->non_resident) {
         pstart = (sbi->mft_blk + NTFS_PVT(inode)->here) << BLOCK_SHIFT(fs) >>
@@ -1001,7 +980,7 @@ static uint32_t ntfs_getfssec(struct file *file, char *buf, int sectors,
     struct ntfs_attr_record *attr;
     char *p;
 
-    dprintf("in %s\n", __func__);
+    dprintf("in %s()\n", __func__);
 
     non_resident = NTFS_PVT(inode)->non_resident;
 
@@ -1071,7 +1050,7 @@ static int ntfs_readdir(struct file *file, struct dirent *dirent)
     int64_t lcn;
     char filename[NTFS_MAX_FILE_NAME_LEN + 1];
 
-    dprintf("in %s\n", __func__);
+    dprintf("in %s()\n", __func__);
 
     mrec = NTFS_SB(fs)->mft_record_lookup(fs, NTFS_PVT(inode)->mft_no, NULL);
     if (!mrec) {
@@ -1088,9 +1067,6 @@ static int ntfs_readdir(struct file *file, struct dirent *dirent)
 
     ir = (struct ntfs_idx_root *)((uint8_t *)attr +
                             attr->data.resident.value_offset);
-    len = attr->data.resident.value_len;
-    if ((uint8_t *)ir + len > (uint8_t *)mrec + NTFS_SB(fs)->mft_record_size)
-        goto index_err;
 
     if (!file->offset && readdir_state->in_idx_root) {
         file->offset = (uint32_t)((uint8_t *)&ir->index +
@@ -1138,7 +1114,7 @@ next_run:
     while (count--) {
         err = parse_data_run(stream, &offset, attr_len, &chunk);
         if (err) {
-            printf("Error on parsing data runs.\n");
+            printf("Error while parsing data runs.\n");
             goto out;
         }
 
@@ -1169,7 +1145,7 @@ next_vcn:
     err = ntfs_read(fs, &buf, blk_size, blk_size, &blk, &blk_offset, NULL,
                     (uint64_t *)&lcn);
     if (err) {
-        printf("Error on reading from cache.\n");
+        printf("Error while reading from cache.\n");
         goto not_found;
     }
 
@@ -1261,7 +1237,7 @@ static struct inode *ntfs_iget_root(struct fs_info *fs)
     struct inode *inode;
     int err;
 
-    dprintf("in %s\n", __func__);
+    dprintf("in %s()\n", __func__);
 
     /* Fetch the $Volume MFT record */
     start_blk = 0;
@@ -1325,7 +1301,7 @@ static int ntfs_fs_init(struct fs_info *fs)
     struct disk *disk = fs->fs_dev->disk;
     uint8_t mft_record_shift;
 
-    dprintf("in %s\n", __func__);
+    dprintf("in %s()\n", __func__);
 
     read_count = disk->rdwr_sectors(disk, &ntfs, 0, 1, 0);
     if (!read_count)
@@ -1374,7 +1350,7 @@ static int ntfs_fs_init(struct fs_info *fs)
         sbi->clusters = 0xFFFFFFFFFFF4ULL;
 
     /*
-     * Assume NTFS version 3.0 to begin with.  If we find that the
+     * Assume NTFS version 3.0 to begin with. If we find that the
      * volume is a different version later on, we will adjust at
      * that time.
      */


More information about the Syslinux-commits mailing list