From nobody Tue May 6 19:40:09 2025 X-Original-To: dev-commits-src-main@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 4ZsTJQ6KDmz5vKSD 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 4ZsTJQ3TFrz3wCK 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-6e8f4c50a8fso58583536d6.1 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=HgC0aEGmgBx3pEyilaFbVHLPDQv5LQO0OwskdJRCvjtA+E50IkVMTpBeLpvfjrYSzE WwQnmHsqPX72VPH8R43+rvfPvk47ibD01dHTi9wUTpv/WebVVF9jL99P4dr/6Q+gsB0U C2u6f5E/VsOdyHTZIVm6+bB4O5I4K8kF8JBAN0oNPKklB5HKhnq4U68z3NHINxqZG0UC TdyeUaDlb2LDZjkLfY9Yevxa5Lq5sxU9Cbj31QxBv0uHXmAXhaGlKU28BqmZaOk5i02I yF9dR55qu7vBAk3CQeHRTohLLw9hL0FTEi6YOqeEjndJW6E4FduRiA8w9RBsZtrpkaWu h+3A== X-Forwarded-Encrypted: i=1; AJvYcCU2ST4zSrQfsPbM9WbuPIBYQvs0Xq/547W49jaeT256ojg8MzgbspGGI1Tw1VdX7SbUJsW5IyZVMNgG7lAC/H7USXC5Hw==@freebsd.org X-Gm-Message-State: AOJu0YwjeQg3VZBjbneD8qPOKata4kzU2LRc/BmUiw3iW8Zmobgcmb9Y p/YCUSvoyMo46vFHMnsa3WzVBHV1JCm8Yz1SxOLuWT9IWFAzpj/SB/5vkZqPcmKXJfC9wxD+FCg lh1i9Uk2hb/B1C1obLB9eG1UZYkd6aodrhTha99QoDjF2Nes9gvNI X-Gm-Gg: ASbGncuh10jiXRvEo1QiZdDoUxRo88BQvPEi+gE0uWGjM3xpaWuR+OMRNNDGmlKEWMp kde+JFRs61X8WUfuFX2xVJG4VToWe1FXV7vZRk88LIDKlvhU7/wcpqD17KVAuw7xGUfyOhWBdu0 nLNdKqL3TBRdhWrVh7yPtI5ws= 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 the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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: 4ZsTJQ3TFrz3wCK 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); > }