Index: generic/src/ipc/sysipc.c
===================================================================
--- generic/src/ipc/sysipc.c	(revision f58af46f91b507488f711011ceb5691c4a7358d3)
+++ generic/src/ipc/sysipc.c	(revision d9cf9d5f989f341220cb57edb35733010e85153c)
@@ -40,4 +40,5 @@
 #include <print.h>
 #include <syscall/copy.h>
+#include <security/cap.h>
 
 #define GET_CHECK_PHONE(phone,phoneid,err) { \
@@ -491,6 +492,9 @@
 __native sys_ipc_register_irq(__native irq, irq_code_t *ucode)
 {
+	if (!(cap_get(TASK) & CAP_IRQ_REG))
+		return EPERM;
+
 	if (irq >= IRQ_COUNT)
-		return -ELIMIT;
+		return (__native) ELIMIT;
 
 	irq_ipc_bind_arch(irq);
@@ -502,6 +506,9 @@
 __native sys_ipc_unregister_irq(__native irq)
 {
+	if (!(cap_get(TASK) & CAP_IRQ_REG))
+		return EPERM;
+
 	if (irq >= IRQ_COUNT)
-		return -ELIMIT;
+		return (__native) ELIMIT;
 
 	ipc_irq_unregister(&TASK->answerbox, irq);
