commit fec752080379fa1d041ed3937dfd4ce3fee33fbf from: Stefan Sperling via: Thomas Adam date: Thu Nov 16 16:33:20 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 - a69094689a8fae092c9c9a99c1824d2052525f31 commit + fec752080379fa1d041ed3937dfd4ce3fee33fbf blob - 7fe8383caa546eb53fad4c421af5738bf34f0ea1 blob + 8f34aa3fdeb12d1f41f37a057a965630aed8aa3f --- gotd/gotd.c +++ gotd/gotd.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -1823,13 +1824,15 @@ apply_unveil_selfexec(void) } static void -drop_privs(struct passwd *pw) +set_max_datasize(void) { - /* Drop root privileges. */ - if (setgid(pw->pw_gid) == -1) - fatal("setgid %d failed", pw->pw_gid); - if (setuid(pw->pw_uid) == -1) - fatal("setuid %d failed", pw->pw_uid); + struct rlimit rl; + + if (getrlimit(RLIMIT_DATA, &rl) != 0) + return; + + rl.rlim_cur = rl.rlim_max; + setrlimit(RLIMIT_DATA, &rl); } int @@ -2045,6 +2048,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"); @@ -2065,6 +2069,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");