Messages in this thread | | | Date | Thu, 3 Jan 2008 15:11:20 +0100 | From | Ingo Molnar <> | Subject | Re: isofs oops - d_splice_alias+0x1f (2.6.24-rc5-mm1) |
| |
* Pekka J Enberg <penberg@cs.helsinki.fi> wrote:
> return ERR_PTR(-EACCES); > } > + if (is_bad_inode(inode)) { > + unlock_kernel(); > + iput(inode); > + return ERR_PTR(-ENOENT); > + }
fs/isofs/rock.c:474 parse_rock_ridge_inode_internal() seems buggy too:
reloc = isofs_iget(inode->i_sb, ISOFS_I(inode)->i_first_extent, 0); if (!reloc) goto out;
it should probably do "!reloc || is_bad_inode(inode)" as well.
and there are about 5 other callsites as well that only check for a NULL return.
perhaps the better fix would be to add this to inode.c:isofs_iget():
if (inode && (inode->i_state & I_NEW)) { sb->s_op->read_inode(inode); unlock_new_inode(inode); if (s_bad_inode(inode)) inode = NULL; }
?
Ingo
| |