lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ZmDEd9KpCvnLBobT@fjasle.eu>
Date: Wed, 5 Jun 2024 22:03:03 +0200
From: Nicolas Schier <nicolas@...sle.eu>
To: Masahiro Yamada <masahiroy@...nel.org>
Cc: linux-kbuild@...r.kernel.org, linux-kernel@...r.kernel.org,
 Jonathan Corbet <corbet@....net>,
 Nathan Chancellor <nathan@...nel.org>, linux-doc@...r.kernel.org
Subject: Re: [PATCH 1/3] kconfig: remove tristate choice support

On Sun, Jun 02, 2024 at 09:54:14PM +0900 Masahiro Yamada wrote:
> I previously submitted a fix for a bug in the choice feature [1], where
> I mentioned, "Another (much cleaner) approach would be to remove the
> tristate choice support entirely".
> 
> There are more issues in the tristate choice feature. For example, you
> can observe a couple of bugs in the following test code.
> 
> [Test Code]
> 
>     config MODULES
>             def_bool y
>             modules
> 
>     choice
>             prompt "tristate choice"
>             default A
> 
>     config A
>             tristate "A"
> 
>     config B
>             tristate "B"
> 
>     endchoice
> 
> [Bug 1] the 'default' property is not correctly processed
> 
> 'make alldefconfig' produces:
> 
>     CONFIG_MODULES=y
>     # CONFIG_A is not set
>     # CONFIG_B is not set
> 
> However, the correct output should be:
> 
>     CONFIG_MODULES=y
>     CONFIG_A=y
>     # CONFIG_B is not set
> 
> The unit test file, scripts/kconfig/tests/choice/alldef_expected_config,
> is wrong as well.
> 
> [Bug 2] choice members never get 'y' with randconfig
> 
> For the test code above, the following combinations are possible:
> 
>                A    B
>         (1)    y    n
>         (2)    n    y
>         (3)    m    m
>         (4)    m    n
>         (5)    n    m
>         (6)    n    n
> 
> 'make randconfig' never produces (1) or (2).
> 
> These bugs are fixable, but a more critical problem is the lack of a
> sensible syntax to specify the default for the tristate choice.
> The default for the choice must be one of the choice members, which
> cannot specify any of the patterns (3) through (6) above.
> 
> In addition, I have never seen it being used in a useful way.
> 
> The following commits removed unnecessary use of tristate choices:
> 
>  - df8df5e4bc37 ("usb: get rid of 'choice' for legacy gadget drivers")
>  - bfb57ef0544a ("rapidio: remove choice for enumeration")
> 
> This commit removes the tristate choice support entirely, which allows
> me to delete a lot of code, making further refactoring easier.
> 
> This includes the revert of commit fa64e5f6a35e ("kconfig/symbol.c:
> handle choice_values that depend on 'm' symbols"). It was suspicious
> because it did not address the root cause but introduced inconsistency
> in visibility between choice members and other symbols.
> 
> [1]: https://lore.kernel.org/linux-kbuild/20240427104231.2728905-1-masahiroy@kernel.org/T/#m0a1bb6992581462ceca861b409bb33cb8fd7dbae
> 
> Signed-off-by: Masahiro Yamada <masahiroy@...nel.org>
> ---
> 
>  Documentation/kbuild/kconfig-language.rst     | 11 +---
>  scripts/kconfig/conf.c                        | 56 ++-----------------
>  scripts/kconfig/confdata.c                    | 17 +-----
>  scripts/kconfig/gconf.c                       |  5 +-
>  scripts/kconfig/mconf.c                       | 28 +++-------
>  scripts/kconfig/menu.c                        | 27 ---------
>  scripts/kconfig/nconf.c                       | 28 ++--------
>  scripts/kconfig/parser.y                      | 23 +++++---
>  scripts/kconfig/qconf.cc                      |  2 +-
>  scripts/kconfig/symbol.c                      | 24 +-------
>  scripts/kconfig/tests/choice/Kconfig          | 17 ------
>  scripts/kconfig/tests/choice/__init__.py      | 10 ----
>  .../tests/choice/alldef_expected_config       |  3 -
>  .../tests/choice/allmod_expected_config       |  3 -
>  .../tests/choice/allno_expected_config        |  3 -
>  .../tests/choice/allyes_expected_config       |  3 -
>  .../tests/choice/oldask0_expected_stdout      |  4 --
>  scripts/kconfig/tests/choice/oldask1_config   |  1 -
>  .../tests/choice/oldask1_expected_stdout      |  9 ---
>  .../tests/choice_value_with_m_dep/Kconfig     | 21 -------
>  .../tests/choice_value_with_m_dep/__init__.py | 16 ------
>  .../tests/choice_value_with_m_dep/config      |  2 -
>  .../choice_value_with_m_dep/expected_config   |  3 -
>  .../choice_value_with_m_dep/expected_stdout   |  4 --
>  scripts/kconfig/tests/inter_choice/Kconfig    | 25 ---------
>  .../kconfig/tests/inter_choice/__init__.py    | 15 -----
>  scripts/kconfig/tests/inter_choice/defconfig  |  1 -
>  .../tests/inter_choice/expected_config        |  4 --
>  28 files changed, 42 insertions(+), 323 deletions(-)
>  delete mode 100644 scripts/kconfig/tests/choice/oldask1_config
>  delete mode 100644 scripts/kconfig/tests/choice/oldask1_expected_stdout
>  delete mode 100644 scripts/kconfig/tests/choice_value_with_m_dep/Kconfig
>  delete mode 100644 scripts/kconfig/tests/choice_value_with_m_dep/__init__.py
>  delete mode 100644 scripts/kconfig/tests/choice_value_with_m_dep/config
>  delete mode 100644 scripts/kconfig/tests/choice_value_with_m_dep/expected_config
>  delete mode 100644 scripts/kconfig/tests/choice_value_with_m_dep/expected_stdout
>  delete mode 100644 scripts/kconfig/tests/inter_choice/Kconfig
>  delete mode 100644 scripts/kconfig/tests/inter_choice/__init__.py
>  delete mode 100644 scripts/kconfig/tests/inter_choice/defconfig
>  delete mode 100644 scripts/kconfig/tests/inter_choice/expected_config
> 
> diff --git a/Documentation/kbuild/kconfig-language.rst b/Documentation/kbuild/kconfig-language.rst
> index 555c2f839969..dc50b5b12577 100644
> --- a/Documentation/kbuild/kconfig-language.rst
> +++ b/Documentation/kbuild/kconfig-language.rst
> @@ -399,16 +399,9 @@ choices::
>  	"endchoice"
>  
>  This defines a choice group and accepts any of the above attributes as
> -options. A choice can only be of type bool or tristate.  If no type is
> -specified for a choice, its type will be determined by the type of
> -the first choice element in the group or remain unknown if none of the
> -choice elements have a type specified, as well.
> +options.
>  
> -While a boolean choice only allows a single config entry to be
> -selected, a tristate choice also allows any number of config entries
> -to be set to 'm'. This can be used if multiple drivers for a single
> -hardware exists and only a single driver can be compiled/loaded into
> -the kernel, but all drivers can be compiled as modules.
> +A choice only allows a single config entry to be selected.

oh, I wasn't aware of that multi-selectable 'm' feature.  I think it's really
good to get rid of this, thanks!


Patch looks good to me.

Reviewed-by: Nicolas Schier <nicolas@...sle.eu>



Kind regards,
Nicolas


Download attachment "signature.asc" of type "application/pgp-signature" (834 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ