| 函数逻辑报告 | 
| Source Code: ipc\shm.c | Create Date:2022-07-27 18:23:05 | 
| Last Modify:2020-03-17 22:58:32 | Copyright©Brick | 
| 首页 | 函数Tree | 
| 注解内核,赢得工具 | 下载SCCT | English | 
函数名称:shmctl_do_lock
函数原型:static int shmctl_do_lock(struct ipc_namespace *ns, int shmid, int cmd)
返回类型:int
参数:
| 类型 | 参数 | 名称 | 
|---|---|---|
| struct ipc_namespace * | ns | |
| int | shmid | |
| int | cmd | 
| 1071 | shp等于shm_obtain_object_check(ns, shmid) | 
| 1072 | 如果是错误则 | 
| 1074 | 转到:out_unlock1 | 
| 1077 | audit_ipc_obj( & (shm_perm)) | 
| 1078 | err等于security_shm_shmctl( & shm_perm, cmd) | 
| 1079 | 如果err则转到:out_unlock1 | 
| 1082 | ipc_lock_object( & shm_perm) | 
| 1087 | 转到:out_unlock0 | 
| 1091 | euid等于current_euid() | 
| 1096 | 转到:out_unlock0 | 
| 1098 | 如果cmd恒等于super user shmctl commands 且非rlimit(RLIMIT_MEMLOCK)则 | 
| 1100 | 转到:out_unlock0 | 
| 1105 | 如果is_file_hugepages(shm_file)则转到:out_unlock0 | 
| 1108 | 如果cmd恒等于super user shmctl commands 则 | 
| 1109 | user等于current_user() | 
| 1111 | err等于shmem_lock(shm_file, 1, user) | 
| 1112 | 如果非err且非mode按位与segment will not be swapped 的值则 | 
| 1113 | mode或等于segment will not be swapped | 
| 1114 | mlock_user等于user | 
| 1116 | 转到:out_unlock0 | 
| 1120 | 如果非mode按位与segment will not be swapped 的值则转到:out_unlock0 | 
| 1122 | shmem_lock(shm_file, 0, mlock_user) | 
| 1123 | mode与等于segment will not be swapped 的反 | 
| 1124 | mlock_user = NULL | 
| 1126 | ipc_unlock_object( & shm_perm) | 
| 1131 | 返回:err | 
| 1133 | out_unlock0 : | 
| 1134 | ipc_unlock_object( & shm_perm) | 
| 1135 | out_unlock1 : | 
| 1137 | 返回:err | 
| 名称 | 描述 | 
|---|---|
| ksys_shmctl | |
| compat_ksys_shmctl | 
| 源代码转换工具 开放的插件接口 | X | 
|---|---|
| 支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |