@@ -830,13 +830,13 @@ func (f *File) applyRelocationsAMD64(dst []byte, rels []byte) error {
830
830
831
831
switch t {
832
832
case R_X86_64_64 :
833
- if rela .Off + 8 >= uint64 (len (dst )) || rela .Addend < 0 {
833
+ if rela .Off + 8 >= uint64 (len (dst )) || rela .Off + 8 < rela . Off || rela . Addend < 0 {
834
834
continue
835
835
}
836
836
val64 := sym .Value + uint64 (rela .Addend )
837
837
f .ByteOrder .PutUint64 (dst [rela .Off :rela .Off + 8 ], val64 )
838
838
case R_X86_64_32 :
839
- if rela .Off + 4 >= uint64 (len (dst )) || rela .Addend < 0 {
839
+ if rela .Off + 4 >= uint64 (len (dst )) || rela .Off + 4 < rela . Off || rela . Addend < 0 {
840
840
continue
841
841
}
842
842
val32 := uint32 (sym .Value ) + uint32 (rela .Addend )
@@ -872,7 +872,7 @@ func (f *File) applyRelocations386(dst []byte, rels []byte) error {
872
872
sym := & symbols [symNo - 1 ]
873
873
874
874
if t == R_386_32 {
875
- if rel .Off + 4 >= uint32 (len (dst )) {
875
+ if rel .Off + 4 >= uint32 (len (dst )) || rel . Off + 4 < rel . Off {
876
876
continue
877
877
}
878
878
val := f .ByteOrder .Uint32 (dst [rel .Off : rel .Off + 4 ])
@@ -910,7 +910,7 @@ func (f *File) applyRelocationsARM(dst []byte, rels []byte) error {
910
910
911
911
switch t {
912
912
case R_ARM_ABS32 :
913
- if rel .Off + 4 >= uint32 (len (dst )) {
913
+ if rel .Off + 4 >= uint32 (len (dst )) || rel . Off + 4 < rel . Off {
914
914
continue
915
915
}
916
916
val := f .ByteOrder .Uint32 (dst [rel .Off : rel .Off + 4 ])
@@ -955,13 +955,13 @@ func (f *File) applyRelocationsARM64(dst []byte, rels []byte) error {
955
955
956
956
switch t {
957
957
case R_AARCH64_ABS64 :
958
- if rela .Off + 8 >= uint64 (len (dst )) || rela .Addend < 0 {
958
+ if rela .Off + 8 >= uint64 (len (dst )) || rela .Off + 8 < rela . Off || rela . Addend < 0 {
959
959
continue
960
960
}
961
961
val64 := sym .Value + uint64 (rela .Addend )
962
962
f .ByteOrder .PutUint64 (dst [rela .Off :rela .Off + 8 ], val64 )
963
963
case R_AARCH64_ABS32 :
964
- if rela .Off + 4 >= uint64 (len (dst )) || rela .Addend < 0 {
964
+ if rela .Off + 4 >= uint64 (len (dst )) || rela .Off + 4 < rela . Off || rela . Addend < 0 {
965
965
continue
966
966
}
967
967
val32 := uint32 (sym .Value ) + uint32 (rela .Addend )
@@ -1001,7 +1001,7 @@ func (f *File) applyRelocationsPPC(dst []byte, rels []byte) error {
1001
1001
1002
1002
switch t {
1003
1003
case R_PPC_ADDR32 :
1004
- if rela .Off + 4 >= uint32 (len (dst )) || rela .Addend < 0 {
1004
+ if rela .Off + 4 >= uint32 (len (dst )) || rela .Off + 4 < rela . Off || rela . Addend < 0 {
1005
1005
continue
1006
1006
}
1007
1007
val32 := uint32 (sym .Value ) + uint32 (rela .Addend )
@@ -1041,13 +1041,13 @@ func (f *File) applyRelocationsPPC64(dst []byte, rels []byte) error {
1041
1041
1042
1042
switch t {
1043
1043
case R_PPC64_ADDR64 :
1044
- if rela .Off + 8 >= uint64 (len (dst )) || rela .Addend < 0 {
1044
+ if rela .Off + 8 >= uint64 (len (dst )) || rela .Off + 8 < rela . Off || rela . Addend < 0 {
1045
1045
continue
1046
1046
}
1047
1047
val64 := sym .Value + uint64 (rela .Addend )
1048
1048
f .ByteOrder .PutUint64 (dst [rela .Off :rela .Off + 8 ], val64 )
1049
1049
case R_PPC64_ADDR32 :
1050
- if rela .Off + 4 >= uint64 (len (dst )) || rela .Addend < 0 {
1050
+ if rela .Off + 4 >= uint64 (len (dst )) || rela .Off + 4 < rela . Off || rela . Addend < 0 {
1051
1051
continue
1052
1052
}
1053
1053
val32 := uint32 (sym .Value ) + uint32 (rela .Addend )
@@ -1084,7 +1084,7 @@ func (f *File) applyRelocationsMIPS(dst []byte, rels []byte) error {
1084
1084
1085
1085
switch t {
1086
1086
case R_MIPS_32 :
1087
- if rel .Off + 4 >= uint32 (len (dst )) {
1087
+ if rel .Off + 4 >= uint32 (len (dst )) || rel . Off + 4 < rel . Off {
1088
1088
continue
1089
1089
}
1090
1090
val := f .ByteOrder .Uint32 (dst [rel .Off : rel .Off + 4 ])
@@ -1132,13 +1132,13 @@ func (f *File) applyRelocationsMIPS64(dst []byte, rels []byte) error {
1132
1132
1133
1133
switch t {
1134
1134
case R_MIPS_64 :
1135
- if rela .Off + 8 >= uint64 (len (dst )) || rela .Addend < 0 {
1135
+ if rela .Off + 8 >= uint64 (len (dst )) || rela .Off + 8 < rela . Off || rela . Addend < 0 {
1136
1136
continue
1137
1137
}
1138
1138
val64 := sym .Value + uint64 (rela .Addend )
1139
1139
f .ByteOrder .PutUint64 (dst [rela .Off :rela .Off + 8 ], val64 )
1140
1140
case R_MIPS_32 :
1141
- if rela .Off + 4 >= uint64 (len (dst )) || rela .Addend < 0 {
1141
+ if rela .Off + 4 >= uint64 (len (dst )) || rela .Off + 4 < rela . Off || rela . Addend < 0 {
1142
1142
continue
1143
1143
}
1144
1144
val32 := uint32 (sym .Value ) + uint32 (rela .Addend )
@@ -1180,13 +1180,13 @@ func (f *File) applyRelocationsLOONG64(dst []byte, rels []byte) error {
1180
1180
1181
1181
switch t {
1182
1182
case R_LARCH_64 :
1183
- if rela .Off + 8 >= uint64 (len (dst )) || rela .Addend < 0 {
1183
+ if rela .Off + 8 >= uint64 (len (dst )) || rela .Off + 8 < rela . Off || rela . Addend < 0 {
1184
1184
continue
1185
1185
}
1186
1186
val64 := sym .Value + uint64 (rela .Addend )
1187
1187
f .ByteOrder .PutUint64 (dst [rela .Off :rela .Off + 8 ], val64 )
1188
1188
case R_LARCH_32 :
1189
- if rela .Off + 4 >= uint64 (len (dst )) || rela .Addend < 0 {
1189
+ if rela .Off + 4 >= uint64 (len (dst )) || rela .Off + 4 < rela . Off || rela . Addend < 0 {
1190
1190
continue
1191
1191
}
1192
1192
val32 := uint32 (sym .Value ) + uint32 (rela .Addend )
@@ -1226,13 +1226,13 @@ func (f *File) applyRelocationsRISCV64(dst []byte, rels []byte) error {
1226
1226
1227
1227
switch t {
1228
1228
case R_RISCV_64 :
1229
- if rela .Off + 8 >= uint64 (len (dst )) || rela .Addend < 0 {
1229
+ if rela .Off + 8 >= uint64 (len (dst )) || rela .Off + 8 < rela . Off || rela . Addend < 0 {
1230
1230
continue
1231
1231
}
1232
1232
val64 := sym .Value + uint64 (rela .Addend )
1233
1233
f .ByteOrder .PutUint64 (dst [rela .Off :rela .Off + 8 ], val64 )
1234
1234
case R_RISCV_32 :
1235
- if rela .Off + 4 >= uint64 (len (dst )) || rela .Addend < 0 {
1235
+ if rela .Off + 4 >= uint64 (len (dst )) || rela .Off + 4 < rela . Off || rela . Addend < 0 {
1236
1236
continue
1237
1237
}
1238
1238
val32 := uint32 (sym .Value ) + uint32 (rela .Addend )
@@ -1272,13 +1272,13 @@ func (f *File) applyRelocationss390x(dst []byte, rels []byte) error {
1272
1272
1273
1273
switch t {
1274
1274
case R_390_64 :
1275
- if rela .Off + 8 >= uint64 (len (dst )) || rela .Addend < 0 {
1275
+ if rela .Off + 8 >= uint64 (len (dst )) || rela .Off + 8 < rela . Off || rela . Addend < 0 {
1276
1276
continue
1277
1277
}
1278
1278
val64 := sym .Value + uint64 (rela .Addend )
1279
1279
f .ByteOrder .PutUint64 (dst [rela .Off :rela .Off + 8 ], val64 )
1280
1280
case R_390_32 :
1281
- if rela .Off + 4 >= uint64 (len (dst )) || rela .Addend < 0 {
1281
+ if rela .Off + 4 >= uint64 (len (dst )) || rela .Off + 4 < rela . Off || rela . Addend < 0 {
1282
1282
continue
1283
1283
}
1284
1284
val32 := uint32 (sym .Value ) + uint32 (rela .Addend )
@@ -1318,13 +1318,13 @@ func (f *File) applyRelocationsSPARC64(dst []byte, rels []byte) error {
1318
1318
1319
1319
switch t {
1320
1320
case R_SPARC_64 , R_SPARC_UA64 :
1321
- if rela .Off + 8 >= uint64 (len (dst )) || rela .Addend < 0 {
1321
+ if rela .Off + 8 >= uint64 (len (dst )) || rela .Off + 8 < rela . Off || rela . Addend < 0 {
1322
1322
continue
1323
1323
}
1324
1324
val64 := sym .Value + uint64 (rela .Addend )
1325
1325
f .ByteOrder .PutUint64 (dst [rela .Off :rela .Off + 8 ], val64 )
1326
1326
case R_SPARC_32 , R_SPARC_UA32 :
1327
- if rela .Off + 4 >= uint64 (len (dst )) || rela .Addend < 0 {
1327
+ if rela .Off + 4 >= uint64 (len (dst )) || rela .Off + 4 < rela . Off || rela . Addend < 0 {
1328
1328
continue
1329
1329
}
1330
1330
val32 := uint32 (sym .Value ) + uint32 (rela .Addend )
0 commit comments