Showing error 1752

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: 1478
Project: Linux Kernel
Project version: 2.6.28
Tools: Smatch (1.59)
Entered: 2013-09-10 20:24:52 UTC


Source:

1448
1449        sb = dir->i_sb;
1450        blocksize = sb->s_blocksize;
1451        if (!dentry->d_name.len)
1452                return -EINVAL;
1453        if (is_dx(dir)) {
1454                retval = ext4_dx_add_entry(handle, dentry, inode);
1455                if (!retval || (retval != ERR_BAD_DX_DIR))
1456                        return retval;
1457                EXT4_I(dir)->i_flags &= ~EXT4_INDEX_FL;
1458                dx_fallback++;
1459                ext4_mark_inode_dirty(handle, dir);
1460        }
1461        blocks = dir->i_size >> sb->s_blocksize_bits;
1462        for (block = 0, offset = 0; block < blocks; block++) {
1463                bh = ext4_bread(handle, dir, block, 0, &retval);
1464                if(!bh)
1465                        return retval;
1466                retval = add_dirent_to_buf(handle, dentry, inode, NULL, bh);
1467                if (retval != -ENOSPC)
1468                        return retval;
1469
1470                if (blocks == 1 && !dx_fallback &&
1471                    EXT4_HAS_COMPAT_FEATURE(sb, EXT4_FEATURE_COMPAT_DIR_INDEX))
1472                        return make_indexed_dir(handle, dentry, inode, bh);
1473                brelse(bh);
1474        }
1475        bh = ext4_append(handle, dir, &block, &retval);
1476        if (!bh)
1477                return retval;
1478        de = (struct ext4_dir_entry_2 *) bh->b_data;
1479        de->inode = 0;
1480        de->rec_len = ext4_rec_len_to_disk(blocksize);
1481        return add_dirent_to_buf(handle, dentry, inode, de, bh);
1482}
1483
1484/*
1485 * Returns 0 for success, or a negative error value
1486 */
1487static int ext4_dx_add_entry(handle_t *handle, struct dentry *dentry,
1488                             struct inode *inode)
Show full sources