On 6/2/22 16:34, Terry Wilson wrote:
> Since pids can be re-used, it is necessary to check that the
> process that is running with a pid matches the one that we expect.
> 
> This adds the ability to optionally pass a 'binary' argument to
> pidfile_is_running, and if it is passed to match the binary against
> /proc/$pid/exe.
> 
> Signed-off-by: Terry Wilson <[email protected]>
> ---
>  utilities/ovn-ctl | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/utilities/ovn-ctl b/utilities/ovn-ctl
> index d733aa42d..41fa89770 100755
> --- a/utilities/ovn-ctl
> +++ b/utilities/ovn-ctl
> @@ -40,9 +40,16 @@ ovn_ic_db_conf_file="$ovn_etcdir/ovn-ic-db-params.conf"
>  ## start ##
>  ## ----- ##
>  
> +pid_exe_matches () {
> +    pid=$1
> +    binary=$2
> +    [ -z "$binary" -o `readlink /proc/$pid/exe` = "$binary" ]

Hi, Terry.  Good catch!
Though, I think, it will be better to just check the 'comm' as
OVS does instead of comparing the full path to the binary.
This will protect us from running the same daemon from different
locations in a general case, i.e. during development or an
upgrade if the binary suddenly moved.  'readlink' also seems
to not be very reliable, because it will add '(deleted)' to the
end of the result if the binary was deleted or replaced.
That also might be a problem during updates where the binary
is updated on the disk but the process is still running.

Best regards, Ilya Maximets.

> +}
> +
>  pidfile_is_running () {
>      pidfile=$1
> -    test -e "$pidfile" && [ -s "$pidfile" ] && pid=`cat "$pidfile"` && 
> pid_exists "$pid"
> +    binary=$2
> +    test -e "$pidfile" && [ -s "$pidfile" ] && pid=`cat "$pidfile"` && 
> pid_exists "$pid" && pid_exe_matches "$pid" "$binary"
>  } >/dev/null 2>&1
>  
>  stop_nb_ovsdb() {

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to