diff --git a/changes/bug17401 b/changes/bug17401
new file mode 100644
index 0000000000000000000000000000000000000000..a22f79c431ea52fd3a8d3f9b034dc555beb5e620
--- /dev/null
+++ b/changes/bug17401
@@ -0,0 +1,3 @@
+  o Major bugfixes (correctness):
+    - Fix a use-after-free bug in validate_intro_point_failure().
+      Fixes bug 17401; bugfix on 0.2.7.3-rc.
diff --git a/src/or/rendcache.c b/src/or/rendcache.c
index a75028e7f7764231dc775ca45c25b7f367389a52..e377e9ad81b7a3cdcfd6a10ed5cead7c3f4e8bf3 100644
--- a/src/or/rendcache.c
+++ b/src/or/rendcache.c
@@ -418,8 +418,8 @@ validate_intro_point_failure(const rend_service_descriptor_t *desc,
       SMARTLIST_DEL_CURRENT(desc->intro_nodes, intro);
       /* Keep it for our new entry. */
       digestmap_set(new_entry->intro_failures, (char *) identity, ent_dup);
+      /* Only free it when we're done looking at it. */
       rend_intro_point_free(intro);
-
       continue;
     }
   } SMARTLIST_FOREACH_END(intro);