Welcome to the Linux Foundation Forum!

copy_from_user does not copy from process-heap


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++)<br />
p[i]= i;



  • woboyle
    woboyle Posts: 501
    Please provide the entire kernel module code if possible.
  • mulyadi.santosa

    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?
  • veeraiyan

    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 :)


Upcoming Training