diff options
Diffstat (limited to 'crypto/algapi.c')
-rw-r--r-- | crypto/algapi.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/crypto/algapi.c b/crypto/algapi.c index 60d7366ed343..9a636f961572 100644 --- a/crypto/algapi.c +++ b/crypto/algapi.c | |||
@@ -167,6 +167,18 @@ void crypto_remove_spawns(struct crypto_alg *alg, struct list_head *list, | |||
167 | 167 | ||
168 | spawn->alg = NULL; | 168 | spawn->alg = NULL; |
169 | spawns = &inst->alg.cra_users; | 169 | spawns = &inst->alg.cra_users; |
170 | |||
171 | /* | ||
172 | * We may encounter an unregistered instance here, since | ||
173 | * an instance's spawns are set up prior to the instance | ||
174 | * being registered. An unregistered instance will have | ||
175 | * NULL ->cra_users.next, since ->cra_users isn't | ||
176 | * properly initialized until registration. But an | ||
177 | * unregistered instance cannot have any users, so treat | ||
178 | * it the same as ->cra_users being empty. | ||
179 | */ | ||
180 | if (spawns->next == NULL) | ||
181 | break; | ||
170 | } | 182 | } |
171 | } while ((spawns = crypto_more_spawns(alg, &stack, &top, | 183 | } while ((spawns = crypto_more_spawns(alg, &stack, &top, |
172 | &secondary_spawns))); | 184 | &secondary_spawns))); |