Skip to content

Commit

Permalink
[crypto] Allow certificates to be marked as having been added explicitly
Browse files Browse the repository at this point in the history
Allow certificates to be marked as having been added explicitly at run
time.  Such certificates will not be discarded via the certificate
store cache discarder.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Aug 31, 2016
1 parent 534eae4 commit 9a1a42f
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 4 deletions.
23 changes: 19 additions & 4 deletions src/crypto/certstore.c
Expand Up @@ -152,6 +152,10 @@ void certstore_add ( struct x509_certificate *cert ) {
*/
void certstore_del ( struct x509_certificate *cert ) {

/* Ignore attempts to remove permanent certificates */
if ( cert->flags & X509_FL_PERMANENT )
return;

/* Remove certificate from store */
DBGC ( &certstore, "CERTSTORE removed certificate %s\n",
x509_name ( cert ) );
Expand All @@ -171,11 +175,22 @@ static unsigned int certstore_discard ( void ) {
* only reference is held by the store itself.
*/
list_for_each_entry_reverse ( cert, &certstore.links, store.list ) {
if ( cert->refcnt.count == 0 ) {
certstore_del ( cert );
return 1;
}

/* Skip certificates for which another reference is held */
if ( cert->refcnt.count > 0 )
continue;

/* Skip certificates that were added at build time or
* added explicitly at run time.
*/
if ( cert->flags & ( X509_FL_PERMANENT | X509_FL_EXPLICIT ) )
continue;

/* Discard certificate */
certstore_del ( cert );
return 1;
}

return 0;
}

Expand Down
4 changes: 4 additions & 0 deletions src/include/ipxe/x509.h
Expand Up @@ -220,6 +220,10 @@ struct x509_certificate {
enum x509_flags {
/** Certificate has been validated */
X509_FL_VALIDATED = 0x0001,
/** Certificate was added at build time */
X509_FL_PERMANENT = 0x0002,
/** Certificate was added explicitly at run time */
X509_FL_EXPLICIT = 0x0004,
};

/**
Expand Down

0 comments on commit 9a1a42f

Please sign in to comment.