From nobody Thu May 12 20:44:08 2022 X-Original-To: dev-commits-src-branches@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 24F7C1ACADA8; Thu, 12 May 2022 20:44:09 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4KzkK435Qbz4k1w; Thu, 12 May 2022 20:44:08 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1652388248; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=crovnfAjY7crDxVO1nUBm240/SlxbJN1z94R7feCY1g=; b=OC+Ta0tzXmQ8Dg+IfQrorYCtAtKaS+suZ9PnS/2WelJ7V0Ci5eeBRtEmRuw9/+hh8mmsZh oLZcwwU/hzMVUI8p2yw2bpUkfAcBqhm/goVd/XA6Ca0jcFPtfnG5iqs/GchQDxjMD8fTPI fCMkQZRqMyl7dp0GmMlT46wyG+9r059Y0wSo4TERTT+moGjFkx5Zjm86fEbf6mP1Vd8LKz fTNleo0AuZedq6l0YV+eMJXDdUlBbdMuszD6Sdyx4En6KdUBU7Ft9zL9geiMzFQYgFYCI/ LPusSTJjU4iW5mQhtSY7LNcjnZ5qqLn3eHglqsar1ReYXkYPtt3f8i/kINOXTg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3B86B15907; Thu, 12 May 2022 20:44:08 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 24CKi8N7044275; Thu, 12 May 2022 20:44:08 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 24CKi8V2044274; Thu, 12 May 2022 20:44:08 GMT (envelope-from git) Date: Thu, 12 May 2022 20:44:08 GMT Message-Id: <202205122044.24CKi8V2044274@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Alan Somers Subject: git: c7b4932df66d - stable/13 - fusefs: fix FUSE_CREATE with file handles and fuse protocol < 7.9 List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: asomers X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: c7b4932df66d8a5cd299898a2c477ba7d7248654 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1652388248; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=crovnfAjY7crDxVO1nUBm240/SlxbJN1z94R7feCY1g=; b=beowUm3NgKyEY6JAPQwTEUVj5KiwsSX9O2MvVs6qzRkadYPzWYzkV1fzIpCmL8je2+TkJg PpQgfYtJocpyPnCaf1NiWNg6YO1sUkqE5j3AMD5XZWsFemesf7PtU/c3YFia9blIDpYtlr bnqeffVOZywv1jHukCPjijLJZ2X6gbDe3XQ3XY0fp4UgjDSo4uXhxSzGOXaYHO5tDdEkLu f7hFypFcNEZDjESxBqgf8ih/INBD0FGSaNlA5IhQlZzh5l00FO51+RUAR9IRcpk0VP1Aeu sop9OvGVgrV2Ca7eBsNOPkdrf8gFmS+GQKjpEsUzBJxWJf5ZWt8AolMm4X5Hhg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1652388248; a=rsa-sha256; cv=none; b=Ixnd67CV0RsJf8imJ3jpy8eR2ePDXzQ7HPi/V60nxj8eqOC1sYcpJEDARGM69Ke3a2eWxy vvKhkfJPqAvla8cYgLuM7oBrZEhHheMyMH92hI7czLmPdHMCYbz86NzCoqohRvTAM1CZ2Z Z9w7NbszZ1kSnZTWDzWllclW1pp5gcxqjpLxyHCdFWCR4lQ7qhY1UQcuHfKmkEBhlkyCzE vpPjur3EkiVhrCQvxsDKIBQi691756AfsqmUngR4PxDfFWwkgOvRPj+fGOYdz0VqLRpFgB +gLx1AHiB/wXUjtafCTcr3afIB4862Aa1taL5hIDxkHAUFjrA0lfWJDJjyGnMQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by asomers: URL: https://cgit.FreeBSD.org/src/commit/?id=c7b4932df66d8a5cd299898a2c477ba7d7248654 commit c7b4932df66d8a5cd299898a2c477ba7d7248654 Author: Alan Somers AuthorDate: 2022-04-28 21:13:09 +0000 Commit: Alan Somers CommitDate: 2022-05-12 20:43:22 +0000 fusefs: fix FUSE_CREATE with file handles and fuse protocol < 7.9 Prior to fuse protocol version 7.9, the fuse_entry_out structure had a smaller size. But fuse_vnop_create did not take that into account when working with servers that use older protocols. The bug does not matter for servers which don't use file handles or open flags (the only fields affected). PR: 263625 Submitted by: Ali Abdallah (cherry picked from commit 45825a12f9851213e627cf41398706bacb793f83) --- sys/fs/fuse/fuse_vnops.c | 6 +++++- tests/sys/fs/fusefs/create.cc | 13 ++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/sys/fs/fuse/fuse_vnops.c b/sys/fs/fuse/fuse_vnops.c index e34cebe15772..d59d4e8de3aa 100644 --- a/sys/fs/fuse/fuse_vnops.c +++ b/sys/fs/fuse/fuse_vnops.c @@ -1043,7 +1043,11 @@ fuse_vnop_create(struct vop_create_args *ap) } if (op == FUSE_CREATE) { - foo = (struct fuse_open_out*)(feo + 1); + if (fuse_libabi_geq(data, 7, 9)) + foo = (struct fuse_open_out*)(feo + 1); + else + foo = (struct fuse_open_out*)((char*)feo + + FUSE_COMPAT_ENTRY_OUT_SIZE); } else { /* Issue a separate FUSE_OPEN */ struct fuse_open_in *foi; diff --git a/tests/sys/fs/fusefs/create.cc b/tests/sys/fs/fusefs/create.cc index 0797a3ff9e34..df3225ed1837 100644 --- a/tests/sys/fs/fusefs/create.cc +++ b/tests/sys/fs/fusefs/create.cc @@ -415,15 +415,18 @@ TEST_F(Create_7_8, ok) expect_create(RELPATH, mode, ReturnImmediate([=](auto in __unused, auto& out) { SET_OUT_HEADER_LEN(out, create_7_8); - out.body.create.entry.attr.mode = mode; - out.body.create.entry.nodeid = ino; - out.body.create.entry.entry_valid = UINT64_MAX; - out.body.create.entry.attr_valid = UINT64_MAX; + out.body.create_7_8.entry.attr.mode = mode; + out.body.create_7_8.entry.nodeid = ino; + out.body.create_7_8.entry.entry_valid = UINT64_MAX; + out.body.create_7_8.entry.attr_valid = UINT64_MAX; + out.body.create_7_8.open.fh = FH; })); + expect_flush(ino, 1, ReturnErrno(0)); + expect_release(ino, FH); fd = open(FULLPATH, O_CREAT | O_EXCL, mode); ASSERT_LE(0, fd) << strerror(errno); - leak(fd); + close(fd); } TEST_F(Create_7_11, ok)