From nobody Fri Oct 17 15:54:56 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 4cp8Xt3qmQz6CFjn for ; Fri, 17 Oct 2025 15:55:10 +0000 (UTC) (envelope-from jason.harmening@gmail.com) Received: from mail-io1-xd2e.google.com (mail-io1-xd2e.google.com [IPv6:2607:f8b0:4864:20::d2e]) (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 4cp8Xt1jcBz47vM for ; Fri, 17 Oct 2025 15:55:10 +0000 (UTC) (envelope-from jason.harmening@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-io1-xd2e.google.com with SMTP id ca18e2360f4ac-93e7ece3025so28503039f.1 for ; Fri, 17 Oct 2025 08:55:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760716508; x=1761321308; 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=1xx2VXG3rlc8C2h+355v6YidKrbOMjr33anLfOnpP8M=; b=KE7yn/DL/OBHi64qyZvCVeRIqZ2CWG/iMvE3PEAPP87gVlNtutC3N1lXqDAZMwidRo IM7tWLbp22gl9wlt1CX2ErYesfPrUyhBNFRAy7P7ua6/SSe0ajKX52UJCakU0nQNZER+ ubRuUcJvvnzfN/2w1gzLnXHPxGw2O/53qG3S9+WE5bhs+UpJMRrUfZaQ43Z9d0zryRxz zm3yx64hRB+vgNxlO3HGbtgz0Bq0TPfI8gM9PA2w6flQMoc/h6L9wVngXkV4huAbnF+y jf/N8AC2GvBaD+IoS2fJ8pg0fDzH6EQcx06TN7D6WAXy4li8RQvwROIUCTQDR4hieHnJ B2nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760716508; x=1761321308; 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=1xx2VXG3rlc8C2h+355v6YidKrbOMjr33anLfOnpP8M=; b=aJM8a0TNRW5hkSD+eHB+KMyjQEZ4AGbVvJG4HcPFRj6Xj/eSeX9dHka+PXEhqaSG/u NjDOTpxCwn1wqecYq25guxfDYeCo56HUxpqHCIyeumaQJkM+Sq2dzWeGdiP2TW/NOp5t QKxJ5CqiuHKtaKGrUT8nXaX5juxADP9rLxJzBK9w4XQ3r2+R8RAwZzWsiyw+hQ1xZAnn esooiTsK1FQ1DHseLaUo3xoWu+RfIQ1mVCY7MUIgImDhkgrYQUqIcEiieQN6WhW5AF4P iwawSoS0JpCd9ptkPK4uw7RW61Q4UdxMf0HuHAexPlpQkRlC2aacP3e99NENKZq3Csz1 DTrQ== X-Forwarded-Encrypted: i=1; AJvYcCUpqoxvxi3yNO1MJhJPr7S+Niv7ZdXbgUcfT4b++zhnvPAsncPUYUM3gB3f8WJAAPSjlv0S4OKBkWpn+/bwV5H6Juk3KQ==@freebsd.org X-Gm-Message-State: AOJu0Yx4/ElaQ4FPyOCHGNCE1uou6m336NOeDqF4CoHvs5smJ/IrxBwM lSOQYw2Cj+Wo79+tqc/himNASlPU83TREs6wXOCj5MrWIKnMspAWojgiDRhhicSbSjwf9EMdHg7 nPOjZK64IHSHY50SQ1QcZuTdoHdj73A== X-Gm-Gg: ASbGncunA7sX7NfEDtu4elC7lobk5HiKHGDc1LSGMS3kWyRaZoHOLLuMqNzeQhxPEwy gGs6gg48xM5JiqG7UA+k3AbrA5QQGjCl1gXN81NSmk0VInNVBF1jkBA/J8ObuqRNuZs1rpTCzIR mOzZVXQB3avV6kJ+HcJ7+qebTKB9xodBsgtdxlYeKAxEclUbgb88TjiqxC6hyYhuOlGb6OoWiCa 2Aaj7BTmvDqpWSOYn1PxS5lAknFky9Tu5j/yCnAUXghCq9CdaCr+5Sbhow= X-Google-Smtp-Source: AGHT+IF4IByVlCqk3eDj9SxEOr8iH7B89dzofLrctPbYU9Rpq7+uKLneAW8Tl6CC3w1iPlAIBVhj9sjawRGOC0jaCQY= X-Received: by 2002:a5d:9383:0:b0:93e:4da7:4ebf with SMTP id ca18e2360f4ac-93e6a52bd12mr904805639f.0.1760716507522; Fri, 17 Oct 2025 08:55:07 -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: <202510170805.59H85Ar5073755@gitrepo.freebsd.org> In-Reply-To: <202510170805.59H85Ar5073755@gitrepo.freebsd.org> From: Jason Harmening Date: Fri, 17 Oct 2025 10:54:56 -0500 X-Gm-Features: AS18NWAiN90zcL4zj9gBGbHErpNVlCmsDUTwUCKZpopSc9ESP5v6QHLSEWdXBi8 Message-ID: Subject: Re: git: 86db3c735dd9 - main - stress2: Added a regression test To: Peter Holm 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-Spamd-Bar: ---- X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; TAGGED_FROM(0.00)[]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US] X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Rspamd-Queue-Id: 4cp8Xt1jcBz47vM Peter, Thank you for adding this test. On Fri, Oct 17, 2025 at 3:05=E2=80=AFAM Peter Holm wrote: > > The branch main has been updated by pho: > > URL: https://cgit.FreeBSD.org/src/commit/?id=3D86db3c735dd999f75eab54d848= fb8402e6689c80 > > commit 86db3c735dd999f75eab54d848fb8402e6689c80 > Author: Peter Holm > AuthorDate: 2025-10-17 08:04:48 +0000 > Commit: Peter Holm > CommitDate: 2025-10-17 08:04:48 +0000 > > stress2: Added a regression test > --- > tools/test/stress2/misc/unionfs20.sh | 206 +++++++++++++++++++++++++++++= ++++++ > 1 file changed, 206 insertions(+) > > diff --git a/tools/test/stress2/misc/unionfs20.sh b/tools/test/stress2/mi= sc/unionfs20.sh > new file mode 100755 > index 000000000000..0c87bc0d80aa > --- /dev/null > +++ b/tools/test/stress2/misc/unionfs20.sh > @@ -0,0 +1,206 @@ > +#!/bin/sh > + > +# > +# Copyright (c) 2025 Peter Holm > +# > +# SPDX-License-Identifier: BSD-2-Clause > +# > + > +# Bug 289700 - unionfs: page fault in unionfs_find_node_status when clos= ing a file within a socket's receive buffer > + > +# "Fatal trap 12: page fault while in kernel mode" seen: > +# https://people.freebsd.org/~pho/stress/log/log0618.txt > + > +. ../default.cfg > + > +prog=3D$(basename "$0" .sh) > +here=3D`pwd` > +log=3D/tmp/$prog.log > +md1=3D$mdstart > +md2=3D$((md1 + 1)) > +mp1=3D/mnt$md1 > +mp2=3D/mnt$md2 > + > +set -eu > +mdconfig -l | grep -q md$md1 && mdconfig -d -u $md1 > +mdconfig -l | grep -q md$md2 && mdconfig -d -u $md2 > + > +mdconfig -s 2g -u $md1 > +newfs $newfs_flags /dev/md$md1 > /dev/null > +mdconfig -s 2g -u $md2 > +newfs $newfs_flags /dev/md$md2 > /dev/null > + > +mkdir -p $mp1 $mp2 > +mount /dev/md$md1 $mp1 > +mount /dev/md$md2 $mp2 > +mount -t unionfs -o noatime $mp1 $mp2 > +set +e > + > +cd /tmp > +sed '1,/^EOF/d' < $here/$0 > $prog.c > +mycc -o $prog -Wall -Wextra -O2 $prog.c > +rm -f $prog.c > +[ -d $RUNDIR ] || mkdir -p $RUNDIR > +cd $RUNDIR > + > +n=3D3 > +for i in `jot $n`; do > + mkdir $mp2/d$i > +done > +(cd $here/../testcases/swap; ./swap -t 3m -i 20 -l 100 -h > /dev/null) & > +sleep 2 > +for i in `jot $n`; do > + (cd $mp2/d$i; /tmp/$prog) & > +done > +while pgrep -q $prog; do sleep .5; done > +while pkill swap; do :; done > +wait > + > +cd $here > +umount $mp2 # The unionfs mount > +umount $mp2 > +umount $mp1 > + > +mdconfig -d -u $md1 > +mdconfig -d -u $md2 > +rm -f /tmp/$prog > +exit 0 > +EOF > +#include > +#include > +#include > +#include > +#include > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#define PARALLEL 2 > +#define SYNC 0 > + > +static int debug; > +static _Atomic(int) *share; > + > +int > +send_fd(int socket, int fd_to_send) > +{ > + struct cmsghdr *cmsg; > + struct msghdr msg =3D {0}; > + struct iovec iov; > + char buf[1] =3D {0}; // dummy data > + char cmsgbuf[CMSG_SPACE(sizeof(fd_to_send))]; > + > + memset(cmsgbuf, 0, sizeof(cmsgbuf)); > + > + iov.iov_base =3D buf; > + iov.iov_len =3D sizeof(buf); > + msg.msg_iov =3D &iov; > + msg.msg_iovlen =3D 1; > + > + msg.msg_control =3D cmsgbuf; > + msg.msg_controllen =3D sizeof(cmsgbuf); > + > + cmsg =3D CMSG_FIRSTHDR(&msg); > + cmsg->cmsg_level =3D SOL_SOCKET; > + cmsg->cmsg_type =3D SCM_RIGHTS; > + cmsg->cmsg_len =3D CMSG_LEN(sizeof(fd_to_send)); > + > + memcpy(CMSG_DATA(cmsg), &fd_to_send, sizeof(fd_to_send)); > + > + return (sendmsg(socket, &msg, 0)); > +} > + > +int > +recv_fd(int socket) > +{ > + struct cmsghdr *cmsg; > + struct msghdr msg =3D {0}; > + struct iovec iov; > + char buf[1]; > + int received_fd; > + char cmsgbuf[CMSG_SPACE(sizeof(received_fd))]; > + > + memset(cmsgbuf, 0, sizeof(cmsgbuf)); > + > + iov.iov_base =3D buf; > + iov.iov_len =3D sizeof(buf); > + msg.msg_iov =3D &iov; > + msg.msg_iovlen =3D 1; > + > + msg.msg_control =3D cmsgbuf; > + msg.msg_controllen =3D sizeof(cmsgbuf); > + > + if (recvmsg(socket, &msg, 0) < 0) > + err(1, "recvmsg()"); > + > + cmsg =3D CMSG_FIRSTHDR(&msg); > + if (cmsg =3D=3D NULL || cmsg->cmsg_len !=3D CMSG_LEN(sizeof(recei= ved_fd))) { > + fprintf(stderr, "No passed fd\n"); > + return (-1); > + } > + > + if (cmsg->cmsg_level !=3D SOL_SOCKET || cmsg->cmsg_type !=3D SCM_= RIGHTS) { > + fprintf(stderr, "Invalid cmsg_level or cmsg_type\n"); > + return (-1); > + } > + > + memcpy(&received_fd, CMSG_DATA(cmsg), sizeof(received_fd)); > + return (received_fd); > +} > + > +int > +main(void) > +{ > + pid_t pid; > + time_t start; > + size_t len; > + int fd, pair[2], status; > + > + fd =3D -1; > + len =3D PAGE_SIZE; > + if ((share =3D mmap(NULL, len, PROT_READ | PROT_WRITE, > + MAP_ANON | MAP_SHARED, -1, 0)) =3D=3D MAP_FAILED) > + err(1, "mmap"); > + > + if (socketpair(AF_LOCAL, SOCK_DGRAM, 0, pair) =3D=3D -1) > + err(1, "socketpair"); > + > + start =3D time(NULL); > + while (time(NULL) - start < 180) { > + share[SYNC] =3D 0; > + if ((pid =3D fork()) =3D=3D -1) > + err(1, "fork"); > + if (pid =3D=3D 0) { > + close(pair[0]); > + atomic_fetch_add(&share[SYNC], 1); > + while (share[SYNC] !=3D PARALLEL) > + usleep(1000); > + // Not calling recv_fd() triggers the issue > +// fd =3D recv_fd(pair[1]); > + if (debug) > + fprintf(stderr, "Received fd=3D%d\n", fd)= ; > + _exit(0); > + } > + fd =3D open("foo", O_RDWR|O_CREAT|O_TRUNC, 0666); > + if (fd =3D=3D -1) > + err(1, "open"); > + if (debug) > + fprintf(stderr, "Sending fd=3D%d\n", fd); > + atomic_fetch_add(&share[SYNC], 1); > + while (share[SYNC] !=3D PARALLEL) > + usleep(1000); > + send_fd(pair[0], fd); > + usleep(arc4random() % 1000); > + wait(&status); > + close(fd); > + unlink("foo"); > + } > +}