c
< 	kern_buf = memdup_user(buf, nbytes);
---
> 	kern_buf = vzalloc(nbytes);
> 	if (!kern_buf) {
> 		return -ENOMEM;
> 	}
> 	if (copy_from_user(kern_buf, buf, nbytes)) {
> 		vfree(kern_buf);
> 		return -EFAULT;
> 	}
