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

Function sysctl_msqids

freebsd/kern/sysv_msg.c:1416–1480  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1414}
1415
1416static int
1417sysctl_msqids(SYSCTL_HANDLER_ARGS)
1418{
1419 struct msqid_kernel tmsqk;
1420#ifdef COMPAT_FREEBSD32
1421 struct msqid_kernel32 tmsqk32;
1422#endif
1423 struct prison *pr, *rpr;
1424 void *outaddr;
1425 size_t outsize;
1426 int error, i;
1427
1428 pr = req->td->td_ucred->cr_prison;
1429 rpr = msg_find_prison(req->td->td_ucred);
1430 error = 0;
1431 for (i = 0; i < msginfo.msgmni; i++) {
1432 mtx_lock(&msq_mtx);
1433 if (msqids[i].u.msg_qbytes == 0 || rpr == NULL ||
1434 msq_prison_cansee(rpr, &msqids[i]) != 0)
1435 bzero(&tmsqk, sizeof(tmsqk));
1436 else {
1437 tmsqk = msqids[i];
1438 if (tmsqk.cred->cr_prison != pr)
1439 tmsqk.u.msg_perm.key = IPC_PRIVATE;
1440 }
1441 mtx_unlock(&msq_mtx);
1442#ifdef COMPAT_FREEBSD32
1443 if (SV_CURPROC_FLAG(SV_ILP32)) {
1444 bzero(&tmsqk32, sizeof(tmsqk32));
1445 freebsd32_ipcperm_out(&tmsqk.u.msg_perm,
1446 &tmsqk32.u.msg_perm);
1447 /* Don't copy u.msg_first or u.msg_last */
1448 CP(tmsqk, tmsqk32, u.msg_cbytes);
1449 CP(tmsqk, tmsqk32, u.msg_qnum);
1450 CP(tmsqk, tmsqk32, u.msg_qbytes);
1451 CP(tmsqk, tmsqk32, u.msg_lspid);
1452 CP(tmsqk, tmsqk32, u.msg_lrpid);
1453 CP(tmsqk, tmsqk32, u.msg_stime);
1454 CP(tmsqk, tmsqk32, u.msg_rtime);
1455 CP(tmsqk, tmsqk32, u.msg_ctime);
1456 /* Don't copy label or cred */
1457 outaddr = &tmsqk32;
1458 outsize = sizeof(tmsqk32);
1459 } else
1460#endif
1461 {
1462 /* Don't leak kernel pointers */
1463 tmsqk.u.__msg_first = NULL;
1464 tmsqk.u.__msg_last = NULL;
1465 tmsqk.label = NULL;
1466 tmsqk.cred = NULL;
1467 /*
1468 * XXX: some padding also exists, but we take care to
1469 * allocate our pool of msqid_kernel structs with
1470 * zeroed memory so this should be OK.
1471 */
1472 outaddr = &tmsqk;
1473 outsize = sizeof(tmsqk);

Callers

nothing calls this directly

Calls 6

msg_find_prisonFunction · 0.85
msq_prison_canseeFunction · 0.85
bzeroFunction · 0.85
freebsd32_ipcperm_outFunction · 0.85
mtx_lockFunction · 0.70
mtx_unlockFunction · 0.70

Tested by

no test coverage detected