Showing error 1878

User: Jiri Slaby
Error type: Invalid Pointer Dereference
Error type description: A pointer which is invalid is being dereferenced
File location: fs/reiserfs/xattr.c
Line in file: 1200
Project: Linux Kernel
Project version: 2.6.28
Tools: Smatch (1.59)
Entered: 2013-09-11 08:47:26 UTC


Source:

1170                dentry = lookup_one_len(PRIVROOT_NAME, s->s_root,
1171                                        strlen(PRIVROOT_NAME));
1172                if (!IS_ERR(dentry)) {
1173                        if (!(mount_flags & MS_RDONLY) && !dentry->d_inode) {
1174                                struct inode *inode = dentry->d_parent->d_inode;
1175                                mutex_lock_nested(&inode->i_mutex,
1176                                                  I_MUTEX_XATTR);
1177                                err = inode->i_op->mkdir(inode, dentry, 0700);
1178                                mutex_unlock(&inode->i_mutex);
1179                                if (err) {
1180                                        dput(dentry);
1181                                        dentry = NULL;
1182                                }
1183
1184                                if (dentry && dentry->d_inode)
1185                                        reiserfs_warning(s,
1186                                                         "Created %s on %s - reserved for "
1187                                                         "xattr storage.",
1188                                                         PRIVROOT_NAME,
1189                                                         reiserfs_bdevname
1190                                                         (inode->i_sb));
1191                        } else if (!dentry->d_inode) {
1192                                dput(dentry);
1193                                dentry = NULL;
1194                        }
1195                } else
1196                        err = PTR_ERR(dentry);
1197
1198                if (!err && dentry) {
1199                        s->s_root->d_op = &xattr_lookup_poison_ops;
1200                        reiserfs_mark_inode_private(dentry->d_inode);
1201                        REISERFS_SB(s)->priv_root = dentry;
1202                } else if (!(mount_flags & MS_RDONLY)) {        /* xattrs are unavailable */
1203                        /* If we're read-only it just means that the dir hasn't been
1204                         * created. Not an error -- just no xattrs on the fs. We'll
1205                         * check again if we go read-write */
1206                        reiserfs_warning(s, "xattrs/ACLs enabled and couldn't "
1207                                         "find/create .reiserfs_priv. Failing mount.");
1208                        err = -EOPNOTSUPP;
1209                }
1210        }
Show full sources