Showing error 1669

User: Jiri Slaby
Error type: Invalid Pointer Dereference
Error type description: A pointer which is invalid is being dereferenced
File location: fs/xfs/xfs_dir2_sf.c
Line in file: 209
Project: Linux Kernel
Project version: 2.6.28
Tools: Smatch (1.59)
Entered: 2013-09-10 07:54:05 UTC


Source:

 179         */
 180        block = kmem_alloc(mp->m_dirblksize, KM_SLEEP);
 181        memcpy(block, bp->data, mp->m_dirblksize);
 182        logflags = XFS_ILOG_CORE;
 183        if ((error = xfs_dir2_shrink_inode(args, mp->m_dirdatablk, bp))) {
 184                ASSERT(error != ENOSPC);
 185                goto out;
 186        }
 187        /*
 188         * The buffer is now unconditionally gone, whether
 189         * xfs_dir2_shrink_inode worked or not.
 190         *
 191         * Convert the inode to local format.
 192         */
 193        dp->i_df.if_flags &= ~XFS_IFEXTENTS;
 194        dp->i_df.if_flags |= XFS_IFINLINE;
 195        dp->i_d.di_format = XFS_DINODE_FMT_LOCAL;
 196        ASSERT(dp->i_df.if_bytes == 0);
 197        xfs_idata_realloc(dp, size, XFS_DATA_FORK);
 198        logflags |= XFS_ILOG_DDATA;
 199        /*
 200         * Copy the header into the newly allocate local space.
 201         */
 202        sfp = (xfs_dir2_sf_t *)dp->i_df.if_u1.if_data;
 203        memcpy(sfp, sfhp, xfs_dir2_sf_hdr_size(sfhp->i8count));
 204        dp->i_d.di_size = size;
 205        /*
 206         * Set up to loop over the block's entries.
 207         */
 208        btp = xfs_dir2_block_tail_p(mp, block);
 209        ptr = (char *)block->u;
 210        endptr = (char *)xfs_dir2_block_leaf_p(btp);
 211        sfep = xfs_dir2_sf_firstentry(sfp);
 212        /*
 213         * Loop over the active and unused entries.
 214         * Stop when we reach the leaf/tail portion of the block.
 215         */
 216        while (ptr < endptr) {
 217                /*
 218                 * If it's unused, just skip over it.
 219                 */
Show full sources