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

Function sys_rctl_get_limits

freebsd/kern/kern_rctl.c:1794–1875  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1792}
1793
1794int
1795sys_rctl_get_limits(struct thread *td, struct rctl_get_limits_args *uap)
1796{
1797 struct sbuf *sb;
1798 struct rctl_rule *filter;
1799 struct rctl_rule_link *link;
1800 char *inputstr, *buf;
1801 size_t bufsize;
1802 int error;
1803
1804 if (!racct_enable)
1805 return (ENOSYS);
1806
1807 error = priv_check(td, PRIV_RCTL_GET_LIMITS);
1808 if (error != 0)
1809 return (error);
1810
1811 error = rctl_read_inbuf(&inputstr, uap->inbufp, uap->inbuflen);
1812 if (error != 0)
1813 return (error);
1814
1815 sx_slock(&allproc_lock);
1816 error = rctl_string_to_rule(inputstr, &filter);
1817 free(inputstr, M_RCTL);
1818 if (error != 0) {
1819 sx_sunlock(&allproc_lock);
1820 return (error);
1821 }
1822
1823 if (filter->rr_subject_type == RCTL_SUBJECT_TYPE_UNDEFINED) {
1824 rctl_rule_release(filter);
1825 sx_sunlock(&allproc_lock);
1826 return (EINVAL);
1827 }
1828 if (filter->rr_subject_type != RCTL_SUBJECT_TYPE_PROCESS) {
1829 rctl_rule_release(filter);
1830 sx_sunlock(&allproc_lock);
1831 return (EOPNOTSUPP);
1832 }
1833 if (filter->rr_subject.rs_proc == NULL) {
1834 rctl_rule_release(filter);
1835 sx_sunlock(&allproc_lock);
1836 return (EINVAL);
1837 }
1838
1839 bufsize = uap->outbuflen;
1840 if (bufsize > rctl_maxbufsize) {
1841 rctl_rule_release(filter);
1842 sx_sunlock(&allproc_lock);
1843 return (E2BIG);
1844 }
1845
1846 buf = malloc(bufsize, M_RCTL, M_WAITOK);
1847 sb = sbuf_new(NULL, buf, bufsize, SBUF_FIXEDLEN);
1848 KASSERT(sb != NULL, ("sbuf_new failed"));
1849
1850 RACCT_LOCK();
1851 LIST_FOREACH(link, &filter->rr_subject.rs_proc->p_racct->r_rule_links,

Callers

nothing calls this directly

Calls 14

rctl_read_inbufFunction · 0.85
rctl_string_to_ruleFunction · 0.85
rctl_rule_releaseFunction · 0.85
mallocFunction · 0.85
sbuf_newFunction · 0.85
rctl_rule_to_sbufFunction · 0.85
sbuf_printfFunction · 0.85
sbuf_errorFunction · 0.85
sbuf_deleteFunction · 0.85
sbuf_lenFunction · 0.85
sbuf_setposFunction · 0.85
rctl_write_outbufFunction · 0.85

Tested by

no test coverage detected