MCPcopy Create free account
hub / github.com/F-Stack/f-stack / sysctl_shmsegs

Function sysctl_shmsegs

freebsd/kern/sysv_shm.c:1040–1096  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1038}
1039
1040static int
1041sysctl_shmsegs(SYSCTL_HANDLER_ARGS)
1042{
1043 struct shmid_kernel tshmseg;
1044#ifdef COMPAT_FREEBSD32
1045 struct shmid_kernel32 tshmseg32;
1046#endif
1047 struct prison *pr, *rpr;
1048 void *outaddr;
1049 size_t outsize;
1050 int error, i;
1051
1052 SYSVSHM_LOCK();
1053 pr = req->td->td_ucred->cr_prison;
1054 rpr = shm_find_prison(req->td->td_ucred);
1055 error = 0;
1056 for (i = 0; i < shmalloced; i++) {
1057 if ((shmsegs[i].u.shm_perm.mode & SHMSEG_ALLOCATED) == 0 ||
1058 rpr == NULL || shm_prison_cansee(rpr, &shmsegs[i]) != 0) {
1059 bzero(&tshmseg, sizeof(tshmseg));
1060 tshmseg.u.shm_perm.mode = SHMSEG_FREE;
1061 } else {
1062 tshmseg = shmsegs[i];
1063 if (tshmseg.cred->cr_prison != pr)
1064 tshmseg.u.shm_perm.key = IPC_PRIVATE;
1065 }
1066#ifdef COMPAT_FREEBSD32
1067 if (SV_CURPROC_FLAG(SV_ILP32)) {
1068 bzero(&tshmseg32, sizeof(tshmseg32));
1069 freebsd32_ipcperm_out(&tshmseg.u.shm_perm,
1070 &tshmseg32.u.shm_perm);
1071 CP(tshmseg, tshmseg32, u.shm_segsz);
1072 CP(tshmseg, tshmseg32, u.shm_lpid);
1073 CP(tshmseg, tshmseg32, u.shm_cpid);
1074 CP(tshmseg, tshmseg32, u.shm_nattch);
1075 CP(tshmseg, tshmseg32, u.shm_atime);
1076 CP(tshmseg, tshmseg32, u.shm_dtime);
1077 CP(tshmseg, tshmseg32, u.shm_ctime);
1078 /* Don't copy object, label, or cred */
1079 outaddr = &tshmseg32;
1080 outsize = sizeof(tshmseg32);
1081 } else
1082#endif
1083 {
1084 tshmseg.object = NULL;
1085 tshmseg.label = NULL;
1086 tshmseg.cred = NULL;
1087 outaddr = &tshmseg;
1088 outsize = sizeof(tshmseg);
1089 }
1090 error = SYSCTL_OUT(req, outaddr, outsize);
1091 if (error != 0)
1092 break;
1093 }
1094 SYSVSHM_UNLOCK();
1095 return (error);
1096}
1097

Callers

nothing calls this directly

Calls 4

shm_find_prisonFunction · 0.85
shm_prison_canseeFunction · 0.85
bzeroFunction · 0.85
freebsd32_ipcperm_outFunction · 0.85

Tested by

no test coverage detected