]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
kconfig: Add transitional symbol attribute for migration support
authorKees Cook <kees@kernel.org>
Tue, 23 Sep 2025 21:34:18 +0000 (14:34 -0700)
committerKees Cook <kees@kernel.org>
Wed, 24 Sep 2025 21:23:35 +0000 (14:23 -0700)
commitf9afce4f32e9a120fc902fa6c9e0b90ad799a6ec
treec19c5317dee9afb9847e76354b57af4aac220708
parent64f4ea200eca05a248533b8374d7b5f0756a3990
kconfig: Add transitional symbol attribute for migration support

During kernel option migrations (e.g. CONFIG_CFI_CLANG to CONFIG_CFI),
existing .config files need to maintain backward compatibility while
preventing deprecated options from appearing in newly generated
configurations. This is challenging with existing Kconfig mechanisms
because:

1. Simply removing old options breaks existing .config files.
2. Manually listing an option as "deprecated" leaves it needlessly
   visible and still writes them to new .config files.
3. Using any method to remove visibility (.e.g no 'prompt', 'if n',
   etc) prevents the option from being processed at all.

Add a "transitional" attribute that creates symbols which are:
- Processed during configuration (can influence other symbols' defaults)
- Hidden from user menus (no prompts appear)
- Omitted from newly written .config files (gets migrated)
- Restricted to only having help sections (no defaults, selects, etc)
  making it truly just a "prior value pass-through" option.

The transitional syntax requires a type argument and prevents type
redefinition:

    config NEW_OPTION
        bool "New option"
        default OLD_OPTION

    config OLD_OPTION
        bool
        transitional
        help
          Transitional config for OLD_OPTION migration.

This allows seamless migration: olddefconfig processes existing
CONFIG_OLD_OPTION=y settings to enable CONFIG_NEW_OPTION=y, while
CONFIG_OLD_OPTION is omitted from newly generated .config files.

Added positive and negative testing via "testconfig" make target.

Co-developed-by: Vegard Nossum <vegard.nossum@oracle.com>
Signed-off-by: Vegard Nossum <vegard.nossum@oracle.com>
Reviewed-by: Nathan Chancellor <nathan@kernel.org>
Tested-by: Nathan Chancellor <nathan@kernel.org>
Link: https://lore.kernel.org/r/20250923213422.1105654-2-kees@kernel.org
Signed-off-by: Kees Cook <kees@kernel.org>
12 files changed:
Documentation/kbuild/kconfig-language.rst
scripts/kconfig/expr.h
scripts/kconfig/lexer.l
scripts/kconfig/parser.y
scripts/kconfig/symbol.c
scripts/kconfig/tests/err_transitional/Kconfig [new file with mode: 0644]
scripts/kconfig/tests/err_transitional/__init__.py [new file with mode: 0644]
scripts/kconfig/tests/err_transitional/expected_stderr [new file with mode: 0644]
scripts/kconfig/tests/transitional/Kconfig [new file with mode: 0644]
scripts/kconfig/tests/transitional/__init__.py [new file with mode: 0644]
scripts/kconfig/tests/transitional/expected_config [new file with mode: 0644]
scripts/kconfig/tests/transitional/initial_config [new file with mode: 0644]