Linux.com

Home Linux Community Forums Programming and Development Kernel Development copy_from_user does not copy from process-heap

copy_from_user does not copy from process-heap

Link to this post 16 Aug 09

Hello all,

I need a positive reply from you.

I want to copy the user-process-heap to the kernel space memory.
For that, I wrote the following code but it does not copy.

---------------- code --------------
unsigned long length_of_heap_vma = < length of vma pointing to process-heap > ;
void * kernel_mem = (void *) kmalloc(length_of_heap_vma,GFP_KERNEL);

unsigned long bytes_not_copied = 0;


bytes_not_copied = copy_from_user(kernel_mem,(void *)vm->vma_start,length_of_heap_vma);//vm points to process heap
printk("failed to copy %ld bytes.",bytes_not_copied); //it always displays a non-zero value.

---------------- end of code --------

now the PROBLEM is that - the code successfuly compiles, but when I execute it, it copies not a single byte and
bytes_not-copied always becomes equal to length_of_heap_vma. No compile-time or execution-time error occurs.

(note: my process has the following dynamic memory in user-part:
int * p = (int*) malloc(5 * sizeof(int));
for(i=0;i<5;i++)
p= i;
)

Link to this post 17 Aug 09

Please provide the entire kernel module code if possible.

Link to this post 24 Sep 09

Hi...

There is a chance you're not copying from the right user space address. May I know how do you determine the source address in the related user process address space you want to copy from?

Link to this post 02 Mar 10

Hi

void * kernel_mem = (void *) kmalloc(length_of_heap_vma,GFP_KERNEL);
i think this line is the problem

make void * kernel_mem to char * kernel_mem


it should work . Eagerly waiting for your reply :)

Who we are ?

The Linux Foundation is a non-profit consortium dedicated to the growth of Linux.

More About the foundation...

Frequent Questions

Join / Linux Training / Board