When getpwnam(3) reaches out to YP, it calls clntudp_create(3) with a
authorderaadt <deraadt@openbsd.org>
Mon, 22 Jan 2024 16:18:06 +0000 (16:18 +0000)
committerderaadt <deraadt@openbsd.org>
Mon, 22 Jan 2024 16:18:06 +0000 (16:18 +0000)
commit903e91b41b4c4e72febb2e8342343a0cd37cbe30
tree7b4dceca70a1caa58a97815d7a22ed7cc998bd05
parent139761cd6f4ce72bd283082d304e49a30a9218fb
When getpwnam(3) reaches out to YP, it calls clntudp_create(3) with a
pre-initialized ypconnect(2) socket.  That calls clntudp_bufcreate(),
which contains code checking if the socket and address are configured..
If not, socket(2) is called, or an address allocation is performed via
the portmapper (which calls a whole lot more code).

Split clnt_udp.c into two .c files (which will compile as seperate .o
files), and create a new libc-private clntudp_bufcreate_simple() function
which skips the socket and address work.

Result: In most static binaries, this reduces the text segment by
~100K, and removes 5-7 system call stubs -- which might matter for
non-pledged binaries with otherwise lack socket(2).
ok millert jmatthew
lib/libc/rpc/Makefile.inc
lib/libc/rpc/clnt_udp.c
lib/libc/rpc/clnt_udp.h [new file with mode: 0644]
lib/libc/rpc/clnt_udp_bufcreate.c [new file with mode: 0644]
lib/libc/yp/yp_bind.c