On 6/12/25 21:21, Warner Losh wrote:
The branch main has been updated by imp:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=aae67a2c2b663a6bce8fbc087ff8490336b8618f

commit aae67a2c2b663a6bce8fbc087ff8490336b8618f
Author:     WHR <w...@rivoreo.one>
AuthorDate: 2024-09-03 10:19:04 +0000
Commit:     Warner Losh <i...@freebsd.org>
CommitDate: 2025-06-13 01:21:44 +0000

     mfiutil: Fix unsafe assumptions of snprintf(3) return value
PR: 281160
     Reviewed by: imp
     Pull Request: https://github.com/freebsd/freebsd-src/pull/1405
     Closes: https://github.com/freebsd/freebsd-src/pull/1405
---
  usr.sbin/mfiutil/mfi_bbu.c | 17 +++++++++++++++--
  1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/usr.sbin/mfiutil/mfi_bbu.c b/usr.sbin/mfiutil/mfi_bbu.c
index 9075c4d0ddd0..e97227d47c70 100644
--- a/usr.sbin/mfiutil/mfi_bbu.c
+++ b/usr.sbin/mfiutil/mfi_bbu.c
@@ -50,10 +50,23 @@ mfi_autolearn_period(uint32_t period, char *buf, size_t sz)
tmp = buf;
        if (d != 0) {
-               tmp += snprintf(buf, sz, "%u day%s", d, d == 1 ? "" : "s");
+               int fmt_len;
+               fmt_len = snprintf(buf, sz, "%u day%s", d, d == 1 ? "" : "s");
+               if (fmt_len < 0) {
+                       *buf = 0;
+                       return;
+               }
+               if ((size_t)fmt_len >= sz) {
+                       return;
+               }
+               tmp += fmt_len;
                sz -= tmp - buf;
                if (h != 0) {
-                       tmp += snprintf(tmp, sz, ", ");
+                       fmt_len = snprintf(tmp, sz, ", ");
+                       if (fmt_len < 0 || (size_t)fmt_len >= sz) {
+                               return;
+                       }
+                       tmp += fmt_len;
                        sz -= 2;
                }
        }

It seems like using a string builder like fmemopen() or sbuf() would be
better here than fragile dances with snprintf().

--
John Baldwin


Reply via email to