diff --git a/changes/bug17827 b/changes/bug17827
new file mode 100644
index 0000000000000000000000000000000000000000..04cd3b5977fec994f91257300627c79f7779164f
--- /dev/null
+++ b/changes/bug17827
@@ -0,0 +1,3 @@
+  o Minor bugfixes (compilation):
+    - Fix backtrace compilation on FreeBSD. Fixes bug 17827; bugfix on
+      tor-0.2.5.2-alpha.
diff --git a/src/common/backtrace.c b/src/common/backtrace.c
index a2d5378b204e50d08ba80067e30a23210637add1..8d544ed704bc3d2f54b4f27819851f8af8ea1a2d 100644
--- a/src/common/backtrace.c
+++ b/src/common/backtrace.c
@@ -62,16 +62,16 @@ static tor_mutex_t cb_buf_mutex;
  * ucontext_t structure.
  */
 void
-clean_backtrace(void **stack, int depth, const ucontext_t *ctx)
+clean_backtrace(void **stack, size_t depth, const ucontext_t *ctx)
 {
 #ifdef PC_FROM_UCONTEXT
 #if defined(__linux__)
-  const int n = 1;
+  const size_t n = 1;
 #elif defined(__darwin__) || defined(__APPLE__) || defined(__OpenBSD__) \
   || defined(__FreeBSD__)
-  const int n = 2;
+  const size_t n = 2;
 #else
-  const int n = 1;
+  const size_t n = 1;
 #endif
   if (depth <= n)
     return;
@@ -89,9 +89,9 @@ clean_backtrace(void **stack, int depth, const ucontext_t *ctx)
 void
 log_backtrace(int severity, int domain, const char *msg)
 {
-  int depth;
+  size_t depth;
   char **symbols;
-  int i;
+  size_t i;
 
   tor_mutex_acquire(&cb_buf_mutex);
 
@@ -120,7 +120,7 @@ static void
 crash_handler(int sig, siginfo_t *si, void *ctx_)
 {
   char buf[40];
-  int depth;
+  size_t depth;
   ucontext_t *ctx = (ucontext_t *) ctx_;
   int n_fds, i;
   const int *fds = NULL;
@@ -174,7 +174,7 @@ install_bt_handler(void)
      * libc has pre-loaded the symbols we need to dump things, so that later
      * reads won't be denied by the sandbox code */
     char **symbols;
-    int depth = backtrace(cb_buf, MAX_DEPTH);
+    size_t depth = backtrace(cb_buf, MAX_DEPTH);
     symbols = backtrace_symbols(cb_buf, depth);
     if (symbols)
       free(symbols);
diff --git a/src/common/backtrace.h b/src/common/backtrace.h
index a9151d795607c172e8f49af0f85079187cf81018..838e18eedd209c9ffac5a41fb7e667ec3b4b3bf9 100644
--- a/src/common/backtrace.h
+++ b/src/common/backtrace.h
@@ -13,7 +13,7 @@ void clean_up_backtrace_handler(void);
 #ifdef EXPOSE_CLEAN_BACKTRACE
 #if defined(HAVE_EXECINFO_H) && defined(HAVE_BACKTRACE) && \
   defined(HAVE_BACKTRACE_SYMBOLS_FD) && defined(HAVE_SIGACTION)
-void clean_backtrace(void **stack, int depth, const ucontext_t *ctx);
+void clean_backtrace(void **stack, size_t depth, const ucontext_t *ctx);
 #endif
 #endif
 
diff --git a/src/common/sandbox.c b/src/common/sandbox.c
index b995762738ae7719a35ff4f07af98c3c4cddd477..3a9f2a1898ad40119869694d433e5930734b120a 100644
--- a/src/common/sandbox.c
+++ b/src/common/sandbox.c
@@ -1598,7 +1598,7 @@ sigsys_debugging(int nr, siginfo_t *info, void *void_context)
   const char *syscall_name;
   int syscall;
 #ifdef USE_BACKTRACE
-  int depth;
+  size_t depth;
   int n_fds, i;
   const int *fds = NULL;
 #endif