* [PATCH v2] staging: fbtft: prefer snprintf over sprintf in fbtft-core.c [not found] <20260820-fbtft-v2-final-v2-1-44d107b04634.ref@yahoo.pl> @ 2026-08-20 16:58 ` Tomasz Unger 2026-08-20 17:07 ` sashiko-bot 2026-08-24 8:59 ` Andy Shevchenko 0 siblings, 2 replies; 4+ messages in thread From: Tomasz Unger @ 2026-08-20 16:58 UTC (permalink / raw) To: Andy Shevchenko, Greg Kroah-Hartman Cc: dri-devel, linux-fbdev, linux-staging, linux-kernel, Dan Carpenter, Tomasz Unger Using sprintf has potential for buffer overflows if the formatted string exceeds the destination buffer size. Replace it with snprintf, passing sizeof() of the fixed-size stack buffers (text1[50] and text2[50]) so the write is always bounded. An overflow is impossible here: even the worst case for the argument types (size_t for text1, three ints for text2) still fits within 50 bytes. Use snprintf() rather than scnprintf() since the return value is not used here. Signed-off-by: Tomasz Unger <tomasz.unger@yahoo.pl> --- Changes in v2 (per Dan Carpenter's review): - Switched from scnprintf() to snprintf(), since the return value is unused. - Reworded the commit message: overflow is impossible, not merely unlikely, and dropped detail about where the values come from. Verified with checkpatch.pl - no errors or warnings. Compiled the fbtft module successfully with CONFIG_FB_TFT=m. fb.ko, syscopyarea.ko, sysimgblt.ko, sysfillrect.ko, fb_sys_fops.ko and fbtft.ko all load without errors in a QEMU environment (verified via insmod and lsmod, dmesg shows no errors). --- drivers/staging/fbtft/fbtft-core.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/staging/fbtft/fbtft-core.c b/drivers/staging/fbtft/fbtft-core.c index ca0c38221c16..9ea0442a337e 100644 --- a/drivers/staging/fbtft/fbtft-core.c +++ b/drivers/staging/fbtft/fbtft-core.c @@ -784,10 +784,10 @@ int fbtft_register_framebuffer(struct fb_info *fb_info) fbtft_sysfs_init(par); if (par->txbuf.buf && par->txbuf.len >= 1024) - sprintf(text1, ", %zu KiB buffer memory", par->txbuf.len >> 10); + snprintf(text1, sizeof(text1), ", %zu KiB buffer memory", par->txbuf.len >> 10); if (spi) - sprintf(text2, ", spi%d.%d at %d MHz", spi->controller->bus_num, - spi_get_chipselect(spi, 0), spi->max_speed_hz / 1000000); + snprintf(text2, sizeof(text2), ", spi%d.%d at %d MHz", spi->controller->bus_num, + spi_get_chipselect(spi, 0), spi->max_speed_hz / 1000000); fb_dbg(fb_info, "%s frame buffer, %dx%d, %d KiB video memory%s, fps=%lu%s\n", fb_info->fix.id, fb_info->var.xres, fb_info->var.yres, --- base-commit: 8d3ae59288f1e7d58d76558a6ee96d533bc5019f change-id: 20260820-fbtft-v2-final-7891edd1d87e Best regards, -- Tomasz Unger <tomasz.unger@yahoo.pl> ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2] staging: fbtft: prefer snprintf over sprintf in fbtft-core.c 2026-08-20 16:58 ` [PATCH v2] staging: fbtft: prefer snprintf over sprintf in fbtft-core.c Tomasz Unger @ 2026-08-20 17:07 ` sashiko-bot 2026-08-24 8:59 ` Andy Shevchenko 1 sibling, 0 replies; 4+ messages in thread From: sashiko-bot @ 2026-08-20 17:07 UTC (permalink / raw) To: Tomasz Unger; +Cc: dri-devel Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: Pre-existing issues: - [High] Integer overflow in `vmem_size` calculation leads to a small allocation, causing subsequent out-of-bounds reads/writes. -- --- Patch [1]: [PATCH v2] staging: fbtft: prefer snprintf over sprintf in fbtft-core.c --- commit c1e6190003fe313b23e0964b72df871f88f45da7 Author: Tomasz Unger <tomasz.unger@yahoo.pl> staging: fbtft: prefer snprintf over sprintf in fbtft-core.c This commit replaces sprintf with snprintf for formatting stack buffers text1 and text2 in fbtft-core.c. This prevents potential buffer overflows even though the arguments theoretically fit within the 50-byte limits. > diff --git a/drivers/staging/fbtft/fbtft-core.c b/drivers/staging/fbtft/fbtft-core.c > index ca0c38221c16b..9ea0442a337e5 100644 > --- a/drivers/staging/fbtft/fbtft-core.c > +++ b/drivers/staging/fbtft/fbtft-core.c > @@ -784,10 +784,10 @@ int fbtft_register_framebuffer(struct fb_info *fb_info) > fbtft_sysfs_init(par); > > if (par->txbuf.buf && par->txbuf.len >= 1024) > - sprintf(text1, ", %zu KiB buffer memory", par->txbuf.len >> 10); > + snprintf(text1, sizeof(text1), ", %zu KiB buffer memory", par->txbuf.len >> 10); [Severity: High] This isn't a bug introduced by this patch, but while reviewing the memory safety improvements in this file, I noticed a potential integer overflow in fbtft_framebuffer_alloc() prior to memory allocation: drivers/staging/fbtft/fbtft-core.c:fbtft_framebuffer_alloc() { ... vmem_size = display->width * display->height * bpp / 8; vmem = vzalloc(vmem_size); if (!vmem) goto release_framebuf; ... } Could this calculation wrap around 32-bit arithmetic if sufficiently large dimensions (e.g., width=65544, height=4096, bpp=16) are provided from the device tree? If display->width * display->height * bpp overflows, vmem_size could end up as a small positive integer, leading to a small buffer allocation by vzalloc(). Later in fbtft_update_display(), the line length is calculated as width * bpp / 8, which easily fits in 32 bits without overflowing. Does this mean operations might attempt to read or write lengths larger than the allocated vmem buffer, causing an out-of-bounds access? -- Sashiko AI review · https://sashiko.dev/#/patchset/20260820-fbtft-v2-final-v2-1-44d107b04634@yahoo.pl?part=1 ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2] staging: fbtft: prefer snprintf over sprintf in fbtft-core.c 2026-08-20 16:58 ` [PATCH v2] staging: fbtft: prefer snprintf over sprintf in fbtft-core.c Tomasz Unger 2026-08-20 17:07 ` sashiko-bot @ 2026-08-24 8:59 ` Andy Shevchenko 2026-08-26 19:01 ` Tomasz Unger 1 sibling, 1 reply; 4+ messages in thread From: Andy Shevchenko @ 2026-08-24 8:59 UTC (permalink / raw) To: Tomasz Unger Cc: Andy Shevchenko, Greg Kroah-Hartman, dri-devel, linux-fbdev, linux-staging, linux-kernel, Dan Carpenter On Thu, Aug 20, 2026 at 06:58:12PM +0200, Tomasz Unger wrote: > Using sprintf has potential for buffer overflows if the formatted sprintf() > string exceeds the destination buffer size. Replace it with > snprintf, passing sizeof() of the fixed-size stack buffers snprintf() > (text1[50] and text2[50]) so the write is always bounded. > > An overflow is impossible here: even the worst case for the > argument types (size_t for text1, three ints for text2) still > fits within 50 bytes. Use snprintf() rather than scnprintf() > since the return value is not used here. Then why the patch is needed at all? Do you have any compiler that warns you about something? ... It looks like you ignored all my comments against v1... -- With Best Regards, Andy Shevchenko ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2] staging: fbtft: prefer snprintf over sprintf in fbtft-core.c 2026-08-24 8:59 ` Andy Shevchenko @ 2026-08-26 19:01 ` Tomasz Unger 0 siblings, 0 replies; 4+ messages in thread From: Tomasz Unger @ 2026-08-26 19:01 UTC (permalink / raw) To: Andy Shevchenko Cc: Andy Shevchenko, Greg Kroah-Hartman, dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Dan Carpenter [-- Attachment #1: Type: text/plain, Size: 1350 bytes --] Correct - no compiler or static analysis tool flags this. The overflow is mathematically impossible for these argument types, so the patch doesn't fix an actual bug. I addressed Dan's specific wording feedback but missed responding to your core objection about the patch being unnecessary. Given the above, I'll drop this patch unless you see value in keeping it as a documented safety margin. Regards, Tomasz Unger W poniedziałek, 24 sierpnia 2026 10:59:40 CEST, Andy Shevchenko <andriy.shevchenko@intel.com> napisał(-a): On Thu, Aug 20, 2026 at 06:58:12PM +0200, Tomasz Unger wrote: > Using sprintf has potential for buffer overflows if the formatted sprintf() > string exceeds the destination buffer size. Replace it with > snprintf, passing sizeof() of the fixed-size stack buffers snprintf() > (text1[50] and text2[50]) so the write is always bounded. > > An overflow is impossible here: even the worst case for the > argument types (size_t for text1, three ints for text2) still > fits within 50 bytes. Use snprintf() rather than scnprintf() > since the return value is not used here. Then why the patch is needed at all? Do you have any compiler that warns you about something? ... It looks like you ignored all my comments against v1... -- With Best Regards, Andy Shevchenko [-- Attachment #2: Type: text/html, Size: 2152 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-08-27 9:45 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20260820-fbtft-v2-final-v2-1-44d107b04634.ref@yahoo.pl>
2026-08-20 16:58 ` [PATCH v2] staging: fbtft: prefer snprintf over sprintf in fbtft-core.c Tomasz Unger
2026-08-20 17:07 ` sashiko-bot
2026-08-24 8:59 ` Andy Shevchenko
2026-08-26 19:01 ` Tomasz Unger
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox