Closed Bug 228624 Opened 21 years ago Closed 21 years ago

PK11_ListCertsInSlot does not return the correct nicknames of the cert instances.

Categories

(NSS :: Libraries, defect, P1)

defect

Tracking

(Not tracked)

RESOLVED FIXED

People

(Reporter: wtc, Assigned: wtc)

Details

Attachments

(2 files, 1 obsolete file)

PK11_ListCertsInSlot does not return the correct nicknames of the cert instances. It returns cert->nickname as the nickname, which is not always right. In bug 72291 Julien fixed a similar problem for PK11_ListCerts. My fix for this bug will be based on Julien's work.
Attached patch Proposed patch (obsolete) — Splinter Review
This patch fixes two problems. 1. PK11_ListCertsInSlot should return the correct nickname for each cert instance. The instance nicknames are available in the Stan layer, so we just need to reach into the Stan layer to get them. 2. When adding a cert to a Stan trust domain's cert cache, if we get a collision, we should merge all the instances of the cert before destroying the duplicate cert; otherwise the instances in the duplicate cert will be lost. Note that this patch is very complicated because I tried to clean up properly after an out-of-memory error. Suggestions on simplifying the cleanup code are welcome.
Status: NEW → ASSIGNED
Priority: -- → P1
Target Milestone: --- → 3.9
Attachment #137507 - Flags: superreview?(rrelyea0264)
Attachment #137507 - Flags: review?(jpierre)
Comment on attachment 137507 [details] [diff] [review] Proposed patch The patch looks good. This is a suggestion to eliminate duplication in the cleanup code : + /* merge the instances of the cert */ + instances = nssPKIObject_GetInstances(&cert->object); + if (instances == NULL) { + nssCertificate_Destroy(rvCert); + goto loser; + } + for (ci = instances, i = 0; *ci; ci++, i++) { + nssCryptokiObject *instance = nssCryptokiObject_Clone(*ci); + if (instance) { + if (nssPKIObject_AddInstance(&rvCert->object, instance) + == SECSuccess) { + continue; + } + nssCryptokiObject_Destroy(instance); + } + remove_object_instances(&rvCert->object, instances, i); + nssCryptokiObjectArray_Destroy(instances); + nssCertificate_Destroy(rvCert); + goto loser; + } + nssCryptokiObjectArray_Destroy(instances);
Attachment #137507 - Flags: review?(jpierre) → review+
Comment on attachment 137507 [details] [diff] [review] Proposed patch Thank you for the code review and suggested change, Julien. While I tried to implement a variation of your suggested change, I found a bug in this patch. In lib/pki/tdcache.c, function add_cert_to_cache, if we fail to merge the cert instances, we can't goto loser; otherwise we would unlock td->cache->lock twice. I will attach a better patch next.
Attachment #137507 - Attachment is obsolete: true
Attachment #137507 - Flags: superreview?(rrelyea0264)
Attachment #137616 - Flags: superreview?(rrelyea0264)
Attachment #137616 - Flags: review?(jpierre)
Attachment #137616 - Flags: review?(jpierre) → review+
Attachment #137616 - Flags: superreview?(rrelyea0264) → superreview+
Comment on attachment 137616 [details] [diff] [review] Proposed patch v2 I checked in this patch. Checking in pk11wrap/pk11cert.c; /cvsroot/mozilla/security/nss/lib/pk11wrap/pk11cert.c,v <-- pk11cert.c new revision: 1.128; previous revision: 1.127 done Checking in pki/tdcache.c; /cvsroot/mozilla/security/nss/lib/pki/tdcache.c,v <-- tdcache.c new revision: 1.37; previous revision: 1.36 done There is a problem at a higher level that eventually causes the cache collision that my patch for tdcache.c handles. So one could argue that we could just fix that higher-level problem. But Bob suggested that my code to merge cert instances on a cache collision is still useful. So I'm going to track that higher-level problem in a separate bug (bug 228881).
It seems that we need to call STAN_ForceCERTCertificateUpdate whenever we add instances to a NSSCertificate. This patch does that. Ian, is this correct? Is STAN_ForceCERTCertificateUpdate harmless if we did not add any new instance to the NSSCertificate?
Attachment #137670 - Flags: superreview?(bugz)
Attachment #137670 - Flags: review?(rrelyea0264)
Attachment #137670 - Flags: review?(rrelyea0264) → review+
Supplemental patch checked in. Checking in tdcache.c; /cvsroot/mozilla/security/nss/lib/pki/tdcache.c,v <-- tdcache.c new revision: 1.38; previous revision: 1.37 done
Status: ASSIGNED → RESOLVED
Closed: 21 years ago
Resolution: --- → FIXED
Comment on attachment 137670 [details] [diff] [review] Supplemental patch #1 It is correct to update the CERTCertificate there. In general, the idea of STAN_ForceCERTCertificateUpdate was that it would be a "refresh" function, safe to call at any time, to update the fields of the CERTCertificate.
Attachment #137670 - Flags: superreview?(bugz) → superreview+
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: