xfs: catch invalid negative blknos in _xfs_buf_find()
authorEric Sandeen <sandeen@redhat.com>
Fri, 28 Nov 2014 03:03:55 +0000 (14:03 +1100)
committerDave Chinner <david@fromorbit.com>
Fri, 28 Nov 2014 03:03:55 +0000 (14:03 +1100)
commitdb52d09ecbf85c54e263a9d1ebfb615a9b2b3ba6
tree7c7ede18b9f3531f1831019a79e9c6dfa6edc83e
parent91ee575f2b35d1307412f917787195c2f6a38dfb
xfs: catch invalid negative blknos in _xfs_buf_find()

Here blkno is a daddr_t, which is a __s64; it's possible to hold
a value which is negative, and thus pass the (blkno >= eofs)
test.  Then we try to do a xfs_perag_get() for a ridiculous
agno via xfs_daddr_to_agno(), and bad things happen when that
fails, and returns a null pag which is dereferenced shortly
thereafter.

Found via a user-supplied fuzzed image...

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Mark Tinguely <tinguely@sgi.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
fs/xfs/xfs_buf.c