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]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.