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

Function shminit

freebsd/kern/sysv_shm.c:926–1002  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

924#endif
925
926static int
927shminit(void)
928{
929 struct prison *pr;
930 void **rsv;
931 int i, error;
932 osd_method_t methods[PR_MAXMETHOD] = {
933 [PR_METHOD_CHECK] = shm_prison_check,
934 [PR_METHOD_SET] = shm_prison_set,
935 [PR_METHOD_GET] = shm_prison_get,
936 [PR_METHOD_REMOVE] = shm_prison_remove,
937 };
938
939#ifndef BURN_BRIDGES
940 if (TUNABLE_ULONG_FETCH("kern.ipc.shmmaxpgs", &shminfo.shmall) != 0)
941 printf("kern.ipc.shmmaxpgs is now called kern.ipc.shmall!\n");
942#endif
943 if (shminfo.shmmax == SHMMAX) {
944 /* Initialize shmmax dealing with possible overflow. */
945 for (i = PAGE_SIZE; i != 0; i--) {
946 shminfo.shmmax = shminfo.shmall * i;
947 if ((shminfo.shmmax / shminfo.shmall) == (u_long)i)
948 break;
949 }
950 }
951 shmalloced = shminfo.shmmni;
952 shmsegs = malloc(shmalloced * sizeof(shmsegs[0]), M_SHM,
953 M_WAITOK|M_ZERO);
954 for (i = 0; i < shmalloced; i++) {
955 shmsegs[i].u.shm_perm.mode = SHMSEG_FREE;
956 shmsegs[i].u.shm_perm.seq = 0;
957#ifdef MAC
958 mac_sysvshm_init(&shmsegs[i]);
959#endif
960 }
961 shm_last_free = 0;
962 shm_nused = 0;
963 shm_committed = 0;
964 sx_init(&sysvshmsx, "sysvshmsx");
965#ifndef SYSVSHM
966 shmexit_hook = &shmexit_myhook;
967 shmfork_hook = &shmfork_myhook;
968#endif
969
970 /* Set current prisons according to their allow.sysvipc. */
971 shm_prison_slot = osd_jail_register(NULL, methods);
972 rsv = osd_reserve(shm_prison_slot);
973 prison_lock(&prison0);
974 (void)osd_jail_set_reserved(&prison0, shm_prison_slot, rsv, &prison0);
975 prison_unlock(&prison0);
976 rsv = NULL;
977 sx_slock(&allprison_lock);
978 TAILQ_FOREACH(pr, &allprison, pr_list) {
979 if (rsv == NULL)
980 rsv = osd_reserve(shm_prison_slot);
981 prison_lock(pr);
982 if (prison_isvalid(pr) && (pr->pr_allow & PR_ALLOW_SYSVIPC)) {
983 (void)osd_jail_set_reserved(pr, shm_prison_slot, rsv,

Callers 1

sysvshm_modloadFunction · 0.85

Calls 9

mallocFunction · 0.85
mac_sysvshm_initFunction · 0.85
osd_reserveFunction · 0.85
prison_lockFunction · 0.85
prison_unlockFunction · 0.85
prison_isvalidFunction · 0.85
osd_free_reservedFunction · 0.85
syscall_helper_registerFunction · 0.85
printfFunction · 0.70

Tested by

no test coverage detected