Index: uspace/app/taskdump/taskdump.c
===================================================================
--- uspace/app/taskdump/taskdump.c	(revision d4b7b291736584f69f42f9171ffa7a62fe5ee6c7)
+++ uspace/app/taskdump/taskdump.c	(revision 6bb136b2fbaaf208b1d7f318f3ef4951346fdf35)
@@ -56,4 +56,5 @@
 
 #define LINE_BYTES 16
+#define STACK_FRAMES_MAX 20
 
 static async_sess_t *sess;
@@ -327,4 +328,5 @@
 errno_t td_stacktrace(uintptr_t fp, uintptr_t pc)
 {
+	int cnt = 0;
 	uintptr_t nfp;
 	stacktrace_t st;
@@ -335,5 +337,5 @@
 	st.ops = &td_stacktrace_ops;
 
-	while (stacktrace_fp_valid(&st, fp)) {
+	while (cnt++ < STACK_FRAMES_MAX && stacktrace_fp_valid(&st, fp)) {
 		sym_pc = fmt_sym_address(pc);
 		printf("  %p: %s\n", (void *) fp, sym_pc);
Index: uspace/lib/c/generic/stacktrace.c
===================================================================
--- uspace/lib/c/generic/stacktrace.c	(revision d4b7b291736584f69f42f9171ffa7a62fe5ee6c7)
+++ uspace/lib/c/generic/stacktrace.c	(revision 6bb136b2fbaaf208b1d7f318f3ef4951346fdf35)
@@ -41,4 +41,6 @@
 #include <io/kio.h>
 
+#define STACK_FRAMES_MAX 20
+
 static errno_t stacktrace_read_uintptr(void *arg, uintptr_t addr, uintptr_t *data);
 
@@ -56,4 +58,5 @@
     uintptr_t pc)
 {
+	int cnt = 0;
 	stacktrace_t st;
 	uintptr_t nfp;
@@ -63,5 +66,5 @@
 	st.ops = ops;
 
-	while (stacktrace_fp_valid(&st, fp)) {
+	while (cnt++ < STACK_FRAMES_MAX && stacktrace_fp_valid(&st, fp)) {
 		ops->printf("%p: %p()\n", (void *) fp, (void *) pc);
 		rc =  stacktrace_ra_get(&st, fp, &pc);
