Closed Bug 115012 Opened 23 years ago Closed 23 years ago

32K local allocation in mpprime.c

Categories

(NSS :: Libraries, defect, P1)

3.3.1
x86
OS/2

Tracking

(Not tracked)

VERIFIED FIXED

People

(Reporter: alex, Assigned: nelson)

References

()

Details

(Keywords: crash)

Attachments

(1 file)

From Bugzilla Helper: User-Agent: Mozilla/5.0 (OS/2; U; Warp 4.5; en-US; rv:0.9.6) Gecko/20011127 BuildID: 2001112609 This bug is related to RSA key generation I think. When I fill and submit the form above mozilla displays a boy where it generates RSA key. During this process it craches. Here is pupup.log: === 12-12-2001 01:13:40 SYS3175 PID 11c5 TID 0001 Slot 0073 D:\INET\OS2WEB\MOZILLA.EXE c0000005 00b4fad9 P1=00000001 P2=0000001d P3=XXXXXXXX P4=XXXXXXXX EAX=02d000ff EBX=00b4fad4 ECX=00000000 EDX=00c80320 ESI=02d063b0 EDI=00000000 DS=0053 DSACC=f0f3 DSLIM=ffffffff ES=0053 ESACC=f0f3 ESLIM=ffffffff FS=150b FSACC=00f3 FSLIM=00000030 GS=0000 GSACC=**** GSLIM=******** CS:EIP=005b:00b4fad9 CSACC=f0df CSLIM=ffffffff SS:ESP=0053:0012f5f4 SSACC=f0f3 SSLIM=ffffffff EBP=0012f618 FLG=00010206 MOZRMI36.DLL ------------------------------------------------------------ 12-12-2001 07:24:47 SYS3175 PID 1931 TID 0004 Slot 0088 D:\INET\OS2WEB\MOZILLA.EXE c0000005 575f4758 P1=00000001 P2=575f4758 P3=XXXXXXXX P4=XXXXXXXX EAX=00000006 EBX=01010001 ECX=1d462a29 EDX=00b5ff04 ESI=01010101 EDI=01010101 DS=0053 DSACC=f0f3 DSLIM=ffffffff ES=0053 ESACC=f0f3 ESLIM=ffffffff FS=150b FSACC=00f3 FSLIM=00000030 GS=0000 GSACC=**** GSLIM=******** CS:EIP=005b:575f4758 CSACC=f0df CSLIM=ffffffff SS:ESP=0053:00b5fee8 SSACC=f0f3 SSLIM=ffffffff EBP=00010000 FLG=00010216 === Reproducible: Always Steps to Reproduce: 1.fill the form (check all boxes, fill something in textboxes) 2.submit 3.look at the key generation process Actual Results: crash Expected Results: proceed ;)
It generated fine for me with 2001-12-13-03 on Linux. Reporter, please try a newer build.
wfm using build 2001121312 on Linux.
Keywords: crash
->PSM, probably wfm.
Assignee: mstoltz → ssaux
Severity: critical → major
Component: Security: General → Client Library
Product: Browser → PSM
QA Contact: bsharma → junruh
Version: other → 2.2
worksforme. to qa.
Status: UNCONFIRMED → RESOLVED
Closed: 23 years ago
Priority: -- → P2
Resolution: --- → WORKSFORME
Target Milestone: --- → 2.2
No, I've tried the latest 2001121319 and the crash is still here: 12-15-2001 12:49:56 SYS3175 PID 004d TID 0001 Slot 0074 D:\INET\OS2WEB\MOZILLA.EXE c0000005 32353339 P1=00000001 P2=32353339 P3=XXXXXXXX P4=XXXXXXXX EAX=00e827d0 EBX=32353339 ECX=00000000 EDX=00e89e68 ESI=00e827d0 EDI=00000000 DS=0053 DSACC=f0f3 DSLIM=ffffffff ES=0053 ESACC=f0f3 ESLIM=ffffffff FS=150b FSACC=00f3 FSLIM=00000030 GS=0000 GSACC=**** GSLIM=******** CS:EIP=005b:32353339 CSACC=f0df CSLIM=ffffffff SS:ESP=0053:0012f834 SSACC=f0f3 SSLIM=ffffffff EBP=0012f858 FLG=00010206
Status: RESOLVED → UNCONFIRMED
Resolution: WORKSFORME → ---
I'll take for investigation. I can't connect to this website.. does it still exist?
Assignee: ssaux → mkaply
Yes, the site still works...
Os/2 barfs on a 32K character string pointer as a local variable in mpp_make_prime. Yes I said 32K. Who wrote this code? The fix for Os/2 is to take the macintosh path which should be the default path. Allocation 32K on the local heap is just bad. We need this fix bad. We can't generate prime numbers without it.
Assignee: mkaply → wtc
Status: UNCONFIRMED → NEW
Component: Client Library → Libraries
Ever confirmed: true
Product: PSM → NSS
QA Contact: junruh → sonja.mirtitsch
Summary: crash if I fill and submit the form above (when generating key) → Really bad code in mpprime.c - 32K local heap allocation
Target Milestone: 2.2 → 3.3.1
Version: 2.2 → 3.3.1
Attached patch Fix for problemSplinter Review
Have Os/2 go down the mac path - malloc 32K, don't get it from the local heap.
Wan-Teh, This bug means that key generation won't work at all in mozilla 0.9.7 on OS/2, making the new S/MIME support very hard to use (it works if you import keys, but you just can't create new keys ...). I just don't know if we have a proper mechanism to deliver this for 0.9.7 since the browser tree is supposed to be closed soon, and we just tagged an NSS 3.3.2 last week. I can check the fix into NSS 3.4 tip but that won't help until mozilla 0.9.8 .
Comment on attachment 61922 [details] [diff] [review] Fix for problem This patch is fine. r=wtc. Michael, if you want this fix in mozilla0.9.7, could you get the appropriate approval?
Attachment #61922 - Flags: review+
Assigned the bug to Nelson. Nelson, is it possible to make the sieve array static or allocate it from the heap for all platforms?
Assignee: wtc → nelsonb
Priority: P2 → P1
Target Milestone: 3.3.1 → 3.4
Allocating 32K from the stack is not "bad code", and works on all but two platforms we support. The code certainly could allocate this memory from the heap on all platforms.
Summary: Really bad code in mpprime.c - 32K local heap allocation → 32K local allocation in mpprime.c
I'll apply the submitted patch. In what branches should it be applied?
The default NSPR thread stack size is 64K on many platforms. On OS/2, it is only 32K (see _MD_DEFAULT_STACK_SIZE in mozilla/nsprpub/pr/include/md/_os2.h). This problem can also be fixed by increasing the default NSPR thread stack size to at least 64K on OS/2. This is a good thing to do because a 32K thread stack is pretty small.
I will try your change, but the problem we were seeing was an issue with the stack probe (an internal compiler issue) And as far as "bad code" vs. "good code", I would assert that putting a 32K variable in a function is at least not a very common thing to do. In addition, I notice that a memset is used to clean up the allocation on mac, but nothing is used to clean the 32K stack entity, so theoretically pieces of the private key are still on the stack.
I believe there's no need to clear the 32K sieve after the operation is done. I believe the prime found with the sieve cannot be reconstructed from the sieve. I'll check in the patch on the NSS_3_3_BRANCH (since that's where the NSS_CLIENT_TAG points, and no-one has requested anything else) and the trunk.
Status: NEW → ASSIGNED
I agree that 32K is big for a stack variable. There is performance advantage in using stack variables, especially in multithreaded programs, because that saves a trip to the heap.
Wan-Teh, It sounds like in this case the heap contention is only occurring during RSA keygen operation, right ? So it shouldn't critically affect performance for, say, SSL servers. Maybe CMS would be affected but I doubt it. But for the client malloc lock contention is probably not an issue.
Checked in revs 1.17 on trunk and 1.16.48.2 on NSS_3_3_BRANCH. Someone else will need to move the NSS_CLIENT_TAG if mozilla is to take this change.
Status: ASSIGNED → RESOLVED
Closed: 23 years ago23 years ago
Resolution: --- → FIXED
a=asa (on behalf of drivers) for checkin to 0.9.7
Keywords: mozilla0.9.7+
Who is going to move the NSS_CLIENT_TAG??
I don't know, who has the power to do that ?
WTC is absolutely correct. The core problem here was the OS/2 thread stack size. I've noted this in http://bugzilla.mozilla.org/show_bug.cgi?id=115149 I still believe in the change that was made, but I wouldn't worry about the CLIENT_TAG right now. The NSPR changes can take care of this.
So is this solved for 0.9.7?
I believe the answer is: not until someone with authority to move the NSS_CLIENT_TAG tag on mpprime.c does so.
I moved the NSS_CLIENT_TAG on mpprime.c. I haven't checked in the fix on the MOZILLA_0_9_7_BRANCH. Is it still okay to do that?
Blocks: 114455
I'd love to see it in 0.9.7 if it can go. I'll put it in my Os/2 build whether it is in the 0_9_7 branch or not.
No longer blocks: 114455
Verify, this code fix is in.
Status: RESOLVED → VERIFIED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: