File tree 7 files changed +111
-4
lines changed
7 files changed +111
-4
lines changed Original file line number Diff line number Diff line change @@ -860,10 +860,11 @@ impl<'a> CrateLoader<'a> {
860
860
config:: CrateTypeExecutable => true ,
861
861
// This crate will be compiled with the required
862
862
// instrumentation pass
863
- config:: CrateTypeRlib => false ,
864
- config:: CrateTypeDylib => false ,
865
- config:: CrateTypeCdylib => false ,
866
- config:: CrateTypeStaticlib => false ,
863
+ config:: CrateTypeRlib |
864
+ config:: CrateTypeDylib |
865
+ config:: CrateTypeCdylib |
866
+ config:: CrateTypeStaticlib =>
867
+ false ,
867
868
_ => {
868
869
self . sess . err ( & format ! ( "Only executables, dylibs and rlibs can be \
869
870
compiled with `-Z sanitizer`") ) ;
Original file line number Diff line number Diff line change
1
+ -include ../tools.mk
2
+
3
+ # This test builds a shared object, then an executable that links it as a native
4
+ # rust library (constrast to an rlib). The shared library and executable both
5
+ # are compiled with address sanitizer, and we assert that a fault in the cdylib
6
+ # is correctly detected.
7
+
8
+ # NOTE the address sanitizer only supports x86_64 linux and macOS
9
+
10
+ ifeq ($(TARGET ) ,x86_64-apple-darwin)
11
+ ASAN_SUPPORT =$(SANITIZER_SUPPORT )
12
+ EXTRA_RUSTFLAG =-C rpath
13
+ else
14
+ ifeq ($(TARGET ) ,x86_64-unknown-linux-gnu)
15
+ ASAN_SUPPORT =$(SANITIZER_SUPPORT )
16
+ EXTRA_RUSTFLAG =
17
+ endif
18
+ endif
19
+
20
+ all :
21
+ ifeq ($(ASAN_SUPPORT ) ,1)
22
+ $(RUSTC) -g -Z sanitizer=address --crate-type cdylib --target $(TARGET) library.rs
23
+ $(RUSTC) -g -Z sanitizer=address --crate-type bin --target $(TARGET) -llibrary program.rs
24
+ LD_LIBRARY_PATH=$(TMPDIR) $(TMPDIR)/program 2>&1 | grep -q stack-buffer-overflow
25
+ endif
26
+
Original file line number Diff line number Diff line change
1
+ // Copyright 2017 The Rust Project Developers. See the COPYRIGHT
2
+ // file at the top-level directory of this distribution and at
3
+ // http://rust-lang.org/COPYRIGHT.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6
+ // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7
+ // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8
+ // option. This file may not be copied, modified, or distributed
9
+ // except according to those terms.
10
+
11
+ #[ no_mangle]
12
+ pub extern fn overflow ( ) {
13
+ let xs = [ 0 , 1 , 2 , 3 ] ;
14
+ let y = unsafe { * xs. as_ptr ( ) . offset ( 4 ) } ;
15
+ }
Original file line number Diff line number Diff line change
1
+ // Copyright 2017 The Rust Project Developers. See the COPYRIGHT
2
+ // file at the top-level directory of this distribution and at
3
+ // http://rust-lang.org/COPYRIGHT.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6
+ // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7
+ // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8
+ // option. This file may not be copied, modified, or distributed
9
+ // except according to those terms.
10
+
11
+ extern {
12
+ fn overflow ( ) ;
13
+ }
14
+
15
+ fn main ( ) {
16
+ unsafe { overflow ( ) }
17
+ }
Original file line number Diff line number Diff line change
1
+ -include ../tools.mk
2
+
3
+ # This test builds a staticlib, then an executable that links to it.
4
+ # The staticlib and executable both are compiled with address sanitizer,
5
+ # and we assert that a fault in the staticlib is correctly detected.
6
+
7
+ # NOTE the address sanitizer only supports x86_64 linux and macOS
8
+
9
+ ifeq ($(TARGET ) ,x86_64-apple-darwin)
10
+ ASAN_SUPPORT =$(SANITIZER_SUPPORT )
11
+ EXTRA_RUSTFLAG =-C rpath
12
+ else
13
+ ifeq ($(TARGET ) ,x86_64-unknown-linux-gnu)
14
+ ASAN_SUPPORT =$(SANITIZER_SUPPORT )
15
+ EXTRA_RUSTFLAG =
16
+ endif
17
+ endif
18
+
19
+ all :
20
+ ifeq ($(ASAN_SUPPORT ) ,1)
21
+ $(RUSTC) -g -Z sanitizer=address --crate-type staticlib --target $(TARGET) library.rs
22
+ $(CC) program.c $(call STATICLIB,library) $(call OUT_EXE,program) -lasan $(EXTRACFLAGS) $(EXTRACXXFLAGS)
23
+ LD_LIBRARY_PATH=$(TMPDIR) $(TMPDIR)/program 2>&1 | grep -q stack-buffer-overflow
24
+ endif
25
+
Original file line number Diff line number Diff line change
1
+ // Copyright 2017 The Rust Project Developers. See the COPYRIGHT
2
+ // file at the top-level directory of this distribution and at
3
+ // http://rust-lang.org/COPYRIGHT.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6
+ // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7
+ // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8
+ // option. This file may not be copied, modified, or distributed
9
+ // except according to those terms.
10
+
11
+ #[ no_mangle]
12
+ pub extern fn overflow ( ) {
13
+ let xs = [ 0 , 1 , 2 , 3 ] ;
14
+ let y = unsafe { * xs. as_ptr ( ) . offset ( 4 ) } ;
15
+ }
Original file line number Diff line number Diff line change
1
+ // ignore-license
2
+ void overflow ();
3
+
4
+ int main () {
5
+ overflow ();
6
+ return 0 ;
7
+ }
8
+
You can’t perform that action at this time.
0 commit comments