Showing error 1751

User: Jiri Slaby
Error type: Invalid Pointer Dereference
Error type description: A pointer which is invalid is being dereferenced
File location: fs/ext4/namei.c
Line in file: 1385
Project: Linux Kernel
Project version: 2.6.28
Tools: Smatch (1.59)
Entered: 2013-09-10 20:24:52 UTC


Source:

1355        int                namelen = dentry->d_name.len;
1356        struct buffer_head *bh2;
1357        struct dx_root        *root;
1358        struct dx_frame        frames[2], *frame;
1359        struct dx_entry *entries;
1360        struct ext4_dir_entry_2        *de, *de2;
1361        char                *data1, *top;
1362        unsigned        len;
1363        int                retval;
1364        unsigned        blocksize;
1365        struct dx_hash_info hinfo;
1366        ext4_lblk_t  block;
1367        struct fake_dirent *fde;
1368
1369        blocksize =  dir->i_sb->s_blocksize;
1370        dxtrace(printk(KERN_DEBUG "Creating index\n"));
1371        retval = ext4_journal_get_write_access(handle, bh);
1372        if (retval) {
1373                ext4_std_error(dir->i_sb, retval);
1374                brelse(bh);
1375                return retval;
1376        }
1377        root = (struct dx_root *) bh->b_data;
1378
1379        bh2 = ext4_append(handle, dir, &block, &retval);
1380        if (!(bh2)) {
1381                brelse(bh);
1382                return retval;
1383        }
1384        EXT4_I(dir)->i_flags |= EXT4_INDEX_FL;
1385        data1 = bh2->b_data;
1386
1387        /* The 0th block becomes the root, move the dirents out */
1388        fde = &root->dotdot;
1389        de = (struct ext4_dir_entry_2 *)((char *)fde +
1390                ext4_rec_len_from_disk(fde->rec_len));
1391        len = ((char *) root) + blocksize - (char *) de;
1392        memcpy (data1, de, len);
1393        de = (struct ext4_dir_entry_2 *) data1;
1394        top = data1 + len;
1395        while ((char *)(de2 = ext4_next_entry(de)) < top)
Show full sources