Index: generic/src/security/cap.c
===================================================================
--- generic/src/security/cap.c	(revision 2bb8648e46a151efe13c3bb8385ced857a95758d)
+++ generic/src/security/cap.c	(revision 4ddeace5764cff68ff26f294be7ead55e4d70796)
@@ -113,7 +113,12 @@
 		return (__native) ENOENT;
 	}
+	
+	spinlock_lock(&t->lock);
+	cap_set(t, cap_get(t) | caps);
+	spinlock_unlock(&t->lock);
+	
 	spinlock_unlock(&tasks_lock);
 	
-	cap_set(t, cap_get(t) | caps);
+
 	
 	interrupts_restore(ipl);	
@@ -150,5 +155,4 @@
 		return (__native) ENOENT;
 	}
-	spinlock_unlock(&tasks_lock);
 
 	/*
@@ -158,10 +162,15 @@
 	 */
 	if (!(cap_get(TASK) & CAP_CAP) || !(t == TASK)) {
+		spinlock_unlock(&tasks_lock);
 		interrupts_restore(ipl);
 		return (__native) EPERM;
 	}
+	
+	spinlock_lock(&t->lock);
+	cap_set(t, cap_get(t) & ~caps);
+	spinlock_unlock(&t->lock);
 
-	cap_set(t, cap_get(t) & ~caps);
-	
+	spinlock_unlock(&tasks_lock);
+
 	interrupts_restore(ipl);
 	return 0;
