From nobody Sat Jan 14 20:46:00 2023 X-Original-To: freebsd-current@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4NvVgT6F71z2t0lp for ; Sat, 14 Jan 2023 20:46:13 +0000 (UTC) (envelope-from guyyur@gmail.com) Received: from mail-ej1-x632.google.com (mail-ej1-x632.google.com [IPv6:2a00:1450:4864:20::632]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4NvVgS6ljgz4JdG; Sat, 14 Jan 2023 20:46:12 +0000 (UTC) (envelope-from guyyur@gmail.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20210112 header.b=PhfftP+G; spf=pass (mx1.freebsd.org: domain of guyyur@gmail.com designates 2a00:1450:4864:20::632 as permitted sender) smtp.mailfrom=guyyur@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-ej1-x632.google.com with SMTP id cf18so53333864ejb.5; Sat, 14 Jan 2023 12:46:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=1nRX/dXaE8UuGjtb6PsR0yXJv6vx9Cu5qbp3H+0Y69g=; b=PhfftP+GH8KpJP+OaFab+nofyN5yleKdia1G3FdiM3tDcPF0WMgg+ZQUgoksSo8d5Y i9VpEVQhdr84yiHSUrUel/1r4Ab3qsEm9QjOom6HcYbObucePo1mLiY5qINCveHZkI3k OW8TS3BHagYHoMXjecVT9njvAMp1QdgOBF/0b1eZd6eP5pYMGBG/bOlWhy6b7NiX0d+f vSkB0iZteY9JkatDRabX2g+vGAjUhKwNMVxvY1qIgdPJdE7lmqVNAmSGIpPvYqP3tbcD PXGdzh7uP3sgpyOh7h3OivzJcQydUGBY0Xhs0BMMzSS2/HXoX1qmShDyMwCcyQLOKOoL ygwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=1nRX/dXaE8UuGjtb6PsR0yXJv6vx9Cu5qbp3H+0Y69g=; b=WhBvDdK2UdN2zwBw1OCrZecC6d2dnE8JA8Pj0Wk43KEFdEtVdzQTC3Ro4KguKS1j7f nn4k19feh5nt1rDd5g3hVN3MaeEfB3FirD+igZYzJB0qC0sM9sWTFHm2/d+F+wIytkxG 75Ebxhw8yLeFQxVX9/+9NNLmSMHfqbTS5Ybuuku4TRViMdBruLYpjZL3NLd66xGRv2J5 utekVCYJrmwM7iz5cVItUfldgEy4eu6+X7lmjeuJQl474UNldB9GO4g244RWXr88KI9N Qi0FQbNsE4N0KmLoRFNDvvlE9WZyN1KdnvbBFa8uaoq+4QKNyuz8IJlK23e2kDQnJswO 9lbA== X-Gm-Message-State: AFqh2krAKJndYlBVdu/rdqJgXDPGlOL6kwQ0tfiiZYd9Es7eV5PIGkbs BzBwcPotlvACpBbpL2pq5pldWdTzcn+s5Ki3UcXgnLdwNlE= X-Google-Smtp-Source: AMrXdXt9m8U9vvBWBe1XyqatkFin6EAoiwODuPZ4rmU4GQvtZ+5WV5v2ZKmPnsY+ArXudL1qI1qvVDxSLRVvf+ON0EA= X-Received: by 2002:a17:907:77d8:b0:84d:457a:a19e with SMTP id kz24-20020a17090777d800b0084d457aa19emr1570234ejc.751.1673729171183; Sat, 14 Jan 2023 12:46:11 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 From: Guy Yur Date: Sat, 14 Jan 2023 22:46:00 +0200 Message-ID: Subject: close(2) on a PF_ROUTE socket returns -1 and sets errno to EOPNOTSUPP To: freebsd-current , Gleb Smirnoff Content-Type: multipart/alternative; boundary="000000000000b2df0905f23f7039" X-Spamd-Result: default: False [-3.94 / 15.00]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-0.998]; NEURAL_HAM_SHORT(-0.94)[-0.938]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20210112]; R_SPF_ALLOW(-0.20)[+ip6:2a00:1450:4000::/36]; MIME_GOOD(-0.10)[multipart/alternative,text/plain]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; RCVD_TLS_LAST(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; FREEMAIL_ENVFROM(0.00)[gmail.com]; MIME_TRACE(0.00)[0:+,1:+,2:~]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::632:from]; TO_DN_ALL(0.00)[]; DKIM_TRACE(0.00)[gmail.com:+]; FROM_HAS_DN(0.00)[]; ARC_NA(0.00)[]; RCPT_COUNT_TWO(0.00)[2]; FREEMAIL_FROM(0.00)[gmail.com]; MID_RHS_MATCH_FROMTLD(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim] X-Rspamd-Queue-Id: 4NvVgS6ljgz4JdG X-Spamd-Bar: --- X-ThisMailContainsUnwantedMimeParts: N --000000000000b2df0905f23f7039 Content-Type: text/plain; charset="UTF-8" Hi, close(2) on a PF_ROUTE socket returns -1 and sets errno to EOPNOTSUPP. I am testing 14.0-CURRENT (main branch) built today. On 13.1-RELEASE-p5 close returns 0. The problem looks to be related to 36b10ac2cd18a535cac20ccf51e3fc6c408671e8. The commit removed rts_disconnect and initialization for .pru_disconnect. After the change, .pr_disconnect is not initialized in rtsock.c so now it is set to pr_disconnect_notsupp. This causes flow of: soclose() sodisconnect() so->so_proto->pr_disconnect() pr_disconnect_notsupp() return EOPNOTSUPP On 13.1 it called the raw socket disconnect which returned ENOTCONN. Noticed in dhcpcd error: if_route (ADD): Operation not supported dhcpcd with privsep called write() which failed with EEXIST (expected since route already existed) and then close() which overwrote the errno to EOPNOTSUPP and the parent process received back EOPNOTSUPP instead of EEXIST. Simple test program (prints error on head, no error on 13.1): #include #include #include #include #include #include #include int main(int argc, char *argv[]) { int s = socket(PF_ROUTE, SOCK_RAW, 0); if (s == -1) err(1, "socket()"); if (close(s) == -1) err(1, "close()"); return 0; } Regards, Guy Yur --000000000000b2df0905f23f7039 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

close(2) on a PF_ROUTE socket returns -1 and se= ts errno to EOPNOTSUPP.
I am testing 14.0-CURRENT (main branch) built t= oday.
On 13.1-RELEASE-p5 close returns 0.

The problem looks to be= related to 36b10ac2cd18a535cac20ccf51e3fc6c408671e8.

The commit re= moved rts_disconnect and initialization for .pru_disconnect.
After the c= hange, .pr_disconnect is not initialized in rtsock.c
so now it is set to= pr_disconnect_notsupp.
This causes flow of:
=C2=A0 soclose()
=C2= =A0 sodisconnect()
=C2=A0 so->so_proto->pr_disconnect()
=C2=A0 = pr_disconnect_notsupp()
=C2=A0 return EOPNOTSUPP
On 13.1 it called th= e raw socket disconnect which returned ENOTCONN.

Noticed in dhcpcd e= rror: if_route (ADD): Operation not supported
dhcpcd with privsep called= write() which failed with EEXIST (expected since
route already existed)= and then close() which overwrote the errno to
EOPNOTSUPP and the parent= process received back EOPNOTSUPP instead of EEXIST.

Simp= le test program (prints error on head, no error on 13.1):

#include &= lt;sys/types.h>
#include <sys/time.h>
#include <sys/socke= t.h>
#include <net/if.h>
#include <net/route.h>
#in= clude <unistd.h>
#include <err.h>

int main(int argc, = char *argv[])
{
=C2=A0 int s =3D socket(PF_ROUTE, SOCK_RAW, 0);
= =C2=A0 if (s =3D=3D -1)
=C2=A0 =C2=A0 err(1, "socket()");
= =C2=A0 if (close(s) =3D=3D -1)
=C2=A0 =C2=A0 err(1, "close()")= ;
=C2=A0 return 0;
}


Regards,
Guy Yur
--000000000000b2df0905f23f7039--