[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor/master] When counting memory from closing a connection, count the dir conn too
commit ec59167cae1f5b3057ed722857d78ec78239e991
Author: Nick Mathewson <nickm@xxxxxxxxxxxxxx>
Date: Mon Aug 18 15:21:50 2014 -0400
When counting memory from closing a connection, count the dir conn too
Fix part of bug 11972
---
changes/bug11792 | 5 +++++
src/or/circuitlist.c | 25 ++++++++++++++++++-------
2 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/changes/bug11792 b/changes/bug11792
new file mode 100644
index 0000000..1d38189
--- /dev/null
+++ b/changes/bug11792
@@ -0,0 +1,5 @@
+ o Minor features (security, OOM):
+ - When closing an edge connection because we've run out of memory,
+ also count the amount of memory that any tunnelled directory
+ connection attached to that connection had consumed. Part of
+ ticket 11792.
\ No newline at end of file
diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c
index f3a8350..9aeb3eb 100644
--- a/src/or/circuitlist.c
+++ b/src/or/circuitlist.c
@@ -1799,6 +1799,21 @@ marked_circuit_free_cells(circuit_t *circ)
cell_queue_clear(& TO_OR_CIRCUIT(circ)->p_chan_cells);
}
+static size_t
+marked_circuit_single_conn_free_bytes(connection_t *conn)
+{
+ size_t result = 0;
+ if (conn->inbuf) {
+ result += buf_allocation(conn->inbuf);
+ buf_clear(conn->inbuf);
+ }
+ if (conn->outbuf) {
+ result += buf_allocation(conn->outbuf);
+ buf_clear(conn->outbuf);
+ }
+ return result;
+}
+
/** Aggressively free buffer contents on all the buffers of all streams in the
* list starting at <b>stream</b>. Return the number of bytes recovered. */
static size_t
@@ -1807,13 +1822,9 @@ marked_circuit_streams_free_bytes(edge_connection_t *stream)
size_t result = 0;
for ( ; stream; stream = stream->next_stream) {
connection_t *conn = TO_CONN(stream);
- if (conn->inbuf) {
- result += buf_allocation(conn->inbuf);
- buf_clear(conn->inbuf);
- }
- if (conn->outbuf) {
- result += buf_allocation(conn->outbuf);
- buf_clear(conn->outbuf);
+ result += marked_circuit_single_conn_free_bytes(conn);
+ if (conn->linked_conn) {
+ result += marked_circuit_single_conn_free_bytes(conn->linked_conn);
}
}
return result;
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits