mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v3 0/1] Introduce CONFIG_DEBUG_INFO_IKCONFIG
@ 2023-10-27 17:17 Stephen Brennan
  2023-10-27 17:17 ` [PATCH v3 1/1] kernel/config: " Stephen Brennan
  0 siblings, 1 reply; 4+ messages in thread
From: Stephen Brennan @ 2023-10-27 17:17 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: linux-arch, linux-kernel, linux-debuggers, Mike Christie,
	Geert Uytterhoeven, Christian Brauner (Microsoft),
	Petr Mladek, Marco Elver, Randy Dunlap, Douglas Anderson,
	Maninder Singh, Luis Chamberlain, Nick Desaulniers, Zhen Lei,
	Kees Cook, Zhaoyang Huang, Stephen Brennan, Andrew Morton,
	Sami Tolvanen

Hello All,

This adds an alternative for CONFIG_IKCONFIG, which nearly all Linux
distributions disable (probably due to memory considerations). It adds the
section ".debug_linux_ikconfig" to the vmlinux ELF file, which is stripped
out for final images, but retained for debuginfo (objcopy detects the ".debug"
prefix). It is enabled by default whenever IKCONFIG is disabled, so that
debuggers can rely on having the kernel config available.

v1: https://lore.kernel.org/linux-debuggers/20231004165804.659482-1-stephen.s.brennan@oracle.com/T/#t
v2: https://lore.kernel.org/linux-debuggers/20231025223640.1132047-1-stephen.s.brennan@oracle.com/T/#t

Changes v2-v3:

* Added missing dependency on kernel/config_data.gz in kernel/Makefile.

Changes v1-v2:

* I added "default y if IKCONFIG!=y". The result is that whenever DEBUG_INFO=y
  is enabled, and IKCONFIG is not built-in, then DEBUG_INFO_IKCONFIG will get
  enabled automatically. The whole point of this patch is for kernel debuggers
  to be able to rely on having kernel configuration information. The IKCONFIG
  data is quite small compared to kernel debuginfo, and it doesn't change
  anything at runtime. It's safe to enable this automatically, and it's
  important so that distributions (who create debuginfo explicitly to allow
  kernel debugging) will automatically begin creating this info for debuggers.

* Randy Dunlap did review this, but I didn't apply that tag with the update,
  since I understand changing defaults is a major update, and it's a small patch
  to begin with, so I didn't want to misrepresent the review.

Stephen Brennan (1):
  kernel/config: Introduce CONFIG_DEBUG_INFO_IKCONFIG

 include/asm-generic/vmlinux.lds.h |  3 ++-
 kernel/Makefile                   |  2 ++
 kernel/configs-debug.S            | 18 ++++++++++++++++++
 lib/Kconfig.debug                 | 15 +++++++++++++++
 4 files changed, 37 insertions(+), 1 deletion(-)
 create mode 100644 kernel/configs-debug.S

-- 
2.39.3


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v3 1/1] kernel/config: Introduce CONFIG_DEBUG_INFO_IKCONFIG
  2023-10-27 17:17 [PATCH v3 0/1] Introduce CONFIG_DEBUG_INFO_IKCONFIG Stephen Brennan
@ 2023-10-27 17:17 ` Stephen Brennan
  2023-10-27 18:20   ` Arnd Bergmann
  2023-11-01 19:12   ` Luis Chamberlain
  0 siblings, 2 replies; 4+ messages in thread
From: Stephen Brennan @ 2023-10-27 17:17 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: linux-arch, linux-kernel, linux-debuggers, Mike Christie,
	Geert Uytterhoeven, Christian Brauner (Microsoft),
	Petr Mladek, Marco Elver, Randy Dunlap, Douglas Anderson,
	Maninder Singh, Luis Chamberlain, Nick Desaulniers, Zhen Lei,
	Kees Cook, Zhaoyang Huang, Stephen Brennan, Andrew Morton,
	Sami Tolvanen

The option CONFIG_IKCONFIG allows the gzip compressed kernel
configuration to be included into vmlinux or a module. In these cases,
debuggers can access the config data and use it to adjust their behavior
according to the configuration. However, distributions rarely enable
this, likely because it uses a fair bit of kernel memory which cannot be
swapped out.

This means that in practice, the kernel configuration is rarely
available to debuggers.

So, introduce an alternative, CONFIG_DEBUG_INFO_IKCONFIG. This strategy,
which is only available if IKCONFIG is not already built-in, adds a
section ".debug_linux_ikconfig", to the vmlinux ELF. It will be stripped
out of the final images, but will remain in the debuginfo files. So
debuggers which rely on vmlinux debuginfo can have access to the kernel
configuration, without incurring a cost to the kernel at runtime.

The configuration is enabled whenever DEBUG_INFO=y and IKCONFIG!=y. The
added section is not large compared to debug info sizes. It won't affect
the runtime kernel at all, and this default will ensure that
distributions intending to create useful debuginfo will get this new
addition for kernel debuggers.

Signed-off-by: Stephen Brennan <stephen.s.brennan@oracle.com>
---
 include/asm-generic/vmlinux.lds.h |  3 ++-
 kernel/Makefile                   |  2 ++
 kernel/configs-debug.S            | 18 ++++++++++++++++++
 lib/Kconfig.debug                 | 15 +++++++++++++++
 4 files changed, 37 insertions(+), 1 deletion(-)
 create mode 100644 kernel/configs-debug.S

diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 9c59409104f6..025b0bfe17bf 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -824,7 +824,8 @@
 		.comment 0 : { *(.comment) }				\
 		.symtab 0 : { *(.symtab) }				\
 		.strtab 0 : { *(.strtab) }				\
-		.shstrtab 0 : { *(.shstrtab) }
+		.shstrtab 0 : { *(.shstrtab) }				\
+		.debug_linux_ikconfig 0 : { *(.debug_linux_ikconfig) }
 
 #ifdef CONFIG_GENERIC_BUG
 #define BUG_TABLE							\
diff --git a/kernel/Makefile b/kernel/Makefile
index 3947122d618b..ab28e7d9aa15 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -138,8 +138,10 @@ KCSAN_SANITIZE_stackleak.o := n
 KCOV_INSTRUMENT_stackleak.o := n
 
 obj-$(CONFIG_SCF_TORTURE_TEST) += scftorture.o
+obj-$(CONFIG_DEBUG_INFO_IKCONFIG) += configs-debug.o
 
 $(obj)/configs.o: $(obj)/config_data.gz
+$(obj)/configs-debug.o: $(obj)/config_data.gz
 
 targets += config_data config_data.gz
 $(obj)/config_data.gz: $(obj)/config_data FORCE
diff --git a/kernel/configs-debug.S b/kernel/configs-debug.S
new file mode 100644
index 000000000000..d0dd5c2f7bd5
--- /dev/null
+++ b/kernel/configs-debug.S
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Inline kernel configuration for debuginfo files
+ *
+ * Copyright (c) 2023, Oracle and/or its affiliates.
+ */
+
+/*
+ * By using the same "IKCFG_ST" and "IKCFG_ED" markers found in configs.c, we
+ * can ensure that the resulting debuginfo files can be read by
+ * scripts/extract-ikconfig. Unfortunately, this means that the contents of the
+ * section cannot be directly extracted and used. Since debuggers should be able
+ * to trim these markers off trivially, this is a good tradeoff.
+ */
+	.section .debug_linux_ikconfig
+	.ascii "IKCFG_ST"
+	.incbin "kernel/config_data.gz"
+	.ascii "IKCFG_ED"
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index fa307f93fa2e..c43a874ea584 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -429,6 +429,21 @@ config GDB_SCRIPTS
 	  instance. See Documentation/dev-tools/gdb-kernel-debugging.rst
 	  for further details.
 
+config DEBUG_INFO_IKCONFIG
+	bool "Embed KConfig in debuginfo, if not already present"
+	depends on IKCONFIG!=y
+	default y if IKCONFIG!=y
+	help
+	  This provides the gzip-compressed KConfig information in an ELF
+	  section called .ikconfig which will be stripped out of the final
+	  bootable image, but remain in the debuginfo. Debuggers that are aware
+	  of this can use this to customize their behavior to the kernel
+	  configuration, without requiring the configuration information to be
+	  stored in the kernel like CONFIG_IKCONFIG does. This configuration is
+	  unnecessary when CONFIG_IKCONFIG is enabled, since the data can be
+	  found in the .rodata section in that case (see
+	  scripts/extract-ikconfig).
+
 endif # DEBUG_INFO
 
 config FRAME_WARN
-- 
2.39.3


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v3 1/1] kernel/config: Introduce CONFIG_DEBUG_INFO_IKCONFIG
  2023-10-27 17:17 ` [PATCH v3 1/1] kernel/config: " Stephen Brennan
@ 2023-10-27 18:20   ` Arnd Bergmann
  2023-11-01 19:12   ` Luis Chamberlain
  1 sibling, 0 replies; 4+ messages in thread
From: Arnd Bergmann @ 2023-10-27 18:20 UTC (permalink / raw)
  To: Stephen Brennan
  Cc: Linux-Arch, linux-kernel, linux-debuggers, Mike Christie,
	Geert Uytterhoeven, Christian Brauner, Petr Mladek, Marco Elver,
	Randy Dunlap, Doug Anderson, Maninder Singh, Luis Chamberlain,
	Nick Desaulniers, Zhen Lei, Kees Cook, Zhaoyang Huang,
	Andrew Morton, Sami Tolvanen

On Fri, Oct 27, 2023, at 19:17, Stephen Brennan wrote:
> The option CONFIG_IKCONFIG allows the gzip compressed kernel
> configuration to be included into vmlinux or a module. In these cases,
> debuggers can access the config data and use it to adjust their behavior
> according to the configuration. However, distributions rarely enable
> this, likely because it uses a fair bit of kernel memory which cannot be
> swapped out.
>
> This means that in practice, the kernel configuration is rarely
> available to debuggers.
>
> So, introduce an alternative, CONFIG_DEBUG_INFO_IKCONFIG. This strategy,
> which is only available if IKCONFIG is not already built-in, adds a
> section ".debug_linux_ikconfig", to the vmlinux ELF. It will be stripped
> out of the final images, but will remain in the debuginfo files. So
> debuggers which rely on vmlinux debuginfo can have access to the kernel
> configuration, without incurring a cost to the kernel at runtime.
>
> The configuration is enabled whenever DEBUG_INFO=y and IKCONFIG!=y. The
> added section is not large compared to debug info sizes. It won't affect
> the runtime kernel at all, and this default will ensure that
> distributions intending to create useful debuginfo will get this new
> addition for kernel debuggers.
>
> Signed-off-by: Stephen Brennan <stephen.s.brennan@oracle.com>
> ---
>  include/asm-generic/vmlinux.lds.h |  3 ++-
>  kernel/Makefile                   |  2 ++
>  kernel/configs-debug.S            | 18 ++++++++++++++++++
>  lib/Kconfig.debug                 | 15 +++++++++++++++
>  4 files changed, 37 insertions(+), 1 deletion(-)
>  create mode 100644 kernel/configs-debug.S

For asm-generic:

Acked-by: Arnd Bergmann <arnd@arndb.de>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v3 1/1] kernel/config: Introduce CONFIG_DEBUG_INFO_IKCONFIG
  2023-10-27 17:17 ` [PATCH v3 1/1] kernel/config: " Stephen Brennan
  2023-10-27 18:20   ` Arnd Bergmann
@ 2023-11-01 19:12   ` Luis Chamberlain
  1 sibling, 0 replies; 4+ messages in thread
From: Luis Chamberlain @ 2023-11-01 19:12 UTC (permalink / raw)
  To: Stephen Brennan
  Cc: Arnd Bergmann, linux-arch, linux-kernel, linux-debuggers,
	Mike Christie, Geert Uytterhoeven, Christian Brauner (Microsoft),
	Petr Mladek, Marco Elver, Randy Dunlap, Douglas Anderson,
	Maninder Singh, Nick Desaulniers, Zhen Lei, Kees Cook,
	Zhaoyang Huang, Andrew Morton, Sami Tolvanen

On Fri, Oct 27, 2023 at 10:17:56AM -0700, Stephen Brennan wrote:
> The option CONFIG_IKCONFIG allows the gzip compressed kernel
> configuration to be included into vmlinux or a module. In these cases,
> debuggers can access the config data and use it to adjust their behavior
> according to the configuration. However, distributions rarely enable
> this, likely because it uses a fair bit of kernel memory which cannot be
> swapped out.
> 
> This means that in practice, the kernel configuration is rarely
> available to debuggers.
> 
> So, introduce an alternative, CONFIG_DEBUG_INFO_IKCONFIG. This strategy,
> which is only available if IKCONFIG is not already built-in, adds a
> section ".debug_linux_ikconfig", to the vmlinux ELF. It will be stripped
> out of the final images, but will remain in the debuginfo files. So
> debuggers which rely on vmlinux debuginfo can have access to the kernel
> configuration, without incurring a cost to the kernel at runtime.
> 
> The configuration is enabled whenever DEBUG_INFO=y and IKCONFIG!=y. The
> added section is not large compared to debug info sizes. It won't affect
> the runtime kernel at all, and this default will ensure that
> distributions intending to create useful debuginfo will get this new
> addition for kernel debuggers.
> 
> Signed-off-by: Stephen Brennan <stephen.s.brennan@oracle.com>

Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>

Although this begs to support something other than old gz in the future.

  Luis

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-11-01 19:13 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-10-27 17:17 [PATCH v3 0/1] Introduce CONFIG_DEBUG_INFO_IKCONFIG Stephen Brennan
2023-10-27 17:17 ` [PATCH v3 1/1] kernel/config: " Stephen Brennan
2023-10-27 18:20   ` Arnd Bergmann
2023-11-01 19:12   ` Luis Chamberlain

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®