| Commit message (Collapse) | Author | Age | Files | Lines |
| |\
| |
| |
| |
| |
| |
| | |
proto: Avoid sending DESTROY if we have received DESTROY
Closes #2646 and #2648
See merge request tpo/core/arti!4312
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This extends the `destroy_from_client()` test to also check that a
DESTROY received from the client (or, more generally speaking, from the
"inbound channel") is actually forwarded to the next hop.
The reason the `assert_destroy_sent()` assertion is commented out is
specified in the TODO that precedes it (tldr: testing the DESTROY
behaviour involves both the channel reactor and the circuit reactor, and
our test setup is currently quite limited, in that it doesn't actually
exercise the right channel reactor code paths for the *inbound*
channel). I plan to address this soon.
|
| | |
| |
| |
| | |
I am about to need this in a test.
|
| | | |
|
| | |
| |
| |
| | |
This fixes an old bad copy-paste that I've just noticed.
|
| | |
| |
| |
| | |
This adds an example suggested by opara.
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
We need this because the channel reactor now only sends DESTROY for
circuits that are still in the circ map (and we are about to test this
behaviour, so we need the circuit map to actually have an entry for our
test circuit).
Initially, these tests were meant to test the circuit reactor in
isolation, but they've gradually grown more complex, and now require
a semi-working channel reactor. In the long run, I think I'd like to:
* change the tests from `tor_proto::relay::reactor` to use a proper
relay channel reactor as opposed to a `working_dummy_channel()`, and
to initialize a circuit through the normal means, namely by sending
a CREATE2 through the channel reactor (naturally, this "proper relay
channel reactor" still wouldn't be connected to the network). These
will test the integration between the channel and the circuit
reactor, as well as the circuit reactor behaviour
* add new, implementation-agnostic tests for the generic multi-reactor
system. These will use a mock channel reactor
|
| | |
| |
| |
| |
| |
| | |
The relay circuit reactor tests will soon need the ability to send
control messages (for allocating a circuit id for the circuit reactor
under test).
|
| | | |
|
| | |
| |
| |
| |
| | |
Now that we no longer respond to DESTROY by sending a DESTROY ourselves,
these tests need to be updated.
|
| | |
| |
| |
| | |
This test simulates the *next hop* sending us a DESTROY.
|
| |/
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This change prevents the channel reactor from sending DESTROY cells on
already-closed (or non-existent) circuits. Upon receiving a DESTROY
cell, the channel reactor removes the corresponding circuit entry, if
any, from its circmap. It then passes the DESTROY to the circuit reactor
for handling. The circuit reactor handles it by shutting down, and
calling `Channel::close_circuit()` on drop. Previously, this would
unconditionally send a DESTROY cell, which caused #2648 and #2646.
This affects both clients and relays, because both circuit reactors call
`Channel::close_circuit()` on drop.
Closes #2648, #2646
|
| |\
| |
| |
| |
| | |
tor-persist: fix display of Target path(s).
See merge request tpo/core/arti!4317
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This patch changes how display works on our Target struct. Currently,
log messages generated by Arti Relay looks like this:
`tor_persist::load_store: storing
"/path/to/arti-relay/state"/"circuit_timeouts.json"`
With this patch applies it instead looks like this:
`tor_persist::load_store: storing
"/path/to/arti-relay/state/circuit_timeouts.json"`
With this change we ensure that the correct delimiter between the
directory and the filename is used (on Unix it's "/", but on Windows
it's "\") and we also avoid the added "" around both the directory and
filename.
|
| |\ \
| | |
| | |
| | |
| | |
| | |
| | | |
CI: Reduce disk usage after job ends
Closes #2669 and #2672
See merge request tpo/core/arti!4316
|
| | | | |
|
| | | | |
|
| | |/ |
|
| |\ \
| |/
|/|
| |
| | |
maint/cargo-audit: Bump h2 to address RUSTSEC-2026-0258
See merge request tpo/core/arti!4318
|
| |/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Older versions of `h2` have a bug that causes empty HTTP/2 DATA frames
to be queued without limit if the streams are not read from quickly
enough.
According to the [hyper advisory]:
> To determine if vulnerable, all these things must be true:
>
> * You are using HTTP/2, either as a server or a client.
> * Your application does not fully drain incoming request
> or response bodies (for example, a proxy applying backpressure,
> or a client that delays reading the body).
> * The direct remote peer is malicious and intentionally
> sends large numbers of empty DATA frames.
To my knowledge, the only non-example crates that use `hyper` are `arti`
and `tor-dirserver`. Both of them run HTTP/1.1 servers, so I don't
believe we're affected by the `h2` bug.
[hyper advisory]: https://github.com/hyperium/hyper/security/advisories/GHSA-q83h-524g-xf6h
|
| |\
| |
| |
| |
| | |
refactor: fail when all addresses bind fail
See merge request tpo/core/arti!4309
|
| | | |
|
| |\ \
| | |
| | |
| | |
| | | |
arti: refactor reload_cfg in preparation for RPC work
See merge request tpo/core/arti!4310
|
| | | |
| | |
| | | |
Co-authored-by: gabi-250 <[email protected]>
|
| | | | |
|
| | | |
| | |
| | |
| | | |
Code movement only.
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Right now this just helps us keep the parts of the
configuration-reloading logic in one place, and clarifies what needs
to be owned by the watcher thread and what doesn't.
Moving forward, this will help make the configuration something
that RPC can inspect and change.
|
| | | |
| | |
| | |
| | |
| | | |
(If you drop a FileWatcher, the thread that makes it works will
exit.)
|
| |\ \ \
| |_|/
|/| |
| | |
| | | |
Update the relay circuit reactor docs
See merge request tpo/core/arti!4313
|
| | | | |
|
| | | |
| | |
| | |
| | |
| | |
| | | |
There is no `BackwardReactor` heading, because there isn't that much to
say about it (it moves `RELAY` cells in the opposite direction, and
rejects RELAY_EARLY and PADDING_NEGOTIATE).
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| |/ / |
|
| |\ \
| | |
| | |
| | |
| | | |
Add take_until_with_limit methods for better developer experience, modified error handling, changed take_until to use take_until_with_limit and added tests.
See merge request tpo/core/arti!4082
|
| | | |
| | |
| | |
| | |
| | | |
These methods provide modified error handling,
changed take_until to use take_until_with_limit and added tests.
|
| |\ \ \
| | | |
| | | |
| | | |
| | | | |
refactor(tor-hsclient): use TaskHandle for expiring circuit task
See merge request tpo/core/arti!4290
|
| | | | | |
|
| |\ \ \ \
| |/ / /
|/| | |
| | | |
| | | |
| | | |
| | | | |
proto: Silently drop DESTROY/RELAY/CREATED cells on unknown circuits
Closes #2655
See merge request tpo/core/arti!4301
|
| | | | |
| | | |
| | | |
| | | | |
And say why it's okay to do so.
|
| | | | |
| | | |
| | | |
| | | |
| | | | |
These are no longer causing the channel reactor to shut down, so we need
to update this test accordingly.
|
| | | | | |
|
| | | | | |
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
If we're a relay, we need to tolerate CREATED* with unrecognized
CircIds: for example, if we time out[^1] while trying to extend the circuit
by another hop, we will send a DESTROY to the extending hop, which can
race with the CREATED* response. In other words, a CREATED* cell
arriving on a closed circuit shouldn't be treated as a protocol
violation.
There are, however, a few cases where a CREATED* with an unknown CircId
*is* a protocol violation (and probably *should* cause us to close down
the channel):
* if the CREATED* is moving in the forward direction (towards the
exit), or
* if we have not previously sent a CREATE* with that particular CircId
As before, distinguishing these from the "closed circuit" case above
would involve some tricky logic, and the benefits are unclear, while the
downsides of closing a channel when we shouldn't have are significant.
It seems better to just drop these cells for now.
Closes #2655
[^1]: at the time of writing, we don't have timeouts for the circuit
extension logic, so what I've described here cannot actually happen
today. However, we *do* have a TODO for it, so the time outs I've
described here will be implemented at some point
|
| | | | | |
|