From nobody Tue May 6 19:40:09 2025 X-Original-To: dev-commits-src-all@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 4ZsTJQ6KqGz5vKXH for ; Tue, 06 May 2025 19:40:22 +0000 (UTC) (envelope-from kevin.bowling@kev009.com) Received: from mail-qv1-xf2a.google.com (mail-qv1-xf2a.google.com [IPv6:2607:f8b0:4864:20::f2a]) (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 "WR4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZsTJQ3v1Zz3wCL for ; Tue, 06 May 2025 19:40:22 +0000 (UTC) (envelope-from kevin.bowling@kev009.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-qv1-xf2a.google.com with SMTP id 6a1803df08f44-6f521957182so41276566d6.0 for ; Tue, 06 May 2025 12:40:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kev009.com; s=google; t=1746560421; x=1747165221; darn=freebsd.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=Ns37dE8UmmLQbCjqA/qRrQ/YVh6EklMXppUINJ1b3gY=; b=G7rV4L7s7ALk+WzrVL6512VnJXliNBJGQGFxz4bj/pK5e5XepD7cwzOxyArYULFqE/ w8F0C+lXUK7mf3F98aoL6uXMZZQIwtvv2nGfjCaFYOE/zE1jUq8eYatKFgiyg71lYKYw lXhkOPIO8QeUnrP6F4AXAwOMlIK3xtVCXGo/I= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746560421; x=1747165221; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Ns37dE8UmmLQbCjqA/qRrQ/YVh6EklMXppUINJ1b3gY=; b=FmoDgI6XDOamQdJBFCibgvS+eWA8VtifNmvTiL3/MekkAg2knPHPCH3sSeCkF5SWfE U6Mf5WaxONjudb9ecaGT3Wfhac7PGpF7CWgV9UqKL5kiwcuJL4UCVVmCZjwAfxI0KJgD vrNxpwWNQlOAz1NU6iY1badapqfq9PyFiL9na/R49Umr4ACPbIIgD0i3fzf8TZqARd9S oEwMEEzK/4xaEwwncMMv8QM28dZS7JWqOjv98cEMIyEdjfW0ADqO+ZD8kaEV+62XLjK7 LqA7KNNdcrka0GMtFfd/j4XprwdihDDFHKimlhUvRuozLl3/LTi+xg6gT8MFnUpynhx4 2J2g== X-Forwarded-Encrypted: i=1; AJvYcCWJFCM06H/U6iZBp31qiAMuCPqElVr1cmkc3CxmOGmWH1f7QbUfPEMYjUHrOVtNlBi/CpeBX+aN2TbJWDdTr7zfEvgW@freebsd.org X-Gm-Message-State: AOJu0YyEGmDyOSQZpyiULmxypv/fxd6/Eac1BKBh4tK+qLeonGF2USwn 5euct/UkY421I1Z5KE2TC/w44U4tOvMyR8WYnZUX6REEdizh2I4IoHhJTrGL9xxgTqR1Zf5HWu4 WEB6ELDryUQrW2IIA/wvpIPa/Ucz2yd7a1m3a X-Gm-Gg: ASbGncs2h1oQpyVIM7gD1uYmRp0aH69tYiCN9V7Qv476xasJRVG0MO7wv675DrIL/cW kQWgBCD+cWKej3MLFcO4sCzqveVS83yRtGFNDD/+LrGkINEu1YlhGkAS482ayFO3Xeh1wJRMKRy U2UIiSD3mYzNLsp4OmloAonAg= X-Google-Smtp-Source: AGHT+IGnHXUq6o8rypvquzHRef1wqOjfSYcwm8PO/GzbST5xbPOntdRFq/kDyTyTlzqJHB45uSxdum8uXwh6IqHg+mI= X-Received: by 2002:a05:6214:29cd:b0:6d4:1bad:740c with SMTP id 6a1803df08f44-6f5429c052bmr5984566d6.4.1746560421523; Tue, 06 May 2025 12:40:21 -0700 (PDT) List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 References: <202505061934.546JYexL056488@gitrepo.freebsd.org> In-Reply-To: <202505061934.546JYexL056488@gitrepo.freebsd.org> From: Kevin Bowling Date: Tue, 6 May 2025 12:40:09 -0700 X-Gm-Features: ATxdqUGA8utp5mL908m3bHL_9Mp4OWmLaaLcfbwHiWqvB9ekIJObKEm_MrbP4xU Message-ID: Subject: Re: git: 9a7d03c7df35 - main - sendfile: cover the entire sendfile operation under CURVNET_SET() To: Gleb Smirnoff Cc: src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 4ZsTJQ3v1Zz3wCL X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US] X-Spamd-Bar: ---- On Tue, May 6, 2025 at 12:34=E2=80=AFPM Gleb Smirnoff = wrote: > > The branch main has been updated by glebius: > > URL: https://cgit.FreeBSD.org/src/commit/?id=3D9a7d03c7df3536cdb5faf0848c= 6dab4a5d7bcef8 > > commit 9a7d03c7df3536cdb5faf0848c6dab4a5d7bcef8 > Author: Gleb Smirnoff > AuthorDate: 2025-05-06 18:15:15 +0000 > Commit: Gleb Smirnoff > CommitDate: 2025-05-06 19:34:26 +0000 > > sendfile: cover the entire sendfile operation under CURVNET_SET() > > There is no reason to set/restore for every single pr_send(), as it n= ever > changes. Also, cover call into pr_sendfile_wait with CURVNET_SET() f= ixing > recent regression in unix(4). > > Now we would enter sendfile_iodone() with curvnet set, when called > synchronously. Although, it is easy to tell a syncronous call from I= /O > completion, unfortunately the vnet(9) macros do not support condition= al > invocation, so just change CURVNET_SET() to CURVNET_SET_QUIET() and a= dd a > comment that we are aware of the recursion. Seeing a build error on main with this --- kern_sendfile.o --- /usr/src/sys/kern/kern_sendfile.c:788:6: error: variable 'saved_vnet' is used uninitialized whenever 'if' condition is true [ -Werror,-Wsometimes-uninitialized] 788 | if (error !=3D 0) | ^~~~~~~~~~ /usr/src/sys/kern/kern_sendfile.c:1273:2: note: uninitialized use occurs he= re 1273 | CURVNET_RESTORE(); and /usr/src/sys/kern/kern_sendfile.c:788:2: note: remove the 'if' if its condition is always false 788 | if (error !=3D 0) | ^~~~~~~~~~~~~~~ 789 | goto out; | ~~~~~~~~ > Reported-by: syzbot+7b0b20cf2c672c181d98@syzkaller.appspotmail.com > --- > sys/kern/kern_sendfile.c | 13 ++++++++----- > 1 file changed, 8 insertions(+), 5 deletions(-) > > diff --git a/sys/kern/kern_sendfile.c b/sys/kern/kern_sendfile.c > index 1fd1828c37c7..c428d80e0e1a 100644 > --- a/sys/kern/kern_sendfile.c > +++ b/sys/kern/kern_sendfile.c > @@ -285,6 +285,11 @@ sendfile_iowait(struct sf_io *sfio, const char *wmes= g) > > /* > * I/O completion callback. > + * > + * When called via I/O path, the curvnet is not set and should be obtain= ed > + * from the socket. When called synchronously from vn_sendfile(), usual= ly > + * to report error or just release the reference (all pages are valid), = then > + * curvnet shall be already set. > */ > static void > sendfile_iodone(void *arg, vm_page_t *pa, int count, int error) > @@ -365,7 +370,7 @@ sendfile_iodone(void *arg, vm_page_t *pa, int count, = int error) > ("non-ext_pgs mbuf with TLS session")); > #endif > so =3D sfio->so; > - CURVNET_SET(so->so_vnet); > + CURVNET_SET_QUIET(so->so_vnet); > if (__predict_false(sfio->error)) { > /* > * I/O operation failed. The state of data in the socket > @@ -782,6 +787,7 @@ vn_sendfile(struct file *fp, int sockfd, struct uio *= hdr_uio, > error =3D sendfile_getsock(td, sockfd, &sock_fp, &so); > if (error !=3D 0) > goto out; > + CURVNET_SET(so->so_vnet); > pr =3D so->so_proto; > > #ifdef MAC > @@ -1161,7 +1167,6 @@ prepend_header: > ("%s: mlen %u space %d hdrlen %d", > __func__, m_length(m, NULL), space, hdrlen)); > > - CURVNET_SET(so->so_vnet); > #ifdef KERN_TLS > if (tls !=3D NULL) > ktls_frame(m, tls, &tls_enq_cnt, TLS_RLTYPE_APP); > @@ -1203,8 +1208,6 @@ prepend_header: > tcp_log_sendfile(so, offset, nbytes, flags); > } > #endif > - CURVNET_RESTORE(); > - > m =3D NULL; > if (error) > goto done; > @@ -1265,9 +1268,9 @@ out: > if (tls !=3D NULL) > ktls_free(tls); > #endif > - > if (error =3D=3D ERESTART) > error =3D EINTR; > + CURVNET_RESTORE(); > > return (error); > }