code wiki / _hdl_build / nx_prlimit_probe.nx

nx_prlimit_probe.nx source

↩ module page · 34 lines · 1799 B

1// nx_prlimit_probe.nx -- diagnostic: what does nx_prlimit(0, RLIMIT_AS, ...) actually return? 2import "nx_syscalls.nx" 3func pp(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 4func pn(v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m; sys_write(1,"-\x00" as *u8,1)}; let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48 as u8;k=1}; while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1}; var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1}; sys_write(1,bb,k); return 0 } 5func main() -> i64 { 6 // 1. READ current RLIMIT_AS (new=0, old=&buf) 7 let cur: *u8 = sys_mmap(16) 8 let rc_read: i64 = nx_prlimit(0, RLIMIT_AS, 0 as *u8, cur) 9 let curp: *i64 = cur as *i64 10 pp("read RLIMIT_AS rc=\x00" as *u8); pn(rc_read); pp(" cur=\x00" as *u8); pn(curp[0]); pp(" max=\x00" as *u8); pn(curp[1]); pp("\n\x00" as *u8) 11 12 // 2. SET RLIMIT_AS to 256MB, read back old 13 let nl: *u8 = sys_mmap(16) 14 let ol: *u8 = sys_mmap(16) 15 let nlp: *i64 = nl as *i64 16 nlp[0] = 0x10000000 17 nlp[1] = 0x10000000 18 let rc_set: i64 = nx_prlimit(0, RLIMIT_AS, nl, ol) 19 pp("set 256MB rc=\x00" as *u8); pn(rc_set); pp("\n\x00" as *u8) 20 21 // 3. READ BACK the now-enforced limit 22 let cur2: *u8 = sys_mmap(16) 23 let rc_read2: i64 = nx_prlimit(0, RLIMIT_AS, 0 as *u8, cur2) 24 let cur2p: *i64 = cur2 as *i64 25 pp("readback rc=\x00" as *u8); pn(rc_read2); pp(" cur=\x00" as *u8); pn(cur2p[0]); pp("\n\x00" as *u8) 26 27 // 4. try RLIMIT_CPU set/read too (alt resource if AS is touchy) 28 let cl: *u8 = sys_mmap(16) 29 let clp: *i64 = cl as *i64 30 let rc_cpu: i64 = nx_prlimit(0, RLIMIT_CPU, 0 as *u8, cl) 31 pp("read RLIMIT_CPU rc=\x00" as *u8); pn(rc_cpu); pp(" cur=\x00" as *u8); pn(clp[0]); pp("\n\x00" as *u8) 32 sys_exit(0) 33 return 0 34}