All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Disseldorp <ddiss@suse.de>
To: linux-fsdevel@vger.kernel.org
Cc: Al Viro <viro@zeniv.linux.org.uk>,
	Christian Brauner <brauner@kernel.org>,
	David Disseldorp <ddiss@suse.de>
Subject: [RFC PATCH 6/6] initramfs: avoid static buffer for error message
Date: Tue, 15 Oct 2024 13:12:03 +0000	[thread overview]
Message-ID: <20241015133016.23468-7-ddiss@suse.de> (raw)
In-Reply-To: <20241015133016.23468-1-ddiss@suse.de>

With cpio_buf now allocated / freed by the unpack_to_rootfs() caller,
FSM-exit error messages can now be stashed in cpio_buf instead of in a
static buffer.

Before:
   text    data     bss     dec     hex filename
   7423    1062       8    8493    212d ./init/initramfs.o

After:
   text    data     bss     dec     hex filename
   7423     966       8    8397    20cd ./init/initramfs.o

Signed-off-by: David Disseldorp <ddiss@suse.de>
---
 init/initramfs.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/init/initramfs.c b/init/initramfs.c
index 7594a176d8d91..815a5daaa27ce 100644
--- a/init/initramfs.c
+++ b/init/initramfs.c
@@ -484,7 +484,6 @@ static char * __init unpack_to_rootfs(char *buf, unsigned long len)
 	long written;
 	decompress_fn decompress;
 	const char *compress_name;
-	static __initdata char msg_buf[64];
 
 	state = Start;
 	this_header = 0;
@@ -514,10 +513,12 @@ static char * __init unpack_to_rootfs(char *buf, unsigned long len)
 				error("decompressor failed");
 		} else if (compress_name) {
 			if (!message) {
-				snprintf(msg_buf, sizeof msg_buf,
+				/* FSM exit: cpio_buf reuse is safe */
+				snprintf(cpio_buf,
+					 N_ALIGN(PATH_MAX) + PATH_MAX + 1,
 					 "compression method %s not configured",
 					 compress_name);
-				message = msg_buf;
+				message = cpio_buf;
 			}
 		} else
 			error("invalid magic at start of compressed archive");
@@ -684,6 +685,7 @@ static void __init do_populate_rootfs(void *unused, async_cookie_t cookie)
 	 * header, after which parse_header() converts and stashes fields into
 	 * corresponding types. The same buffer is then reused for file path
 	 * staging. 2 x PATH_MAX covers any possible symlink target.
+	 * On error, @err may point to a @cpio_buf backed error message.
 	 */
 	cpio_buf = kmalloc(N_ALIGN(PATH_MAX) + PATH_MAX + 1, GFP_KERNEL);
 	if (!cpio_buf)
-- 
2.43.0


  parent reply	other threads:[~2024-10-15 13:30 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-15 13:11 [RFC PATCH 0/6] initramfs: reduce buffer footprint David Disseldorp
2024-10-15 13:11 ` [RFC PATCH 1/6] vsprintf: add simple_strntoul David Disseldorp
2024-10-15 13:11 ` [RFC PATCH 2/6] initramfs: avoid memcpy for hex header fields David Disseldorp
2024-10-15 13:12 ` [RFC PATCH 3/6] initramfs: remove extra symlink path buffer David Disseldorp
2024-10-15 13:12 ` [RFC PATCH 4/6] initramfs: merge header_buf and name_buf David Disseldorp
2024-10-15 13:12 ` [RFC PATCH 5/6] initramfs: reuse buf for built-in and bootloader initramfs David Disseldorp
2024-10-15 13:12 ` David Disseldorp [this message]
2024-10-15 23:34 ` [RFC PATCH 0/6] initramfs: reduce buffer footprint Al Viro
2024-10-16  2:42   ` David Disseldorp

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20241015133016.23468-7-ddiss@suse.de \
    --to=ddiss@suse.de \
    --cc=brauner@kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.