--- /dev/null
+--- uml-2.4/arch/um/kernel/process_kern.c.orig 2004-04-15 23:26:49.000000000 +0300
++++ uml-2.4/arch/um/kernel/process_kern.c 2004-04-15 23:49:38.312250576 +0300
+@@ -16,6 +16,7 @@
+ #include "linux/module.h"
+ #include "linux/init.h"
+ #include "linux/capability.h"
++#include "linux/vmalloc.h"
+ #include "asm/unistd.h"
+ #include "asm/mman.h"
+ #include "asm/segment.h"
+@@ -279,6 +280,11 @@ void *um_kmalloc(int size)
+ return(kmalloc(size, GFP_KERNEL));
+ }
+
++void *um_vmalloc(int size)
++{
++ return(vmalloc(size));
++}
++
+ void *um_kmalloc_atomic(int size)
+ {
+ return(kmalloc(size, GFP_ATOMIC));
+--- uml-2.4/arch/um/main.c.orig 2004-04-15 23:58:28.786606216 +0300
++++ uml-2.4/arch/um/main.c 2004-04-15 23:53:32.706617216 +0300
+@@ -161,7 +161,7 @@ extern void *__real_malloc(int);
+ void *__wrap_malloc(int size)
+ {
+ if(CAN_KMALLOC())
+- return(um_kmalloc(size));
++ return(um_vmalloc(size));
+ else
+ return(__real_malloc(size));
+ }
+@@ -179,7 +179,7 @@ extern void __real_free(void *);
+
+ void __wrap_free(void *ptr)
+ {
+- if(CAN_KMALLOC()) kfree(ptr);
++ if(CAN_KMALLOC()) vfree(ptr);
+ else __real_free(ptr);
+ }
+
+--- uml-2.4/arch/um/include/user.h.orig 2004-04-15 23:41:57.000000000 +0300
++++ uml-2.4/arch/um/include/user.h 2004-04-15 23:41:34.000000000 +0300
+@@ -12,6 +12,7 @@ extern void schedule(void);
+ extern void *um_kmalloc(int size);
+ extern void *um_kmalloc_atomic(int size);
+ extern void kfree(void *ptr);
++extern void vfree(void *ptr);
+ extern int in_aton(char *str);
+ extern int open_gdb_chan(void);
+
+
+