Message ID | 20180613140148.1b57a566@wiggum (mailing list archive) |
---|---|
State | Not Applicable |
Delegated to: | Kalle Valo |
Headers | show |
>>>> CONFIG_B43_HWRNG completely switches off hwrng support in b43. >>>> I don't see how a change in hwrng core could still lead to a crash in >>>> b43 with this option switched off. >>>> >>>> What do you mean by "manually in the .config"? >>> >>> What I meant is, that I have outcommented the line 'CONFIG_B43_HWRNG=y' >>> in .config. >>> >>>> Can you try to properly switch off the setting with make menuconfig and >>>> then recompile everything from scratch (make clean)? >>> >>> I was intending to do that before, but I cannot find the option for >>> that. Searching for b43_hwrng in menuconfig only shows the dependencies >>> of that option, and the Kconfig file where it is defined, but not the >>> path in menuconfig. Do I indirectly set CONFIG_B43_HWRNG through the >>> parameters it depends on? I'm sorry, but this is obviously above my >>> level of expertise ... >> >> Whoops, sorry. You are right. This is an automatic config option. >> That also means your manual editing of .config would be overridden. >> >> You can edit drivers/net/wireless/broadcom/b43/Kconfig >> go to the section config B43_HWRNG >> and change 'default y' to 'default n' >> >> That should disable it. > > > > Could you please also try the attached patch? > There seems to be a problem in hwrng core in that it does not disable > the current RNG, if the new RNG fails to initialize. > I don't know if that's the problem here, though. Ok. Do I apply your patch to the first version that fails for me, and revert my change to Kconfig? At the moment the test without B43_HWRNG compiles, I will test that later. > diff --git a/drivers/char/hw_random/core.c > b/drivers/char/hw_random/core.c index 91bb98c42a1c..aaf9e5afaad4 100644 > --- a/drivers/char/hw_random/core.c > +++ b/drivers/char/hw_random/core.c > @@ -516,11 +516,18 @@ EXPORT_SYMBOL_GPL(hwrng_register); > > void hwrng_unregister(struct hwrng *rng) > { > + int err; > + > mutex_lock(&rng_mutex); > > list_del(&rng->list); > - if (current_rng == rng) > - enable_best_rng(); > + if (current_rng == rng) { > + err = enable_best_rng(); > + if (err) { > + drop_current_rng(); > + cur_rng_set_by_user = 0; > + } > + } > > if (list_empty(&rng_list)) { > mutex_unlock(&rng_mutex); > > >
On Wed, 13 Jun 2018 16:07:02 +0300 Wirz <spam@lukas-wirz.de> wrote: > >>>> CONFIG_B43_HWRNG completely switches off hwrng support in b43. > >>>> I don't see how a change in hwrng core could still lead to a crash in > >>>> b43 with this option switched off. > >>>> > >>>> What do you mean by "manually in the .config"? > >>> > >>> What I meant is, that I have outcommented the line 'CONFIG_B43_HWRNG=y' > >>> in .config. > >>> > >>>> Can you try to properly switch off the setting with make menuconfig and > >>>> then recompile everything from scratch (make clean)? > >>> > >>> I was intending to do that before, but I cannot find the option for > >>> that. Searching for b43_hwrng in menuconfig only shows the dependencies > >>> of that option, and the Kconfig file where it is defined, but not the > >>> path in menuconfig. Do I indirectly set CONFIG_B43_HWRNG through the > >>> parameters it depends on? I'm sorry, but this is obviously above my > >>> level of expertise ... > >> > >> Whoops, sorry. You are right. This is an automatic config option. > >> That also means your manual editing of .config would be overridden. > >> > >> You can edit drivers/net/wireless/broadcom/b43/Kconfig > >> go to the section config B43_HWRNG > >> and change 'default y' to 'default n' > >> > >> That should disable it. > > > > > > > > Could you please also try the attached patch? > > There seems to be a problem in hwrng core in that it does not disable > > the current RNG, if the new RNG fails to initialize. > > I don't know if that's the problem here, though. > > Ok. Do I apply your patch to the first version that fails for me, and > revert my change to Kconfig? Yes, please test the patch with a version that would otherwise fail. You can use 4.16 or the latest kernel for that. I created it with latest linus' version.
>>>> You can edit drivers/net/wireless/broadcom/b43/Kconfig >>>> go to the section config B43_HWRNG >>>> and change 'default y' to 'default n' >>>> >>>> That should disable it. >>> >>> >>> >>> Could you please also try the attached patch? >>> There seems to be a problem in hwrng core in that it does not disable >>> the current RNG, if the new RNG fails to initialize. >>> I don't know if that's the problem here, though. >> >> Ok. Do I apply your patch to the first version that fails for me, and >> revert my change to Kconfig? > > > Yes, please test the patch with a version that would otherwise fail. > You can use 4.16 or the latest kernel for that. I created it with latest > linus' version. I tested both suggested cases. When I disable B43_HWRNG by editing Kconfig, 'rmmod b43' succeeds in the first version where it previously failed. When I apply your patch on top of an unmodified 4.16 it also succeeds. cheers, lukas
On Thu, 14 Jun 2018 12:47:19 +0300 Wirz <spam@lukas-wirz.de> wrote: > >>>> You can edit drivers/net/wireless/broadcom/b43/Kconfig > >>>> go to the section config B43_HWRNG > >>>> and change 'default y' to 'default n' > >>>> > >>>> That should disable it. > >>> > >>> > >>> > >>> Could you please also try the attached patch? > >>> There seems to be a problem in hwrng core in that it does not disable > >>> the current RNG, if the new RNG fails to initialize. > >>> I don't know if that's the problem here, though. > >> > >> Ok. Do I apply your patch to the first version that fails for me, and > >> revert my change to Kconfig? > > > > > > Yes, please test the patch with a version that would otherwise fail. > > You can use 4.16 or the latest kernel for that. I created it with latest > > linus' version. > > I tested both suggested cases. When I disable B43_HWRNG by editing > Kconfig, 'rmmod b43' succeeds in the first version where it previously > failed. When I apply your patch on top of an unmodified 4.16 it also > succeeds. Thank you _very_ much for testing. I will submit this patch to the hw_random maintainers.
On 14/06/18 19:26, Michael Büsch wrote: > On Thu, 14 Jun 2018 12:47:19 +0300 > Wirz <spam@lukas-wirz.de> wrote: > >>>>>> You can edit drivers/net/wireless/broadcom/b43/Kconfig >>>>>> go to the section config B43_HWRNG >>>>>> and change 'default y' to 'default n' >>>>>> >>>>>> That should disable it. >>>>> >>>>> >>>>> >>>>> Could you please also try the attached patch? >>>>> There seems to be a problem in hwrng core in that it does not disable >>>>> the current RNG, if the new RNG fails to initialize. >>>>> I don't know if that's the problem here, though. >>>> >>>> Ok. Do I apply your patch to the first version that fails for me, and >>>> revert my change to Kconfig? >>> >>> >>> Yes, please test the patch with a version that would otherwise fail. >>> You can use 4.16 or the latest kernel for that. I created it with latest >>> linus' version. >> >> I tested both suggested cases. When I disable B43_HWRNG by editing >> Kconfig, 'rmmod b43' succeeds in the first version where it previously >> failed. When I apply your patch on top of an unmodified 4.16 it also >> succeeds. > > > Thank you _very_ much for testing. > > I will submit this patch to the hw_random maintainers. Great, thank you! I look forward to using a current kernel again. cheers, lukas
diff --git a/drivers/char/hw_random/core.c b/drivers/char/hw_random/core.c index 91bb98c42a1c..aaf9e5afaad4 100644 --- a/drivers/char/hw_random/core.c +++ b/drivers/char/hw_random/core.c @@ -516,11 +516,18 @@ EXPORT_SYMBOL_GPL(hwrng_register); void hwrng_unregister(struct hwrng *rng) { + int err; + mutex_lock(&rng_mutex); list_del(&rng->list); - if (current_rng == rng) - enable_best_rng(); + if (current_rng == rng) { + err = enable_best_rng(); + if (err) { + drop_current_rng(); + cur_rng_set_by_user = 0; + } + } if (list_empty(&rng_list)) { mutex_unlock(&rng_mutex);