Commit db163660 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'v6.10-p3' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6

Pull crypto fix from Herbert Xu:
 "This fixes a new run-time warning triggered by tpm"

* tag 'v6.10-p3' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:
  hwrng: core - Remove add_early_randomness
parents e0cce98f 67ec8cdf
...@@ -64,19 +64,6 @@ static size_t rng_buffer_size(void) ...@@ -64,19 +64,6 @@ static size_t rng_buffer_size(void)
return RNG_BUFFER_SIZE; return RNG_BUFFER_SIZE;
} }
static void add_early_randomness(struct hwrng *rng)
{
int bytes_read;
mutex_lock(&reading_mutex);
bytes_read = rng_get_data(rng, rng_fillbuf, 32, 0);
mutex_unlock(&reading_mutex);
if (bytes_read > 0) {
size_t entropy = bytes_read * 8 * rng->quality / 1024;
add_hwgenerator_randomness(rng_fillbuf, bytes_read, entropy, false);
}
}
static inline void cleanup_rng(struct kref *kref) static inline void cleanup_rng(struct kref *kref)
{ {
struct hwrng *rng = container_of(kref, struct hwrng, ref); struct hwrng *rng = container_of(kref, struct hwrng, ref);
...@@ -340,13 +327,12 @@ static ssize_t rng_current_store(struct device *dev, ...@@ -340,13 +327,12 @@ static ssize_t rng_current_store(struct device *dev,
const char *buf, size_t len) const char *buf, size_t len)
{ {
int err; int err;
struct hwrng *rng, *old_rng, *new_rng; struct hwrng *rng, *new_rng;
err = mutex_lock_interruptible(&rng_mutex); err = mutex_lock_interruptible(&rng_mutex);
if (err) if (err)
return -ERESTARTSYS; return -ERESTARTSYS;
old_rng = current_rng;
if (sysfs_streq(buf, "")) { if (sysfs_streq(buf, "")) {
err = enable_best_rng(); err = enable_best_rng();
} else { } else {
...@@ -362,11 +348,8 @@ static ssize_t rng_current_store(struct device *dev, ...@@ -362,11 +348,8 @@ static ssize_t rng_current_store(struct device *dev,
new_rng = get_current_rng_nolock(); new_rng = get_current_rng_nolock();
mutex_unlock(&rng_mutex); mutex_unlock(&rng_mutex);
if (new_rng) { if (new_rng)
if (new_rng != old_rng)
add_early_randomness(new_rng);
put_rng(new_rng); put_rng(new_rng);
}
return err ? : len; return err ? : len;
} }
...@@ -544,7 +527,6 @@ int hwrng_register(struct hwrng *rng) ...@@ -544,7 +527,6 @@ int hwrng_register(struct hwrng *rng)
{ {
int err = -EINVAL; int err = -EINVAL;
struct hwrng *tmp; struct hwrng *tmp;
bool is_new_current = false;
if (!rng->name || (!rng->data_read && !rng->read)) if (!rng->name || (!rng->data_read && !rng->read))
goto out; goto out;
...@@ -573,25 +555,8 @@ int hwrng_register(struct hwrng *rng) ...@@ -573,25 +555,8 @@ int hwrng_register(struct hwrng *rng)
err = set_current_rng(rng); err = set_current_rng(rng);
if (err) if (err)
goto out_unlock; goto out_unlock;
/* to use current_rng in add_early_randomness() we need
* to take a ref
*/
is_new_current = true;
kref_get(&rng->ref);
} }
mutex_unlock(&rng_mutex); mutex_unlock(&rng_mutex);
if (is_new_current || !rng->init) {
/*
* Use a new device's input to add some randomness to
* the system. If this rng device isn't going to be
* used right away, its init function hasn't been
* called yet by set_current_rng(); so only use the
* randomness from devices that don't need an init callback
*/
add_early_randomness(rng);
}
if (is_new_current)
put_rng(rng);
return 0; return 0;
out_unlock: out_unlock:
mutex_unlock(&rng_mutex); mutex_unlock(&rng_mutex);
...@@ -602,12 +567,11 @@ EXPORT_SYMBOL_GPL(hwrng_register); ...@@ -602,12 +567,11 @@ EXPORT_SYMBOL_GPL(hwrng_register);
void hwrng_unregister(struct hwrng *rng) void hwrng_unregister(struct hwrng *rng)
{ {
struct hwrng *old_rng, *new_rng; struct hwrng *new_rng;
int err; int err;
mutex_lock(&rng_mutex); mutex_lock(&rng_mutex);
old_rng = current_rng;
list_del(&rng->list); list_del(&rng->list);
complete_all(&rng->dying); complete_all(&rng->dying);
if (current_rng == rng) { if (current_rng == rng) {
...@@ -626,11 +590,8 @@ void hwrng_unregister(struct hwrng *rng) ...@@ -626,11 +590,8 @@ void hwrng_unregister(struct hwrng *rng)
} else } else
mutex_unlock(&rng_mutex); mutex_unlock(&rng_mutex);
if (new_rng) { if (new_rng)
if (old_rng != new_rng)
add_early_randomness(new_rng);
put_rng(new_rng); put_rng(new_rng);
}
wait_for_completion(&rng->cleanup_done); wait_for_completion(&rng->cleanup_done);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment