commit abe89edb698f9d165b74d1fe146b13fade5b52bd from: Stefan Sperling date: Thu Nov 16 15:37:14 2023 UTC allow gotd repo read/write processes to max out data-size resource limits Proccessing large pack files can easily result in out-of-memory errors if the datasize limit is too conservative. commit - 296611672d3a242111a160c45afb7ac81a01b326 commit + abe89edb698f9d165b74d1fe146b13fade5b52bd blob - 8909ba126c854b6eb163a75d2e039487e7294c58 blob + 892a54d71ecfa0e0dc9b036bdc334a9cbb1e4225 --- gotd/gotd.c +++ gotd/gotd.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -1790,6 +1791,18 @@ apply_unveil_selfexec(void) fatal("unveil"); } +static void +set_max_datasize(void) +{ + struct rlimit rl; + + if (getrlimit(RLIMIT_DATA, &rl) != 0) + return; + + rl.rlim_cur = rl.rlim_max; + setrlimit(RLIMIT_DATA, &rl); +} + int main(int argc, char **argv) { @@ -1996,6 +2009,7 @@ main(int argc, char **argv) /* NOTREACHED */ break; case PROC_REPO_READ: + set_max_datasize(); #ifndef PROFILE if (pledge("stdio rpath recvfd unveil", NULL) == -1) err(1, "pledge"); @@ -2005,6 +2019,7 @@ main(int argc, char **argv) /* NOTREACHED */ exit(0); case PROC_REPO_WRITE: + set_max_datasize(); #ifndef PROFILE if (pledge("stdio rpath recvfd unveil", NULL) == -1) err(1, "pledge");