下面这三个分配的都是kernel内存,不是用户空间的内存
char *kstrdup(const char *s, gfp_t gfp);
功能: 分配一块内存空间(kmalloc + GFP_KERNEL),然后将s指向的字符串拷贝到这块内存,返回该内存的首地址
void *kmemdup(const void *src, size_t len, gfp_t gfp);
功能:分配一块长度为len的内存(kmalloc+GFP_KERNEL),然后将src到(src + len)内存的内容copy到新分配的内存,返回该内存的首地址
void *memdup_user(const void __user *src, size_t len);
功能: 分配一块长度为len的内存(kmalloc + GFP_KERNEL),然后将用户空间的地址src到(src+len)范围的内存使用copy_from_user的方式拷贝到新分配的内存中,返回新分配的内存的首地址