mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 04:13:28 +01:00
Merge branch 'maint-0.3.5'
This commit is contained in:
commit
c19bb4d62e
15
.travis.yml
15
.travis.yml
@ -33,12 +33,8 @@ env:
|
|||||||
## We don't list default variable values, because we set the defaults
|
## We don't list default variable values, because we set the defaults
|
||||||
## in global (or the default is unset)
|
## in global (or the default is unset)
|
||||||
-
|
-
|
||||||
## We turn off hardening for Rust builds, because they are incompatible,
|
|
||||||
## and it's going to take a while for them to be fixed. See:
|
|
||||||
## https:/trac.torproject.org/projects/tor/ticket/25386
|
|
||||||
## https:/trac.torproject.org/projects/tor/ticket/26398
|
|
||||||
## TOR_RUST_DEPENDENCIES is spelt RUST_DEPENDENCIES in 0.3.2
|
## TOR_RUST_DEPENDENCIES is spelt RUST_DEPENDENCIES in 0.3.2
|
||||||
- RUST_OPTIONS="--enable-rust" TOR_RUST_DEPENDENCIES=true HARDENING_OPTIONS=""
|
- RUST_OPTIONS="--enable-rust" TOR_RUST_DEPENDENCIES=true
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
## include creates builds with gcc, linux, sudo: false
|
## include creates builds with gcc, linux, sudo: false
|
||||||
@ -54,10 +50,9 @@ matrix:
|
|||||||
# We clone our stem repo and run `make test-stem`
|
# We clone our stem repo and run `make test-stem`
|
||||||
- env: TEST_STEM="yes"
|
- env: TEST_STEM="yes"
|
||||||
## Check rust online with distcheck, to make sure we remove rust products
|
## Check rust online with distcheck, to make sure we remove rust products
|
||||||
## But without hardening (see above)
|
- env: DISTCHECK="yes" RUST_OPTIONS="--enable-rust --enable-cargo-online-mode"
|
||||||
- env: DISTCHECK="yes" RUST_OPTIONS="--enable-rust --enable-cargo-online-mode" HARDENING_OPTIONS=""
|
|
||||||
## Check disable module dirauth with and without rust
|
## Check disable module dirauth with and without rust
|
||||||
- env: MODULES_OPTIONS="--disable-module-dirauth" RUST_OPTIONS="--enable-rust" TOR_RUST_DEPENDENCIES=true HARDENING_OPTIONS=""
|
- env: MODULES_OPTIONS="--disable-module-dirauth" RUST_OPTIONS="--enable-rust" TOR_RUST_DEPENDENCIES=true
|
||||||
- env: MODULES_OPTIONS="--disable-module-dirauth"
|
- env: MODULES_OPTIONS="--disable-module-dirauth"
|
||||||
## Check NSS
|
## Check NSS
|
||||||
- env: NSS_OPTIONS="--enable-nss"
|
- env: NSS_OPTIONS="--enable-nss"
|
||||||
@ -181,8 +176,8 @@ install:
|
|||||||
- if [[ "$ASCIIDOC_OPTIONS" == "" ]] && [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export XML_CATALOG_FILES="/usr/local/etc/xml/catalog"; fi
|
- if [[ "$ASCIIDOC_OPTIONS" == "" ]] && [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export XML_CATALOG_FILES="/usr/local/etc/xml/catalog"; fi
|
||||||
## If we're using Rust, download rustup
|
## If we're using Rust, download rustup
|
||||||
- if [[ "$RUST_OPTIONS" != "" ]]; then curl -Ssf -o rustup.sh https://sh.rustup.rs; fi
|
- if [[ "$RUST_OPTIONS" != "" ]]; then curl -Ssf -o rustup.sh https://sh.rustup.rs; fi
|
||||||
## Install the stable channels of rustc and cargo and setup our toolchain environment
|
## Install the nightly channels of rustc and cargo and setup our toolchain environment
|
||||||
- if [[ "$RUST_OPTIONS" != "" ]]; then sh rustup.sh -y --default-toolchain stable; fi
|
- if [[ "$RUST_OPTIONS" != "" ]]; then sh rustup.sh -y --default-toolchain nightly; fi
|
||||||
- if [[ "$RUST_OPTIONS" != "" ]]; then source $HOME/.cargo/env; fi
|
- if [[ "$RUST_OPTIONS" != "" ]]; then source $HOME/.cargo/env; fi
|
||||||
## If we're testing rust builds in offline-mode, then set up our vendored dependencies
|
## If we're testing rust builds in offline-mode, then set up our vendored dependencies
|
||||||
- if [[ "$TOR_RUST_DEPENDENCIES" == "true" ]]; then export TOR_RUST_DEPENDENCIES=$PWD/src/ext/rust/crates; fi
|
- if [[ "$TOR_RUST_DEPENDENCIES" == "true" ]]; then export TOR_RUST_DEPENDENCIES=$PWD/src/ext/rust/crates; fi
|
||||||
|
8
changes/rust_asan
Normal file
8
changes/rust_asan
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
o Major bugfixes (compilation, rust):
|
||||||
|
- Rust tests can now build and run successfully with the
|
||||||
|
--enable-fragile-hardening option enabled.
|
||||||
|
Doing this currently requires the rust beta channel; it will
|
||||||
|
be possible with stable rust as of rust version 1.31 is out.
|
||||||
|
Patch from Alex Crichton.
|
||||||
|
Fixes bugs 27272, 27273, and 27274.
|
||||||
|
Bugfix on 0.3.1.1-alpha.
|
@ -1210,17 +1210,17 @@ dnl variable.
|
|||||||
RUST_LINKER_OPTIONS=""
|
RUST_LINKER_OPTIONS=""
|
||||||
if test "x$have_clang" = "xyes"; then
|
if test "x$have_clang" = "xyes"; then
|
||||||
if test "x$CFLAGS_ASAN" != "x"; then
|
if test "x$CFLAGS_ASAN" != "x"; then
|
||||||
RUST_LINKER_OPTIONS="$RUST_LINKER_OPTIONS $CFLAGS_ASAN"
|
RUST_LINKER_OPTIONS="$RUST_LINKER_OPTIONS -Clink-arg=$CFLAGS_ASAN -Cdefault-linker-libraries"
|
||||||
fi
|
fi
|
||||||
if test "x$CFLAGS_UBSAN" != "x"; then
|
if test "x$CFLAGS_UBSAN" != "x"; then
|
||||||
RUST_LINKER_OPTIONS="$RUST_LINKER_OPTIONS $CFLAGS_UBSAN"
|
RUST_LINKER_OPTIONS="$RUST_LINKER_OPTIONS -Clink-arg=$CFLAGS_UBSAN -Cdefault-linker-libraries"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
if test "x$CFLAGS_ASAN" != "x"; then
|
if test "x$CFLAGS_ASAN" != "x"; then
|
||||||
RUST_LINKER_OPTIONS="$RUST_LINKER_OPTIONS -lasan"
|
RUST_LINKER_OPTIONS="$RUST_LINKER_OPTIONS -Clink-arg=-fsanitize=address -Cdefault-linker-libraries"
|
||||||
fi
|
fi
|
||||||
if test "x$CFLAGS_UBSAN" != "x"; then
|
if test "x$CFLAGS_UBSAN" != "x"; then
|
||||||
RUST_LINKER_OPTIONS="$RUST_LINKER_OPTIONS -lubsan"
|
RUST_LINKER_OPTIONS="$RUST_LINKER_OPTIONS -Clink-arg=-fsanitize=undefined -Cdefault-linker-libraries"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
AC_SUBST(RUST_LINKER_OPTIONS)
|
AC_SUBST(RUST_LINKER_OPTIONS)
|
||||||
@ -2416,7 +2416,6 @@ AC_CONFIG_FILES([
|
|||||||
Doxyfile
|
Doxyfile
|
||||||
Makefile
|
Makefile
|
||||||
config.rust
|
config.rust
|
||||||
link_rust.sh
|
|
||||||
contrib/dist/suse/tor.sh
|
contrib/dist/suse/tor.sh
|
||||||
contrib/operator-tools/tor.logrotate
|
contrib/operator-tools/tor.logrotate
|
||||||
contrib/dist/tor.sh
|
contrib/dist/tor.sh
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# A linker script used when building Rust tests. Autoconf makes link_rust.sh
|
|
||||||
# from link_rust_sh.in, and uses it to pass extra options to the linker
|
|
||||||
# when linking Rust stuff.
|
|
||||||
#
|
|
||||||
# We'd like to remove the need for this, but build.rs doesn't let us pass
|
|
||||||
# -static-libasan and -static-libubsan to the linker.
|
|
||||||
|
|
||||||
$CCLD @RUST_LINKER_OPTIONS@ "$@"
|
|
1
src/rust/Cargo.lock
generated
1
src/rust/Cargo.lock
generated
@ -26,6 +26,7 @@ version = "0.0.1"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"smartlist 0.0.1",
|
"smartlist 0.0.1",
|
||||||
|
"tor_allocate 0.0.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -13,19 +13,3 @@ members = [
|
|||||||
[profile.release]
|
[profile.release]
|
||||||
debug = true
|
debug = true
|
||||||
panic = "abort"
|
panic = "abort"
|
||||||
|
|
||||||
[features]
|
|
||||||
default = []
|
|
||||||
# If this feature is enabled, test code which calls Tor C code from Rust will
|
|
||||||
# execute with `cargo test`. Due to numerous linker issues (#25386), this is
|
|
||||||
# currently disabled by default. Crates listed here are those which, in their
|
|
||||||
# unittests, doctests, and/or integration tests, call C code.
|
|
||||||
test-c-from-rust = [
|
|
||||||
"crypto/test-c-from-rust",
|
|
||||||
]
|
|
||||||
|
|
||||||
# We have to define a feature here because doctests don't get cfg(test),
|
|
||||||
# and we need to disable some C dependencies when running the doctests
|
|
||||||
# because of the various linker issues. See
|
|
||||||
# https://github.com/rust-lang/rust/issues/45599
|
|
||||||
test_linking_hack = []
|
|
||||||
|
@ -9,7 +9,6 @@ build = "../build.rs"
|
|||||||
[lib]
|
[lib]
|
||||||
name = "crypto"
|
name = "crypto"
|
||||||
path = "lib.rs"
|
path = "lib.rs"
|
||||||
crate_type = ["rlib", "staticlib"]
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
libc = "=0.2.39"
|
libc = "=0.2.39"
|
||||||
|
6
src/rust/external/Cargo.toml
vendored
6
src/rust/external/Cargo.toml
vendored
@ -5,14 +5,12 @@ name = "external"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
libc = "=0.2.39"
|
libc = "=0.2.39"
|
||||||
|
smartlist = { path = "../smartlist" }
|
||||||
[dependencies.smartlist]
|
tor_allocate = { path = "../tor_allocate" }
|
||||||
path = "../smartlist"
|
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "external"
|
name = "external"
|
||||||
path = "lib.rs"
|
path = "lib.rs"
|
||||||
crate_type = ["rlib", "staticlib"]
|
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
# We have to define a feature here because doctests don't get cfg(test),
|
# We have to define a feature here because doctests don't get cfg(test),
|
||||||
|
2
src/rust/external/lib.rs
vendored
2
src/rust/external/lib.rs
vendored
@ -8,7 +8,7 @@
|
|||||||
//! module implementing this functionality repeatedly.
|
//! module implementing this functionality repeatedly.
|
||||||
|
|
||||||
extern crate libc;
|
extern crate libc;
|
||||||
|
extern crate tor_allocate;
|
||||||
extern crate smartlist;
|
extern crate smartlist;
|
||||||
|
|
||||||
pub mod crypto_digest;
|
pub mod crypto_digest;
|
||||||
|
@ -31,4 +31,3 @@ path = "../tor_log"
|
|||||||
[lib]
|
[lib]
|
||||||
name = "protover"
|
name = "protover"
|
||||||
path = "lib.rs"
|
path = "lib.rs"
|
||||||
crate_type = ["rlib", "staticlib"]
|
|
||||||
|
@ -9,7 +9,6 @@ libc = "0.2.39"
|
|||||||
[lib]
|
[lib]
|
||||||
name = "smartlist"
|
name = "smartlist"
|
||||||
path = "lib.rs"
|
path = "lib.rs"
|
||||||
crate_type = ["rlib", "staticlib"]
|
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
# We have to define a feature here because doctests don't get cfg(test),
|
# We have to define a feature here because doctests don't get cfg(test),
|
||||||
|
@ -6,3 +6,12 @@ extern crate libc;
|
|||||||
mod smartlist;
|
mod smartlist;
|
||||||
|
|
||||||
pub use smartlist::*;
|
pub use smartlist::*;
|
||||||
|
|
||||||
|
// When testing we may be compiled with sanitizers which are incompatible with
|
||||||
|
// Rust's default allocator, jemalloc (unsure why at this time). Most crates
|
||||||
|
// link to `tor_allocate` which switches by default to a non-jemalloc allocator,
|
||||||
|
// but we don't already depend on `tor_allocate` so make sure that while testing
|
||||||
|
// we don't use jemalloc. (but rather malloc/free)
|
||||||
|
#[global_allocator]
|
||||||
|
#[cfg(test)]
|
||||||
|
static A: std::alloc::System = std::alloc::System;
|
||||||
|
@ -9,7 +9,6 @@ libc = "=0.2.39"
|
|||||||
[lib]
|
[lib]
|
||||||
name = "tor_allocate"
|
name = "tor_allocate"
|
||||||
path = "lib.rs"
|
path = "lib.rs"
|
||||||
crate_type = ["rlib", "staticlib"]
|
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
# We have to define a feature here because doctests don't get cfg(test),
|
# We have to define a feature here because doctests don't get cfg(test),
|
||||||
|
@ -11,5 +11,10 @@
|
|||||||
|
|
||||||
extern crate libc;
|
extern crate libc;
|
||||||
|
|
||||||
|
use std::alloc::System;
|
||||||
|
|
||||||
mod tor_allocate;
|
mod tor_allocate;
|
||||||
pub use tor_allocate::*;
|
pub use tor_allocate::*;
|
||||||
|
|
||||||
|
#[global_allocator]
|
||||||
|
static A: System = System;
|
||||||
|
@ -6,7 +6,6 @@ authors = ["The Tor Project"]
|
|||||||
[lib]
|
[lib]
|
||||||
name = "tor_log"
|
name = "tor_log"
|
||||||
path = "lib.rs"
|
path = "lib.rs"
|
||||||
crate_type = ["rlib", "staticlib"]
|
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
# We have to define a feature here because doctests don't get cfg(test),
|
# We have to define a feature here because doctests don't get cfg(test),
|
||||||
|
@ -6,7 +6,7 @@ version = "0.1.0"
|
|||||||
[lib]
|
[lib]
|
||||||
name = "tor_rust"
|
name = "tor_rust"
|
||||||
path = "lib.rs"
|
path = "lib.rs"
|
||||||
crate_type = ["rlib", "staticlib"]
|
crate_type = ["staticlib"]
|
||||||
|
|
||||||
[dependencies.tor_util]
|
[dependencies.tor_util]
|
||||||
path = "../tor_util"
|
path = "../tor_util"
|
||||||
|
@ -6,7 +6,6 @@ version = "0.0.1"
|
|||||||
[lib]
|
[lib]
|
||||||
name = "tor_util"
|
name = "tor_util"
|
||||||
path = "lib.rs"
|
path = "lib.rs"
|
||||||
crate_type = ["rlib", "staticlib"]
|
|
||||||
|
|
||||||
[dependencies.tor_allocate]
|
[dependencies.tor_allocate]
|
||||||
path = "../tor_allocate"
|
path = "../tor_allocate"
|
||||||
|
@ -12,8 +12,7 @@ TESTS_ENVIRONMENT = \
|
|||||||
export EXTRA_CARGO_OPTIONS="$(EXTRA_CARGO_OPTIONS)"; \
|
export EXTRA_CARGO_OPTIONS="$(EXTRA_CARGO_OPTIONS)"; \
|
||||||
export CARGO_ONLINE="$(CARGO_ONLINE)"; \
|
export CARGO_ONLINE="$(CARGO_ONLINE)"; \
|
||||||
export CCLD="$(CCLD)"; \
|
export CCLD="$(CCLD)"; \
|
||||||
chmod +x "$(abs_top_builddir)/link_rust.sh"; \
|
export RUSTFLAGS="-C linker=`echo '$(CC)' | cut -d' ' -f 1` $(RUST_LINKER_OPTIONS)";
|
||||||
export RUSTFLAGS="-C linker=$(abs_top_builddir)/link_rust.sh";
|
|
||||||
|
|
||||||
TESTSCRIPTS = \
|
TESTSCRIPTS = \
|
||||||
src/test/fuzz_static_testcases.sh \
|
src/test/fuzz_static_testcases.sh \
|
||||||
|
@ -5,12 +5,20 @@ set -e
|
|||||||
|
|
||||||
export LSAN_OPTIONS=suppressions=${abs_top_srcdir:-../../..}/src/test/rust_supp.txt
|
export LSAN_OPTIONS=suppressions=${abs_top_srcdir:-../../..}/src/test/rust_supp.txt
|
||||||
|
|
||||||
|
# When testing Cargo we pass a number of very specific linker flags down
|
||||||
|
# through Cargo. We do not, however, want these flags to affect things like
|
||||||
|
# build scripts, only the tests that we're compiling. To ensure this happens
|
||||||
|
# we unconditionally pass `--target` into Cargo, ensuring that `RUSTFLAGS` in
|
||||||
|
# the environment won't make their way into build scripts.
|
||||||
|
rustc_host=$(rustc -vV | grep host | sed 's/host: //')
|
||||||
|
|
||||||
for cargo_toml_dir in "${abs_top_srcdir:-../../..}"/src/rust/*; do
|
for cargo_toml_dir in "${abs_top_srcdir:-../../..}"/src/rust/*; do
|
||||||
if [ -e "${cargo_toml_dir}/Cargo.toml" ]; then
|
if [ -e "${cargo_toml_dir}/Cargo.toml" ]; then
|
||||||
cd "${abs_top_builddir:-../../..}/src/rust" && \
|
cd "${abs_top_builddir:-../../..}/src/rust" && \
|
||||||
CARGO_TARGET_DIR="${abs_top_builddir:-../../..}/src/rust/target" \
|
CARGO_TARGET_DIR="${abs_top_builddir:-../../..}/src/rust/target" \
|
||||||
"${CARGO:-cargo}" test ${CARGO_ONLINE-"--frozen"} \
|
"${CARGO:-cargo}" test ${CARGO_ONLINE-"--frozen"} \
|
||||||
--features "test_linking_hack" \
|
--features "test_linking_hack" \
|
||||||
|
--target $rustc_host \
|
||||||
${EXTRA_CARGO_OPTIONS} \
|
${EXTRA_CARGO_OPTIONS} \
|
||||||
--manifest-path "${cargo_toml_dir}/Cargo.toml" || exitcode=1
|
--manifest-path "${cargo_toml_dir}/Cargo.toml" || exitcode=1
|
||||||
fi
|
fi
|
||||||
|
Loading…
Reference in New Issue
Block a user