mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-15 11:03:02 +00:00
The "transitional" symbol keyword, while working with the "olddefconfig" target, was prompting during "oldconfig". This occurred because these symbols were not being marked as user-defined when they received values from transitional symbols that had user values. The "olddefconfig" target explicitly doesn't prompt for anything, so this deficiency wasn't noticed. The issue manifested when a symbol's value came from a transitional symbol's user value but the receiving symbol wasn't marked with SYMBOL_DEF_USER. Thus the "oldconfig" logic would then prompt for these symbols unnecessarily. Check after value calculation whether a symbol without a user value gets its value from a single transitional symbol that does have a user value. In such cases, mark the receiving symbol as user-defined to prevent prompting. Update regression tests to verify that symbols with transitional defaults are not prompted in "oldconfig", except when conditional defaults evaluate to 'no' and should legitimately be prompted. Build tested with "make testconfig". Reported-by: Linus Torvalds <torvalds@linux-foundation.org> Closes: https://lore.kernel.org/lkml/CAHk-=wgZjUk4Cy2XgNkTrQoO8XCmNUHrTe5D519Fij1POK+3qw@mail.gmail.com/ Fixes: f9afce4f32e9 ("kconfig: Add transitional symbol attribute for migration support") Cc: Vegard Nossum <vegard.nossum@oracle.com> Link: https://lore.kernel.org/r/20250930154514.it.623-kees@kernel.org Signed-off-by: Kees Cook <kees@kernel.org>
26 lines
1.1 KiB
Python
26 lines
1.1 KiB
Python
# SPDX-License-Identifier: GPL-2.0
|
|
"""
|
|
Test transitional symbol migration functionality for all Kconfig types.
|
|
|
|
This tests that:
|
|
- OLD_* options in existing .config cause NEW_* options to be set
|
|
- OLD_* options are not written to the new .config file
|
|
- NEW_* options appear in the new .config file with correct values
|
|
- NEW_* options with defaults from transitional symbols are not prompted
|
|
- All Kconfig types work correctly: bool, tristate, string, hex, int
|
|
- User-set NEW values take precedence over conflicting OLD transitional values
|
|
"""
|
|
|
|
def test(conf):
|
|
# Run olddefconfig to process the migration with the initial config
|
|
assert conf.olddefconfig(dot_config='initial_config') == 0
|
|
|
|
# Check that the configuration matches expected output
|
|
assert conf.config_contains('expected_config')
|
|
|
|
# Test oldconfig to ensure symbols with transitional defaults are not prompted
|
|
assert conf.oldconfig(dot_config='initial_config', in_keys='n\n') == 0
|
|
|
|
# Except for when conditional default evaluates to 'no'
|
|
assert conf.stdout_contains('expected_stdout')
|