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;

)

Welcome!

It looks like you're new here. Sign in or register to get started.
Sign In

Comments

  • Posts: 501
    Please provide the entire kernel module code if possible.
  • 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?
  • 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 :)

Welcome!

It looks like you're new here. Sign in or register to get started.
Sign In

Welcome!

It looks like you're new here. Sign in or register to get started.
Sign In

Categories

Upcoming Training