Index | Thread | Search

From:
Mikolaj Kucharski <mikolaj@kucharski.name>
Subject:
Re: Bump buffer size in pkill's getargv() function
To:
tech@openbsd.org
Date:
Mon, 9 Mar 2026 11:43:40 +0000

Download raw body.

Thread
Kind reminder.

On Fri, Feb 27, 2026 at 01:46:52PM +0000, Mikolaj Kucharski wrote:
> Hi,
> 
> I am facing a problem with pgrep'ing Java daemon, which has long list of
> arguments.
> 
> Current situation is:
> 
> # rcctl check signal_daemon
> signal_daemon(failed)
> 
> # pgrep -lf java | wc -c
>     2540
> 
> As you can see, that list of arguments is longer than _POSIX2_LINE_MAX
> which is currently used by pkill / pgrep command.
> 
> $ getconf _POSIX2_LINE_MAX
> 2048
> 
> With following pexp defined:
> 
> # grep -w pexp /etc/rc.d/signal_daemon
> pexp="${JAVA}.* org.asamk.signal.Main daemon${daemon_flags:+ ${daemon_flags}}"
> 
> the regex is not able to match very end of the Java arguments, because
> the buffer is too small.
> 
> I am bumping the buffer to:
> 
> $ getconf _POSIX_ARG_MAX
> 4096
> 
> which makes rc.d(8) script work:
> 
> # rcctl check signal_daemon
> signal_daemon(ok)
> 
> This is minimal diff, to make things good enough.
> 
> 
> diff --git usr.bin/pkill/pkill.c usr.bin/pkill/pkill.c
> index c9ed8cc9e3b..7b3471d1c83 100644
> --- usr.bin/pkill/pkill.c
> +++ usr.bin/pkill/pkill.c
> @@ -113,7 +113,7 @@ extern char *__progname;
>  static char *
>  getargv(struct kinfo_proc *kp)
>  {
> -	static char buf[_POSIX2_LINE_MAX];
> +	static char buf[_POSIX_ARG_MAX];
>  	char **pargv;
>  	size_t j;
>  
> 

-- 
Regards,
 Mikolaj