--- a/src/vectoring/ifxmips_vectoring.c
+++ b/src/vectoring/ifxmips_vectoring.c
@@ -298,7 +298,7 @@ static int proc_write_dbg(struct file *file, const char __user *buf, size_t coun
         DBG_ENABLE_MASK_ALL
     };
 
-    char str[2048];
+    char *str;
     char *p;
 
     int len, rlen;
@@ -306,6 +306,10 @@ static int proc_write_dbg(struct file *file, const char __user *buf, size_t coun
     int f_enable = 0;
     int i;
 
+    str = kcalloc(2048, sizeof(*str), GFP_KERNEL);
+    if (!str)
+        return -ENOMEM;
+
     len = count < sizeof(str) ? count : sizeof(str) - 1;
     rlen = len - copy_from_user(str, buf, len);
     while ( rlen && str[rlen - 1] <= ' ' )
@@ -365,6 +369,8 @@ static int proc_write_dbg(struct file *file, const char __user *buf, size_t coun
         }
     }
 
+    kfree(str);
+
     return count;
 }
 
--- a/src/vectoring/ifxmips_vectoring_test.c
+++ b/src/vectoring/ifxmips_vectoring_test.c
@@ -3,6 +3,7 @@
 #include <linux/module.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
+#include <linux/slab.h>
 
 #include "ifxmips_vectoring_stub.h"
 
@@ -46,13 +47,17 @@ static int proc_write_vectoring(struct file *file, const char __user *buf, size_
 {
     char *p;
     int len;
-    char local_buf[1024];
+    char *local_buf;
 
     unsigned long pkt_len;
     int ret;
     unsigned long sys_flag;
     unsigned long start, end;
 
+    local_buf = kcalloc(1024, sizeof(*local_buf), GFP_KERNEL);
+    if (!local_buf)
+        return -ENOMEM;
+
     len = sizeof(local_buf) < count ? sizeof(local_buf) - 1 : count;
     len = len - copy_from_user(local_buf, buf, len);
     local_buf[len] = 0;
@@ -81,6 +86,8 @@ static int proc_write_vectoring(struct file *file, const char __user *buf, size_
     else
         printk("echo send <size> > /proc/driver/vectoring_test\n");
 
+    kfree(local_buf);
+
     return count;
 }
 
