Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Actix-X safety dance #65

Open
Dowwie opened this issue Feb 21, 2020 · 8 comments
Open

Actix-X safety dance #65

Dowwie opened this issue Feb 21, 2020 · 8 comments

Comments

@Dowwie
Copy link

Dowwie commented Feb 21, 2020

Is anyone up for an unsafe challenge? It is my understanding that the people around these parts are capable of taming the unsafe beast in Rust code. I wanted to share with you an opportunity to finally address long-running concerns about unsafe code in the actix projects. Contributors want to get rid of these unsafe. It is a priority. We are all in agreement that it is an issue. Now, contributors are resolving whatever they can, and trying to figure out how to do so as if performing a minimally invasive surgical procedure. One of the more popular unsafe is receiving attention now: actix/actix-net#98 With this benchmarking PR, people can now understand the impact that refactoring will have. If this interests anyone, please feel free to get involved!

@tarcieri
Copy link
Member

See also: actix/actix-web#1296

@Shnatsel
Copy link
Member

A few pull requests with safety improvements have landed recently and should ship in version 3.0:

actix/actix-net#158
actix/actix-net#161
actix/actix-web#1614
actix/actix-net#91

However, some unsafe code remains and still needs to be audited for soundness.

@alex
Copy link
Member

alex commented Aug 17, 2020

@Shnatsel do any of these rise to the level of needing an entry in the vuln db?

@Shnatsel
Copy link
Member

Unsound Cell impls allow multiple mutable references to the same data, which may lead to pretty much arbitrary memory corruption, including use-after-free. However, it requires somewhat contrived code on the caller side. I'd say it deserves some kind of entry, but I'm not sure whether it should be for a warning or a hard error.

I admit I cannot follow the other two well enough to judge.

@Shnatsel
Copy link
Member

actix-web 3.0.0 with notable safety fixes has been released today.

Here's a list of the actix-* crates that still use unsafe code:

  • actix-http: 13 unsafe blocks, all are commented and look reasonable at a glance. (Some of the benchmarking code looks sketchy, but who cares - it's not in the build anyway). I think use of bytemuck could eliminate at least one unsafe fn in there.
  • actix-utils: 9 unsafe blocks, no comments on why they're sound. Judging by this comment from one of the Actix org members, a PR with comments explaining why they're sound and/or debug assertions would be appreciated.
  • actix-router: 1 unsafe block, commented
  • actix-codec: cargo-geiger shows 10 unsafe expressions but I can't see them in actix git, might be a bug
  • actix-service: some unsafe code, but cargo-geiger reports that it's not used in the build (likely disabled by a feature)
  • awc: one unsafe fn without any local uses

So the most valuable audit target seems to be actix-utils

@danielhenrymantilla
Copy link

cargo-geiger shows 10 unsafe expressions but I can't see them in actix git, might be a bug

I've run it and for me it shows them for cargo-geiger 0.2.0, not 0.3.0

@paulocsanz
Copy link

paulocsanz commented Sep 11, 2020

It seems most bugs 3.0 went through before release were related to mem-leaks, which are not memory errors and can be triggered with safe code. Buuut it seems like a great start to understanding how even a community that's heavily focused on safety can have problems with mem-leaks and maybe we eventually can understand better how to prevent them with cargo tools.

Of course it's a hard task, but it's a pattern that seems to be on the rise. No UB, but struggling with mem-leaks.

@Shnatsel
Copy link
Member

Shnatsel commented Mar 6, 2021

Versions in the latest git have even less unsafe code than the 3.0 release

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants