mirror of
https://github.com/torvalds/linux.git
synced 2026-10-13 05:41:02 +02:00
staging: fbtft: fix potential memory leak in fbtft_framebuffer_alloc()
After commit56c134f7f1("fbdev: Track deferred-I/O pages in pageref struct"), fb_deferred_io_init() allocates memory for info->pagerefs as well as return an error code on failure. However the error code is ignored here and the memory allocated could leak because of not calling fb_deferred_io_cleanup() on the error path. Fix them by adding the cleanup function on the error path, and handling the error code returned by fb_deferred_io_init(). Fixes:56c134f7f1("fbdev: Track deferred-I/O pages in pageref struct") Signed-off-by: Abdun Nihaal <abdun.nihaal@gmail.com> Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Link: https://lore.kernel.org/r/fd2be49cfef72799f17a96d01a4c6b92770cda7d.1751207100.git.abdun.nihaal@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
49bba7ef33
commit
505bffe212
|
|
@ -612,7 +612,8 @@ struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
|
|||
info->fix.line_length = width * bpp / 8;
|
||||
info->fix.accel = FB_ACCEL_NONE;
|
||||
info->fix.smem_len = vmem_size;
|
||||
fb_deferred_io_init(info);
|
||||
if (fb_deferred_io_init(info))
|
||||
goto release_framebuf;
|
||||
|
||||
info->var.rotate = pdata->rotate;
|
||||
info->var.xres = width;
|
||||
|
|
@ -652,7 +653,7 @@ struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
|
|||
if (par->gamma.curves && gamma) {
|
||||
if (fbtft_gamma_parse_str(par, par->gamma.curves, gamma,
|
||||
strlen(gamma)))
|
||||
goto release_framebuf;
|
||||
goto cleanup_deferred;
|
||||
}
|
||||
|
||||
/* Transmit buffer */
|
||||
|
|
@ -669,7 +670,7 @@ struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
|
|||
if (txbuflen > 0) {
|
||||
txbuf = devm_kzalloc(par->info->device, txbuflen, GFP_KERNEL);
|
||||
if (!txbuf)
|
||||
goto release_framebuf;
|
||||
goto cleanup_deferred;
|
||||
par->txbuf.buf = txbuf;
|
||||
par->txbuf.len = txbuflen;
|
||||
}
|
||||
|
|
@ -691,6 +692,8 @@ struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
|
|||
|
||||
return info;
|
||||
|
||||
cleanup_deferred:
|
||||
fb_deferred_io_cleanup(info);
|
||||
release_framebuf:
|
||||
fb_deferred_io_cleanup(info);
|
||||
framebuffer_release(info);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user