Rust Memory Safety & Undefined Behavior Detection

Overview

Rudra

Rudra is a static analyzer to detect common undefined behaviors in Rust programs. It is capable of analyzing single Rust packages as well as all the packages on crates.io.

Rudra and its associated paper received the Distinguished Artifact Award at the 28th ACM Symposium on Operating Systems Principles 2021 (SOSP '21). (PDF, short talk, long talk)

You can find the list of bugs found by Rudra at Rudra-PoC repository.

Usage

The easiest way to use Rudra is to use Docker.

  1. First, make sure your system has Docker and Python 3 installed.
  2. Add rudra:latest image on your system. There are two ways of doing this:
    • docker pull ghcr.io/sslab-gatech/rudra:master && docker tag ghcr.io/sslab-gatech/rudra:master rudra:latest
    • Alternatively, you can build your own image with docker build . -t rudra:latest
  3. Run ./setup_rudra_runner_home.py and set RUDRA_RUNNER_HOME to that directory. Example: ./setup_rudra_runner_home.py ~/rudra-home && export RUDRA_RUNNER_HOME=$HOME/rudra-home.
    • There are two scripts, ./setup_rudra_runner_home.py and ./setup_rudra_runner_home_fixed.py. In general, ./setup_rudra_runner_home.py should be used unless you want to reproduce the result of the paper with a fixed cargo index.
  4. Add docker-helper in Rudra repository to $PATH. Now you are ready to test Rudra!

For development, you might want to install Rudra on your host system. See DEV.md for advanced usage and development guide.

Run Rudra on a single project

docker-cargo-rudra 
   

   

The log and report are printed to stderr by default.

Run Rudra with different compiler version

Rudra is tied to a specific Rust compiler version, and it can only analyze projects that compiles with this version of the compiler. master branch uses nightly-2021-08-20 version of Rust right now. Check the version page for all supported versions.

Bug Types Detected by Rudra

Rudra currently detects the following bug types. For the full detail, please check our SOSP 2021 paper.

Panic Safety (Unsafe code that can create memory-safety issues when panicked)

Detects when unsafe code may lead to memory safety issues if a user provided closure or trait panics. For example, consider a function that dereferences a pointer with ptr::read, duplicating its ownership and then calls a user provided function f. This can lead to a double-free if the function f panics.

See this section of the Rustonomicon for more details.

while idx < len {
    let ch = unsafe { self.get_unchecked(idx..len).chars().next().unwrap() };
    let ch_len = ch.len_utf8();

    // Call to user provided predicate function f that can panic.
    if !f(ch) {
        del_bytes += ch_len;
    } else if del_bytes > 0 {
        unsafe {
            ptr::copy(
                self.vec.as_ptr().add(idx),
                self.vec.as_mut_ptr().add(idx - del_bytes),
                ch_len,
            );
        }
    }

    // Point idx to the next char
    idx += ch_len;
}

Example: rust#78498

Higher Order Invariant (Assumed properties about traits)

When code assumes certain properties about trait methods that aren't enforced, such as expecting the Borrow trait to return the same reference on multiple calls to borrow.

let mut g = Guard { len: buf.len(), buf }; 
// ...
  Ok(n) => g.len += n, 

Example: rust#80894

Send Sync Variance (Unrestricted Send or Sync on generic types)

This occurs when a type generic over T implements Send or Sync without having correct bounds on T.

unsafe impl
   Sized + 
   Send, U: ?
   Sized> 
   Send 
   for 
   MappedMutexGuard<
   '_, T, U> {} 

   unsafe 
   impl
   
    Sized + 
    Sync, U: ?
    Sized> 
    Sync 
    for 
    MappedMutexGuard<
    '_, T, U> {} 
   
  

Example: futures#2239

Bugs Found by Rudra

Rudra was ran on the entirety of crates.io state as of July 4th, 2020 as well as the Rust standard library from nightly-2020-08-26. It managed to find 264 new memory safety issues across the Rust ecosystem which resulted in 76 CVEs.

The details of these bugs can be found in the Rudra-PoC repo.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Comments
  • Pre-built docker image?

    Pre-built docker image?

    I would love to test this out on my project, but it looks like that there's not pre-built docker image.

    You can host one on DockerHub or GitHub Container Registry. It would be really easier to try this out this way! ๐Ÿ‘

    opened by sobolevn 4
  • Allow setting Rust toolchain as an env var

    Allow setting Rust toolchain as an env var

    This is a really cool project! We're trying to use Rudra with the nightly-2021-08-20 toolchain but there's a small issue โ€” if a user pulls the ghcr.io/sslab-gatech/rudra:2021-08-20 image as specified in the readme and tags it with rudra:latest, running the docker-cargo-rudra script will give an error that the installed Rust toolchain does not match the RUSTUP_TOOLCHAIN env var. I think this PR should resolve that issue so that a user can set RUDRA_RUSTUP_TOOLCHAIN to override the variable passed to Docker.

    opened by rajivshah3 3
  • adapt SendSyncChecker's filtering criteria for 'Channel-like' types

    adapt SendSyncChecker's filtering criteria for 'Channel-like' types

    Summary

    Adapt SendSyncChecker's detection criteria for PtrLike types & Concurrent Queue types.

    • PtrLike : Require T: Send + Sync for impl Sync
    • Concurrent Queue : Allow T: Send to be enough for impl Sync

    test cases relevant to this PR

    • Detected by analyzer
      • tests/send_sync/wild_channel.rs => Detected
      • tests/send_sync/wild_ptr_like.rs => Detected
    • Allowed by analyzer
      • tests/send_sync/okay_channel.rs => Allowed

    Update on Feb 3rd: I decided to remove the PtrLike type handling in this PR, and maybe try again in a separate pr

    opened by JOE1994 3
  • Rudra not compiling with derive(Default)

    Rudra not compiling with derive(Default)

    For some reason Rudra isn't compiling when I use "derive(Default)" When I implement the Default explicitly I get no such issue. cargo test compiles & runs just fine either way.

    Change to allow Rudra to compile - https://github.com/matanmarkind/active_standby/commit/5108cc54aeab191dde397384e6ead1acd98b4ff4

    sudo RUDRA_RUNNER_HOME=~/rust/Rudra/rudra_runner ~/rust/Rudra/docker-helper/docker-cargo-rudra ~/rust/active_standby

    2022-02-23 07:08:19.846614 |INFO | [rudra-progress] Running cargo rudra
    2022-02-23 07:08:20.837016 |INFO | [rudra-progress] Running rudra for target lib:active_standby
    error[E0277]: the trait bound `K: std::cmp::Ord` is not satisfied
       --> src/macros.rs:91:13
        |
    91  |             inner: AsLockHandleAlias$(< $($Inner),* >)?,
        |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::cmp::Ord` is not implemented for `K`
        |
       ::: src/collections/btreemap.rs:66:5
        |
    66  |     crate::generate_lockless_aslockhandle!(BTreeMap<K, V>);
        |     ------------------------------------------------------- in this macro invocation
        |
        = note: required because of the requirements on the impl of `std::default::Default` for `std::collections::BTreeMap<K, V>`
        = note: 1 redundant requirements hidden
        = note: required because of the requirements on the impl of `std::default::Default` for `lockless::aslockhandle::AsLockHandle<std::collections::BTreeMap<K, V>>`
    note: required by `std::default::Default::default`
        = note: this error originates in the derive macro `Default` (in Nightly builds, run with -Z macro-backtrace for more info)
    help: consider further restricting this bound
        |
    89  |         #[derive(Default + std::cmp::Ord, Clone)]
        |                          +++++++++++++++
    
    error[E0277]: the trait bound `T: std::cmp::Ord` is not satisfied
       --> src/macros.rs:91:13
        |
    91  |             inner: AsLockHandleAlias$(< $($Inner),* >)?,
        |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::cmp::Ord` is not implemented for `T`
        |
       ::: src/collections/btreeset.rs:78:5
        |
    78  |     crate::generate_lockless_aslockhandle!(BTreeSet<T>);
        |     ---------------------------------------------------- in this macro invocation
        |
        = note: required because of the requirements on the impl of `std::default::Default` for `std::collections::BTreeSet<T>`
        = note: 1 redundant requirements hidden
        = note: required because of the requirements on the impl of `std::default::Default` for `lockless::aslockhandle::AsLockHandle<std::collections::BTreeSet<T>>`
    note: required by `std::default::Default::default`
        = note: this error originates in the derive macro `Default` (in Nightly builds, run with -Z macro-backtrace for more info)
    help: consider further restricting this bound
        |
    89  |         #[derive(Default + std::cmp::Ord, Clone)]
        |                          +++++++++++++++
    
    error[E0277]: the trait bound `K: std::cmp::Ord` is not satisfied
       --> src/macros.rs:205:13
        |
    205 |             inner: AsLockAlias$(< $($Inner),* >)?,
        |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::cmp::Ord` is not implemented for `K`
        |
       ::: src/collections/btreemap.rs:117:5
        |
    117 |     crate::generate_shared_aslock!(BTreeMap<K, V>);
        |     ----------------------------------------------- in this macro invocation
        |
        = note: required because of the requirements on the impl of `std::default::Default` for `std::collections::BTreeMap<K, V>`
        = note: 1 redundant requirements hidden
        = note: required because of the requirements on the impl of `std::default::Default` for `shared::aslock::AsLock<std::collections::BTreeMap<K, V>>`
    note: required by `std::default::Default::default`
        = note: this error originates in the derive macro `Default` (in Nightly builds, run with -Z macro-backtrace for more info)
    help: consider further restricting this bound
        |
    203 |         #[derive(Default + std::cmp::Ord)]
        |                          +++++++++++++++
    
    error[E0277]: the trait bound `T: std::cmp::Ord` is not satisfied
       --> src/macros.rs:205:13
        |
    205 |             inner: AsLockAlias$(< $($Inner),* >)?,
        |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::cmp::Ord` is not implemented for `T`
        |
       ::: src/collections/btreeset.rs:131:5
        |
    131 |     crate::generate_shared_aslock!(BTreeSet<T>);
        |     -------------------------------------------- in this macro invocation
        |
        = note: required because of the requirements on the impl of `std::default::Default` for `std::collections::BTreeSet<T>`
        = note: 1 redundant requirements hidden
        = note: required because of the requirements on the impl of `std::default::Default` for `shared::aslock::AsLock<std::collections::BTreeSet<T>>`
    note: required by `std::default::Default::default`
        = note: this error originates in the derive macro `Default` (in Nightly builds, run with -Z macro-backtrace for more info)
    help: consider further restricting this bound
        |
    203 |         #[derive(Default + std::cmp::Ord)]
        |                          +++++++++++++++
    
    For more information about this error, try `rustc --explain E0277`.
    error: could not compile `active_standby` due to 4 previous errors
    2022-02-23 07:08:24.492177 |ERROR| [rudra-progress] Finished with non-zero exit code
    
    opened by matanmarkind 2
  • Rudra can't work well because the toolchain used is quite old.

    Rudra can't work well because the toolchain used is quite old.

    When I use nightly-2021-08-20, it works OK. But nowadays, rust projects support many new features. If I use the same toolchain to compile them, errors like feature "edition2021" is required will appear. After I use new version of toolchain. Rudra failed in the compilation because miri was recently split into several crates, which makes rustc_mir unable to reach. The Rudra requires that the version of toolchains used to build Rudra and target projects must be same. What should I do?

    Moreover, I'm very curious about how you analyze 43k packages mentioned in your paper. Is there a project or any scripts?

    My Email: [email protected]

    opened by SocialistDalao 2
  • Update to newer rust version?

    Update to newer rust version?

    The rust version in the Dockerfile is from about one year ago, and a lot of new features have been implemented since then.

    https://github.com/sslab-gatech/Rudra/blob/a2ea65cad7c3fc30c5f8d29a62411e0236af2a2c/Dockerfile#L8

    I tried to change the rust version in the Dockerfile to the latest nightly:

    -     RUST_VERSION=nightly-2020-08-26 \
    +     RUST_VERSION=nightly-2021-08-20 \
    

    which resulted in a compilation failure:

       Compiling rudra v0.1.0 (/tmp/rudra)
    error[E0463]: can't find crate for `rustc_data_structures`
     --> src/lib.rs:7:1
      |
    7 | extern crate rustc_data_structures;
      | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate
    
    error: aborting due to previous error
    
    For more information about this error, try `rustc --explain E0463`.
    error: could not compile `rudra`.
    
    To learn more, run the command again with --verbose.
    warning: build failed, waiting for other jobs to finish...
    error: failed to compile `rudra v0.1.0 (/tmp/rudra)`, intermediate artifacts can be found at `/tmp/rudra/target`
    
    Caused by:
      build failed
    
    opened by Luro02 2
  • Added GitHub Actions support

    Added GitHub Actions support

    I have added GitHub Actions support for Rudra so this should make is easier to users to just run in their workflow.

    One thing to note is that I created a second Dockerfile which just pulls the latest version from GitHub Packages. This is because GitHub Actions will build the container versus pulling an image. Also it helped setting the Entrypoint for the image.

    The second thing is that I have left the inputs but they are not used. I wanted to add support for the Action to error out if Rudra found anything but that can be added to inputs as a flag or enabled by default in Actions.

    It would also be great to see the Action on the Actions Marketplace in the near future.

    opened by GeekMasher 1
  • Frozen cargo build

    Frozen cargo build

    • Use a fixed DB dump from a forked cargo index.
    • Try to use sccache to build dependencies if it is available.
    • Improvement in environment variable handling.
    opened by Qwaz 1
  • Add ability to analyze the standard library

    Add ability to analyze the standard library

    This adds a new folder called stdlib-analysis that contains a convenience script to analyze the standard library.

    This approach creates a small change in rudra to allow for this, in particular it adds:

    • Adds a RUDRA_ALSO_ANALYZE environment variable. This variable causes rudra to also analyze a comma separated list of crates passed in. For example, if we're building crate foo with dependencies bar and baz. We can use RUDRA_ALSO_ANALYZE=bar,baz to analyze both the build dependencies.
    • -Zrudra-act-as-compiler, a rudra flag that makes the analyzer compile instead of just stopping compilation. This is needed because we're trying to analyze dependent crates that are built by xargo. Thus since we have a chain of build dependencies like core -> alloc -> std, we can't just stop building after we've analyzed the first crate.

    I also have an alternative approach that creates a bin/rudra-std.rs file but it either involves refactoring out a lot of the common code from bin/cargo-rudra.rs and bin/rudra.rs OR duplicating code. Please let me know if you would like to see those.

    opened by ammaraskar 1
  • Rudra panics while stdlib analysis after updating it to 2021-08-20

    Rudra panics while stdlib analysis after updating it to 2021-08-20

    Error message:

    error: internal compiler error: compiler/rustc_middle/src/ty/subst.rs:538:17: type parameter `U/#1` (U/1) out of range when substituting, substs=[U]
    
    thread 'rustc' panicked at 'Box<dyn Any>', /rustc/6d64f7f695943541fe12bb960971403f440d7225/compiler/rustc_errors/src/lib.rs:1061:9
    stack backtrace:
       0: std::panicking::begin_panic
       1: std::panic::panic_any
       2: rustc_errors::HandlerInner::span_bug
       3: rustc_errors::Handler::span_bug
       4: rustc_middle::ty::context::tls::with_opt
       5: rustc_middle::util::bug::opt_span_bug_fmt
       6: rustc_middle::util::bug::span_bug_fmt
       7: <rustc_middle::ty::subst::SubstFolder as rustc_middle::ty::fold::TypeFolder>::fold_ty
       8: rudra::analysis::unsafe_dataflow::inner::fn_called_on_copy
       9: rudra::analysis::unsafe_dataflow::inner::UnsafeDataflowBodyAnalyzer::analyze_body
      10: rudra::analysis::unsafe_dataflow::UnsafeDataflowChecker::analyze
      11: rudra::analyze
      12: <rudra::RudraCompilerCalls as rustc_driver::Callbacks>::after_analysis
      13: rustc_interface::queries::<impl rustc_interface::interface::Compiler>::enter
      14: rustc_span::with_source_map
      15: scoped_tls::ScopedKey<T>::set
    

    It will likely fail for other crates too.

    opened by Qwaz 0
  • Standalone examples for Rudra

    Standalone examples for Rudra

    tl;dr: is there a collection of standalone examples demonstrating the power of Rudra?

    Hi,

    I'm attempting to "play around" with Rudra and run some "toy" examples, but I'm not having much success.

    If I run the following:

    for i in tests/*/*.rs; do rudra --crate-type lib $i; done
    

    Then I do get Rudra-based warnings on the following (I didn't show the SendSyncVariance issues):

    • Error (UnsafeDataflow:/WriteFlow/VecSetLen): Potential unsafe dataflow issue in 'MyVec::<T>::push_all'
    • Info (UnsafeDataflow:/Transmute): Potential unsafe dataflow issue in 'test_order_unsafe'
    • Warning (UnsafeDataflow:/ReadFlow): Potential unsafe dataflow issue in 'test_order_unsafe_loop'
    • Warning (UnsafeDataflow:/ReadFlow): Potential unsafe dataflow issue in 'test_order_unsafe'
    • Warning (UnsafeDataflow:/ReadFlow/CopyFlow/WriteFlow): Potential unsafe dataflow issue in 'insertion_sort_unsafe'

    So far so good, so I think that means that my Rudra build is working ... so I then I tried to create my own examples.

    Example 1

    Taken from: https://github.com/rust-lang/rust/issues/80894 / https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=c0ea390522bda958c9d60ad47a42e296

    #![forbid(unsafe_code)]
    
    use std::io::Read;
    
    struct MyRead {
        first: bool,
    }
    
    impl MyRead {
        pub fn new() -> Self {
            MyRead { first: false }
        }
    }
    
    impl Read for MyRead {
        fn read(&mut self, _buf: &mut [u8]) -> std::io::Result<usize> {
            if !self.first {
                self.first = true;
                // First iteration: return more than the buffer size
                Ok(64)
            } else {
                // Second iteration: indicate that we are done
                Ok(0)
            }
        }
    }
    
    struct VecWrapper {
        inner: Vec<u8>,
    }
    
    impl VecWrapper {
        pub fn new() -> Self {
            VecWrapper { inner: Vec::new() }
        }
    }
    
    impl Drop for VecWrapper {
        fn drop(&mut self) {
            // Observe uninitialized bytes
            println!("{:?}", &self.inner);
            // Overwrite heap contents
            for b in &mut self.inner {
                *b = 0x90;
            }
        }
    }
    
    fn main() {
        let mut vec = VecWrapper::new();
        let mut read = MyRead::new();
        read.read_to_end(&mut vec.inner).unwrap();
    }
    

    rudra --crate-type bin main.rs:

    2023-01-03 10:32:13.123601 |INFO | [rudra-progress] Rudra started
    2023-01-03 10:32:13.124523 |INFO | [rudra-progress] SendSyncVariance analysis started
    2023-01-03 10:32:13.124571 |INFO | [rudra-progress] SendSyncVariance analysis finished
    2023-01-03 10:32:13.124593 |INFO | [rudra-progress] UnsafeDataflow analysis started
    2023-01-03 10:32:13.129166 |INFO | [rudra-progress] UnsafeDataflow analysis finished
    2023-01-03 10:32:13.129196 |INFO | [rudra-progress] Rudra finished
    

    That is, no warnings.

    Example 2

    Inspired from: https://github.com/andydude/rust-sha/issues/2 / https://github.com/sslab-gatech/Rudra-PoC/blob/master/poc/0148-sha.rs

    fn to_bytes_len(len: usize) -> Vec<u8> {
        let mut bytes: Vec<u8> = Vec::with_capacity(len);
        unsafe {
            bytes.set_len(len);
        };
        bytes
    }
    
    fn main() {
        let x = to_bytes_len(10);
        println!("{}", x[0]);
    }
    

    rudra --crate-type bin main.rs:

    2023-01-03 10:35:18.845653 |INFO | [rudra-progress] Rudra started
    2023-01-03 10:35:18.846712 |INFO | [rudra-progress] SendSyncVariance analysis started
    2023-01-03 10:35:18.846773 |INFO | [rudra-progress] SendSyncVariance analysis finished
    2023-01-03 10:35:18.846786 |INFO | [rudra-progress] UnsafeDataflow analysis started
    2023-01-03 10:35:18.847592 |INFO | [rudra-progress] UnsafeDataflow analysis finished
    2023-01-03 10:35:18.847647 |INFO | [rudra-progress] Rudra finished
    

    That is, no warnings.

    Based on the description from https://github.com/andydude/rust-sha/issues/2 I was hoping this would exhibit:

    This is unsound, because it allows safe Rust code to exhibit an undefined behavior (read from uninitialized memory).

    Question

    Should I be able to use Rudra like this? Are these false negatives in Rudra, or are the examples "bad" (i.e., they don't contain issues)?

    Alternatively, do you have a collection of standalone examples that demonstrate the kind of problems that Rudra can find? I'd hoped that maybe the tests would show this, but as there are only ~~three~~five UnsafeDataflow issues in the test-suite, I was thinking that there might be more examples of the issues that Rudra can find!

    Version info

    rudra --version
    rustc 1.56.0-nightly (6d64f7f69 2021-08-19)
    
    rustc --version
    rustc 1.56.0-nightly (6d64f7f69 2021-08-19)
    
    rustup toolchain list
    beta-aarch64-apple-darwin
    nightly-2021-08-20-aarch64-apple-darwin (default)
    nightly-2022-11-20-aarch64-apple-darwin
    nightly-aarch64-apple-darwin
    

    Thanks for your help and for building Rudra -- cheers,

    Andrew

    opened by aytey 0
  • custom-build:build-script-build is not supported

    custom-build:build-script-build is not supported

    I am running the rudra container in CI on a library using bindgen to generate bindings from C code.

    Currently when I run Rudra in the project directory, I see this output.

    $ cargo rudra
    2022-02-02 16:35:37.967764 |INFO | [rudra-progress] Running cargo rudra
    2022-02-02 16:35:39.541463 |INFO | [rudra-progress] Running rudra for target lib:tf_bindings
    2022-02-02 16:36:05.063560 |INFO | [rudra-progress] Rudra started
    2022-02-02 16:36:05.063824 |INFO | [rudra-progress] SendSyncVariance analysis started
    2022-02-02 16:36:05.063840 |INFO | [rudra-progress] SendSyncVariance analysis finished
    2022-02-02 16:36:05.063843 |INFO | [rudra-progress] UnsafeDataflow analysis started
    2022-02-02 16:36:05.072000 |INFO | [rudra-progress] UnsafeDataflow analysis finished
    2022-02-02 16:36:05.072021 |INFO | [rudra-progress] Rudra finished
    2022-02-02 16:36:05.445477 |WARN | [cargo_rudra] Target custom-build:build-script-build is not supported
    2022-02-02 16:36:05.445506 |INFO | [rudra-progress] cargo rudra finished
    

    Is there a workaround for Target custom-build:build-script-build is not supported or something different I need to be doing?

    Thanks

    opened by r-wheeler 1
  • Support SARIF output

    Support SARIF output

    It would be awesome if Rudra could support Static Analysis Results Interchange Format (SARIF) so that I can publish results from Rudra into GitHub Advanced Security's Code Scanning.

    I would check out sarif-rs which is what tools like Clippy will be / are using. A GitHub Action would also be needed #20.

    This then could be used for open source repositories that want to use Rudra to then just be able to add the Rudra Action, run the tool, and then upload the results to GitHub Code Scanning.

    +cc @josepalafox

    opened by GeekMasher 0
  • update compiler-version for `edition2021` support

    update compiler-version for `edition2021` support

    Currently, 2021 crates can't be analyzed because the feature is still unstable in the version used by rudra:

    $ docker-cargo-rudra .
    2021-11-14 06:39:02.906467 |INFO | [rudra-progress] Running cargo rudra
    2021-11-14 06:39:03.166856 |ERROR| [rudra-progress] Could not obtain Cargo metadata
    Error during execution of `cargo metadata`: error: failed to load manifest for workspace member `/tmp/rudra/...`
    
    Caused by:
      feature `edition2021` is required
    
      The package requires the Cargo feature called `edition2021`, but that feature is not stabilized in this version of Cargo (1.56.0-nightly (e96bdb0c3 2021-08-17)).
      Consider adding `cargo-features = ["edition2021"]` to the top of Cargo.toml (above the [package] table) to tell Cargo you are opting in to use this unstable feature.
      See https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#edition-2021 for more information about the status of this feature.
    
    opened by M1cha 2
  • Failed to run 'cargo rudra' for crates

    Failed to run 'cargo rudra' for crates

    When I execute cargo rudra for other crates, there is an error:

    dyld: Library not loaded: @rpath/librustc_driver-0fd0d43d50587954.dylib
    Referenced from: /Users/vaynnecol/.cargo/bin/cargo-rudra
    Reason: image not found
    [1] 91286 abort cargo rudra
    

    and this error does not apper when i running Rudra for itself.

    opened by VaynNecol 2
Owner
gts3.org (SSLab@Gatech)
https://gts3.org
gts3.org (SSLab@Gatech)
Find the ideal fuzz targets in a Rust codebase

Siderophile Siderophile finds the "most unsafe" functions in your Rust codebase, so you can fuzz them or refactor them out entirely. It checks the cal

Trail of Bits 162 Dec 23, 2022
A cryptographically verifiable code review system for the cargo (Rust) package manager.

image credit cargo-crev A cryptographically verifiable code review system for the cargo (Rust) package manager. Introduction Crev is a language and ec

crev - Code REView system 1.8k Jan 5, 2023
loc is a tool for counting lines of code. It's a rust implementation of cloc, but it's more than 100x faster.

2019-10-07: I really haven't been on top of accepting pull requests or looking at issues, you guy should definitely look at SCC. It's faster and more

cgag 2.1k Jan 2, 2023
A crate to help you copy things into raw buffers without invoking spooky action at a distance (undefined behavior).

?? presser Utilities to help make copying data around into raw, possibly-uninitialized buffers easier and safer. presser can help you when copying dat

Embark 131 Mar 16, 2023
A set of utilities to better enable polymorphic behavior in Rust

Polymorph A set of utilities to better enable polymorphic behavior in Rust. Introduction Rust is a wonderful language, with a strong emphasis on fast,

null 3 Mar 17, 2022
A Rust compiler plugin and support library to annotate overflow behavior

overflower This project contains a compiler plugin and supporting library to allow the programmer to annotate their code to declare how integer overfl

null 104 Nov 28, 2022
Rust implementation of behavior trees.

Bonsai ็›†ๆ ฝ Rust implementation of Behavior Trees Contents Quick intro to Behavior Trees Concepts Examples Development Guide Kanban Board Honorable Ment

Kristoffer Rakstad Solberg 119 Dec 27, 2022
QueingSimulator is an application that can be used to build intuitions about behavior of synchronous request/reply systems

Queueing Simulator QueingSimulator is an application that can be used to build intuitions about behavior of synchronous request/reply systems (such as

Joe Magerramov 7 Sep 11, 2022
Fox Ear is a Linux process behavior trace tool powered by eBPF

Fox Ear Fox Ear is a Linux process behavior trace tool powered by eBPF. Banner image by Birger Strahl on Unsplash. Features Log process and its subpro

Rui Li 77 Dec 5, 2022
Macro to customize the behavior of `?`

::custom-try Macro to customize the behavior of ? Examples use ::custom_try::custom_try; #[repr(transparent)] pub struct FfiResult { pub status_c

Daniel Henry-Mantilla 5 Dec 23, 2022
Natural language detection library for Rust. Try demo online: https://www.greyblake.com/whatlang/

Whatlang Natural language detection for Rust with focus on simplicity and performance. Content Features Get started Documentation Supported languages

Sergey Potapov 805 Dec 28, 2022
Starlight is a JS engine in Rust which focuses on performance rather than ensuring 100% safety of JS runtime.

starlight Starlight is a JS engine in Rust which focuses on performance rather than ensuring 100% safety of JS runtime. Features Bytecode interpreter

null 453 Dec 31, 2022
๐Ÿ‘„ The most accurate natural language detection library in the Rust ecosystem, suitable for long and short text alike

Table of Contents What does this library do? Why does this library exist? Which languages are supported? How good is it? Why is it better than other l

Peter M. Stahl 569 Jan 3, 2023
Face detection library for the Rust programming language

Rustface SeetaFace detection library for the Rust programming language Example of demo program output SEETAFACE C++ โ€“ Github repository for the origin

Andrei Tomashpolskiy 323 Dec 27, 2022
A rust web framework with safety and speed in mind.

darpi A web api framework with speed and safety in mind. One of the big goals is to catch all errors at compile time, if possible. The framework uses

null 32 Apr 11, 2022
A cross-platform GUI library for Rust focused on simplicity and type-safety

A cross-platform GUI library for Rust, inspired by Elm

Hรฉctor Ramรณn 17.5k Jan 8, 2023
Time series anomaly detection for Rust

AnomalyDetection.rs Time series AnomalyDetection for Rust Learn how it works Installation Add this line to your applicationโ€™s Cargo.toml under [depend

Andrew Kane 6 Nov 21, 2022
2 and 3-dimensional collision detection library in Rust.

2D Documentation | 3D Documentation | User Guide | Forum โš ๏ธ **This crate is now passively-maintained. It is being superseded by the Parry project.** โš 

dimforge 914 Dec 24, 2022
Rust port of the extended isolation forest algorithm for anomaly detection

Extended Isolation Forest This is a rust port of the anomaly detection algorithm described in Extended Isolation Forest and implemented in https://git

Nico Mandery 6 Oct 21, 2022