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,  			spawn->alg = NULL;  			spawns = &inst->alg.cra_users; + +			/* +			 * We may encounter an unregistered instance here, since +			 * an instance's spawns are set up prior to the instance +			 * being registered.  An unregistered instance will have +			 * NULL ->cra_users.next, since ->cra_users isn't +			 * properly initialized until registration.  But an +			 * unregistered instance cannot have any users, so treat +			 * it the same as ->cra_users being empty. +			 */ +			if (spawns->next == NULL) +				break;  		}  	} while ((spawns = crypto_more_spawns(alg, &stack, &top,  					      &secondary_spawns)));  | 
