Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/goPublic

Commit32fb193

Browse files
committed
[release-branch.go1.3] cmd/5l, cmd/6l, cmd/8l: fix nacl binary corruption bug
««« CL 135050043 / 57dfd03985a9cmd/5l, cmd/6l, cmd/8l: fix nacl binary corruption bugNaCl requires the addition of a 32-byte "halt sled" at the endof the text segment. This means that segtext.len is actually32 bytes shorter than reality. The computation of the file offsetof the end of the data segment did not take this 32 bytes intoaccount, so if len and len+32 rounded up (by 64k) to differentvalues, the symbol table overwrote the last page of the datasegment.The last page of the data segment is usually the C .stringsymbols, which contain the strings used in error printsby the runtime. So when this happens, your programprobably crashes, and then when it does, you get binarygarbage instead of all the usual prints.The chance of hitting this with a randomly sized text segmentis 32 in 65536, or 1 in 2048.If you add or remove ANY code while trying to debug thisproblem, you're overwhelmingly likely to bump the textsegment one way or the other and make the bug disappear.Correct all the computations to use segdata.fileoff+segdata.fileleninstead of trying to rederive segdata.fileoff.This fixes the failure during the nacl/amd64p32 build.TBR=iantCC=golang-codereviewshttps://golang.org/cl/135050043»»»LGTM=bradfitzR=golang-codereviewsCC=adg, bradfitz, golang-codereviews, ianthttps://golang.org/cl/151150044
1 parentc09c8bb commit32fb193

File tree

3 files changed

+10
-10
lines changed

3 files changed

+10
-10
lines changed

‎src/cmd/5l/asm.c‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -599,10 +599,10 @@ asmb(void)
599599
if(iself)
600600
gotoElfSym;
601601
caseHplan9:
602-
symo=HEADR+segtext.len+segdata.filelen;
602+
symo=segdata.fileoff+segdata.filelen;
603603
break;
604604
ElfSym:
605-
symo=rnd(HEADR+segtext.filelen,INITRND)+rnd(HEADR+segrodata.filelen,INITRND)+segdata.filelen;
605+
symo=segdata.fileoff+segdata.filelen;
606606
symo=rnd(symo,INITRND);
607607
break;
608608
}

‎src/cmd/6l/asm.c‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -689,10 +689,10 @@ asmb(void)
689689
caseHplan9:
690690
caseHelf:
691691
debug['s']=1;
692-
symo=HEADR+segtext.len+segdata.filelen;
692+
symo=segdata.fileoff+segdata.filelen;
693693
break;
694694
caseHdarwin:
695-
symo=rnd(HEADR+segtext.len,INITRND)+rnd(segdata.filelen,INITRND)+machlink;
695+
symo=segdata.fileoff+rnd(segdata.filelen,INITRND)+machlink;
696696
break;
697697
caseHlinux:
698698
caseHfreebsd:
@@ -701,11 +701,11 @@ asmb(void)
701701
caseHdragonfly:
702702
caseHsolaris:
703703
caseHnacl:
704-
symo=rnd(HEADR+segtext.len,INITRND)+rnd(segrodata.len,INITRND)+segdata.filelen;
704+
symo=segdata.fileoff+segdata.filelen;
705705
symo=rnd(symo,INITRND);
706706
break;
707707
caseHwindows:
708-
symo=rnd(HEADR+segtext.filelen,PEFILEALIGN)+segdata.filelen;
708+
symo=segdata.fileoff+segdata.filelen;
709709
symo=rnd(symo,PEFILEALIGN);
710710
break;
711711
}

‎src/cmd/8l/asm.c‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -619,17 +619,17 @@ asmb(void)
619619
if(iself)
620620
gotoElfsym;
621621
caseHplan9:
622-
symo=HEADR+segtext.filelen+segdata.filelen;
622+
symo=segdata.fileoff+segdata.filelen;
623623
break;
624624
caseHdarwin:
625-
symo=rnd(HEADR+segtext.filelen,INITRND)+rnd(segdata.filelen,INITRND)+machlink;
625+
symo=segdata.fileoff+rnd(segdata.filelen,INITRND)+machlink;
626626
break;
627627
Elfsym:
628-
symo=rnd(HEADR+segtext.filelen,INITRND)+rnd(HEADR+segrodata.filelen,INITRND)+segdata.filelen;
628+
symo=segdata.fileoff+segdata.filelen;
629629
symo=rnd(symo,INITRND);
630630
break;
631631
caseHwindows:
632-
symo=rnd(HEADR+segtext.filelen,PEFILEALIGN)+segdata.filelen;
632+
symo=segdata.fileoff+segdata.filelen;
633633
symo=rnd(symo,PEFILEALIGN);
634634
break;
635635
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp