The hwrng core implementation currently doesn't consider the quality field of the struct hwrng. So the first registered rng is the winner and further rng sources even with much better quality are ignored. The behavior should be that always the best rng with the highest quality rate should be used as current rng source. Only if the user explicitly chooses a rng source (via writing a rng name to /sys/class/misc/hw_random/rng_current) the decision for the best quality should be suppressed. This set of patches makes hwrng always hold a list of registered rng sources sorted decreasing by quality. On registration of a new hwrng source the list is updated and if the current rng source was not chosen by user and the new rng provides better quality set as new current rng source. Similar on unregistration of an rng, if it was the current used rng source the one with the next highest quality is used. If a rng source has been set via sysfs from userland as long as this one doesn't unregister it is kept as current rng regardless of registration of 'better' rng sources. Patch 1 introduces the sorted list of registered rngs and the always use the best quality behavior. Patch 2 makes hwrng remember that the user has selected an rng via echo to /sys/class/misc/hw_random/rng_current. Patch 3 adds a new sysfs attribute file 'rng_selected' to the rng core. This file shows the chosen rng name if a selection from userspace took place otherwise 'none'. Patch 3 is just a simple implementation of an possible improvement and may act as a starting point for further discussions. For example, the implementation could be reworked to accept also currently not known rng sources and upon appearing instantly select this user chosen rng. However, this would require to hold an string buffer and this would introduce some string length limit on the rng name. Another idea is that there should be a possibility to unselect the user's choice. An echo 'none' to rng_current may be a way to remove the selection and the hwrng may act by using the quality best rng. Harald Freudenberger (3): crypto: hwrng use rng source with best quality crypto: hwrng remember rng chosen by user crypto: hwrng add sysfs attribute to show user selected rng drivers/char/hw_random/core.c | 43 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) -- 2.7.4