mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 03:23:53 -04:00
kconfig: Avoid prompting for transitional symbols
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: f9afce4f32 ("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>
This commit is contained in:
@@ -96,5 +96,37 @@ config OLD_WITH_HELP
|
||||
help
|
||||
This transitional symbol has a help section to validate that help is allowed.
|
||||
|
||||
# Test that we can set something to =n via transitional symbol
|
||||
config NEW_DISABLED
|
||||
tristate "Check for setting to disabled"
|
||||
default OLD_DISABLED
|
||||
|
||||
config OLD_DISABLED
|
||||
tristate
|
||||
transitional
|
||||
|
||||
# Test that a potential new value disappears if it lacks a prompt
|
||||
config NEW_DISABLED_UNSAVED
|
||||
tristate
|
||||
default OLD_DISABLED
|
||||
|
||||
config OLD_DISABLED_UNSAVED
|
||||
tristate
|
||||
transitional
|
||||
|
||||
# Test conditional default: transitional value should not prevent prompting
|
||||
# when default visibility makes the expression evaluate to 'no'
|
||||
config DEPENDENCY_TEST
|
||||
bool "Dependency for testing"
|
||||
default n
|
||||
|
||||
config NEW_CONDITIONAL_DEFAULT
|
||||
bool "New option with conditional default"
|
||||
default OLD_CONDITIONAL_DEFAULT if DEPENDENCY_TEST
|
||||
|
||||
config OLD_CONDITIONAL_DEFAULT
|
||||
bool
|
||||
transitional
|
||||
|
||||
config REGULAR_OPTION
|
||||
bool "Regular option"
|
||||
|
||||
Reference in New Issue
Block a user