Re: [PATCH] reiserfs: Check the return value from __getblk()
Edward Shishkin <[email protected]>
| Newsgroups | gmane.comp.file-systems.reiserfs.general |
|---|---|
| Message-ID | <[email protected]> |
On 6/5/23 16:23, Matthew Wilcox (Oracle) wrote: > __getblk() can return a NULL pointer if we run out of memory or if > we try to access beyond the end of the device; check it and handle it > appropriately. > > Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> > Link: https://lore.kernel.org/lkml/CAFcO6XOacq3hscbXevPQP7sXRoYFz34ZdKPYjmd6k5sZuhGFDw@mail.gmail.com/ > Tested-by: butt3rflyh4ck <[email protected]> > Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") # probably introduced in 2002 > --- > fs/reiserfs/journal.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/fs/reiserfs/journal.c b/fs/reiserfs/journal.c > index 4d11d60f493c..dd58e0dca5e5 100644 > --- a/fs/reiserfs/journal.c > +++ b/fs/reiserfs/journal.c > @@ -2326,7 +2326,7 @@ static struct buffer_head *reiserfs_breada(struct block_device *dev, > int i, j; > > bh = __getblk(dev, block, bufsize); > - if (buffer_uptodate(bh)) > + if (!bh || buffer_uptodate(bh)) > return (bh); > > if (block + BUFNR > max_block) { > @@ -2336,6 +2336,8 @@ static struct buffer_head *reiserfs_breada(struct block_device *dev, > j = 1; > for (i = 1; i < blocks; i++) { > bh = __getblk(dev, block + i, bufsize); > + if (!bh) > + break; > if (buffer_uptodate(bh)) { > brelse(bh); > break; Acked-by: Edward Shishkin <[email protected]>