内存管理API之memdup_user
2018-01-29 08:25
477 查看
void *memdup_user(const void __user *src, size_t len)的作用是从copy user space的从src开始长度为len的一段内存到kernel space 其源码分析如下: void *memdup_user(const void __user *src, size_t len) { void *p; /* * Always use GFP_KERNEL, since copy_from_user() can sleep and * cause pagefault, which makes it pointless to use GFP_NOFS * or GFP_ATOMIC. */ #由于copy_from_user 可能睡眠,因此kernel space中申请内存是用的是GFP_KERNEL p = kmalloc_track_caller(len, GFP_KERNEL); #p为null的话,表示申请内存失败,直接返回no memcpy if (!p) return ERR_PTR(-ENOMEM); #申请到内存后通过copy_from_user 将用户空间指针src中的内容copy到内核空间指针p中,如果copy出错的话,释放 #掉内核指针p,并返回EFAULT if (copy_from_user(p, src, len)) { kfree(p); return ERR_PTR(-EFAULT); } #正常情况下p不为null,且已经包含从用户指针中的内容 return p; }
相关文章推荐
- 内存管理API之get_user_pages
- 内存管理API之get_user_pages_fast
- 内存管理API之vmalloc_user
- Memory Allocation API In Linux Kernel && Linux Userspace、kmalloc vmalloc Difference、Kernel Large Section Memory Allocation
- Windows内存管理API的体系结构
- 内存管理API之do_mmap
- 内存管理API之mempool_alloc
- 内存管理API之page_cache_get_speculative
- 【API】GetUserNameEx 函数使用
- 内存管理API
- How to constraint user processing but allow API when processing constraints are enabled
- UserWarning: Update your `Model` call to the Keras 2 API: `Model(outputs=Tensor("lo..., inputs=[<tf.
- iOS Dropbox API “not currently support by MPOAuthConnection” occur after changing user
- API NetUserChangePassword Well, sind1
- 内存管理API之page_address
- 使用.NET Mobile API即51Degrees.mobi检测User-Agent
- 内存管理API之kmem_cache_create
- 利用Liferay Portal 中的API获取User 的途径之一
- UserMedia API:使用浏览器访问摄像头拍照
- LINUX GPIO Kernel/User API