From owner-dev-commits-src-all@freebsd.org Sat Sep 25 03:23:55 2021 Return-Path: Delivered-To: dev-commits-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id F02E66794EB; Sat, 25 Sep 2021 03:23:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4HGZ4W6DSzz4tqL; Sat, 25 Sep 2021 03:23:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B5A612302C; Sat, 25 Sep 2021 03:23:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 18P3Nt1Q096408; Sat, 25 Sep 2021 03:23:55 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 18P3Ntsc096407; Sat, 25 Sep 2021 03:23:55 GMT (envelope-from git) Date: Sat, 25 Sep 2021 03:23:55 GMT Message-Id: <202109250323.18P3Ntsc096407@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Colin Percival Subject: git: 242923eb848a - main - loader tslog: Don't use sprintf MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: cperciva X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 242923eb848a94d657344c2ff45c4f15433cdf3c Auto-Submitted: auto-generated X-BeenThere: dev-commits-src-all@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commit messages for all branches of the src repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Sep 2021 03:23:56 -0000 The branch main has been updated by cperciva: URL: https://cgit.FreeBSD.org/src/commit/?id=242923eb848a94d657344c2ff45c4f15433cdf3c commit 242923eb848a94d657344c2ff45c4f15433cdf3c Author: Colin Percival AuthorDate: 2021-09-25 03:19:38 +0000 Commit: Colin Percival CommitDate: 2021-09-25 03:23:37 +0000 loader tslog: Don't use sprintf Instead, append the log entry "manually". MFC after: 1 week Sponsored by: https://www.patreon.com/cperciva --- stand/libsa/tslog.c | 50 +++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/stand/libsa/tslog.c b/stand/libsa/tslog.c index c6164aab02a9..a2791f9dc9c4 100644 --- a/stand/libsa/tslog.c +++ b/stand/libsa/tslog.c @@ -42,6 +42,24 @@ static char * tslog_buf = NULL; static size_t tslog_buflen = 0; static size_t tslog_bufpos = 0; +static size_t +tsccat(char * buf, uint64_t tsc) +{ + size_t len; + + /* Handle upper digits. */ + if (tsc >= 10) + len = tsccat(buf, tsc / 10); + else + len = 0; + + /* Write the last digit. */ + buf[len] = "0123456789"[tsc % 10]; + + /* Return the length written. */ + return (len + 1); +} + void tslog_setbuf(void * buf, size_t len) { @@ -69,16 +87,34 @@ tslog(const char * type, const char * f, const char * s) #else uint64_t tsc = 0; #endif - int len; /* If we have no buffer, do nothing. */ if (tslog_buf == NULL) return; - /* Append to existing buffer, if we have enough space. */ - len = snprintf(&tslog_buf[tslog_bufpos], - tslog_buflen - tslog_bufpos, "0x0 %llu %s %s%s%s\n", - (unsigned long long)tsc, type, f, s ? " " : "", s ? s : ""); - if ((len > 0) && (tslog_bufpos + len <= tslog_buflen)) - tslog_bufpos += len; + /* Check that we have enough space. */ + if (tslog_buflen - tslog_bufpos < 32 + strlen(type) + strlen(f) + + (s ? strlen(s) : 0)) + return; + + /* Append to existing buffer. */ + strcpy(&tslog_buf[tslog_bufpos], "0x0 "); + tslog_bufpos += 4; + tslog_bufpos += tsccat(&tslog_buf[tslog_bufpos], tsc); + strcpy(&tslog_buf[tslog_bufpos], " "); + tslog_bufpos += 1; + strcpy(&tslog_buf[tslog_bufpos], type); + tslog_bufpos += strlen(type); + strcpy(&tslog_buf[tslog_bufpos], " "); + tslog_bufpos += 1; + strcpy(&tslog_buf[tslog_bufpos], f); + tslog_bufpos += strlen(f); + if (s != NULL) { + strcpy(&tslog_buf[tslog_bufpos], " "); + tslog_bufpos += 1; + strcpy(&tslog_buf[tslog_bufpos], s); + tslog_bufpos += strlen(s); + } + strcpy(&tslog_buf[tslog_bufpos], "\n"); + tslog_bufpos += 1; }