From nobody Wed Oct 12 04:50:01 2022 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 4MnKvY5S90z4fLvW; Wed, 12 Oct 2022 04:50:01 +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 4MnKvY4nW8z3BvJ; Wed, 12 Oct 2022 04:50:01 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1665550201; 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=FB2QAdfbVA+22/L2Ar4F3B7YwealfNIfTCU++len8nk=; b=VoW0HIb8CI27/UVwyGtWZQdHwBPQ2uy+v5oE7ECDAmd3Mg4kCNnj2HvRNAq+ru8lIQIXt9 pJkAuVme2eMm9dlJIdP6x6ET6LtvRkBvWJRe354DPyB0UMNHT8CvXu2lcsfJtv755Z2edY FpxNWdDQdXtf9zS6nguauJowZPA6LHwR/gq0+7c3fgavE2tyWD2nfuY7lJ2zhBYjWAp8Gk tXZc46uTnuXiRPDpVwmBP+RDeE+hEONRA2yAYYnBg7PlO+jo7TZIIuPZ2V51jGNPKr6jRc OTRRcEHiCwHfrGB6rY0FV4t93DQYmvLjvEM9Czww4ncZRQCGaeoHEoiXnWXu5Q== 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 4MnKvY3l66z1CFW; Wed, 12 Oct 2022 04:50:01 +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 29C4o1lF009366; Wed, 12 Oct 2022 04:50:01 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 29C4o1aK009355; Wed, 12 Oct 2022 04:50:01 GMT (envelope-from git) Date: Wed, 12 Oct 2022 04:50:01 GMT Message-Id: <202210120450.29C4o1aK009355@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: b9f82f035af4 - stable/13 - fusefs: respect RLIMIT_FSIZE during truncate 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: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@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: b9f82f035af41476e5b73ab72292a84a346f0941 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1665550201; 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=FB2QAdfbVA+22/L2Ar4F3B7YwealfNIfTCU++len8nk=; b=GBuSjkTNrh/+g5xdOAlRFUXh+RX2C9896jZjh3ATlCR85Qv94X5ZZCPDBSAy97LQuxJes/ xNfUDVlt/ji4ewbh23Rhufyzdaz8rX/gz5DgFxFujEKbFC46fosyhMvB9X75RJMNaZvdVz 9WyAQerGzlRlmh7Axyg/o3wBGoR57JughtLCwVXdGwW19vszWqG/k/bu5pRUyz+OAlUQYq b76fGO7fu59HnU+tl0hxlwhKk6uXyCQ23CdbN38tMKsggKgePEZgoNtAnJcurI4SGuPqpl DrFjr94OtzLvvgX5bdRnSYnZS3UBi64vUHJIvo6MNByOE5MV13pJ6PXBJptoYg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1665550201; a=rsa-sha256; cv=none; b=cjdNDMWZefrdddf4UFQyezQVCdJHVDl/j4WDNl1WP5JBUlGE6AvFZ45KRGEPgqh1jhftUX 1eFyY/hl+VIBK3kwiCBE7hVu1BaQb5iRwq+XdgfJP8VMnkxjqmwJeVPjpY97v70zu8Qbj2 P82MxjqiSTvcBlKKALdxl8kWNKbttWACT6c/6l/AmrpmM1Mab8Ia0T6jg0hWECze5lq75y +mBIvxN1VWDOJOwRrB7tenybSDDNH93EPxFOhL5fRu+UpHE1cjGB9Gh0Bibz3TXlROj60W Y1fq83r06Bq00A0dr+bP++IUPGx7laZw1R5TVd77rzKSrKgK9/EMZsm+zbdZ3g== 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=b9f82f035af41476e5b73ab72292a84a346f0941 commit b9f82f035af41476e5b73ab72292a84a346f0941 Author: Alan Somers AuthorDate: 2022-09-25 17:56:11 +0000 Commit: Alan Somers CommitDate: 2022-10-12 04:49:26 +0000 fusefs: respect RLIMIT_FSIZE during truncate PR: 164793 Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D36703 (cherry picked from commit 0a192b3abab19deac70f762cd1ec45ba09ec47ca) --- sys/fs/fuse/fuse_vnops.c | 3 +++ tests/sys/fs/fusefs/setattr.cc | 44 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/sys/fs/fuse/fuse_vnops.c b/sys/fs/fuse/fuse_vnops.c index 57d896cea079..925d4ff16232 100644 --- a/sys/fs/fuse/fuse_vnops.c +++ b/sys/fs/fuse/fuse_vnops.c @@ -2263,6 +2263,9 @@ fuse_vnop_setattr(struct vop_setattr_args *ap) case VREG: if (vfs_isrdonly(mp)) return (EROFS); + err = vn_rlimit_trunc(vap->va_size, td); + if (err) + return (err); break; default: /* diff --git a/tests/sys/fs/fusefs/setattr.cc b/tests/sys/fs/fusefs/setattr.cc index 00b37ec7965a..e245c274ba07 100644 --- a/tests/sys/fs/fusefs/setattr.cc +++ b/tests/sys/fs/fusefs/setattr.cc @@ -31,10 +31,14 @@ */ extern "C" { +#include +#include #include +#include #include #include +#include } #include "mockfs.hh" @@ -42,11 +46,15 @@ extern "C" { using namespace testing; -class Setattr : public FuseTest {}; +class Setattr : public FuseTest { +public: +static sig_atomic_t s_sigxfsz; +}; class RofsSetattr: public Setattr { public: virtual void SetUp() { + s_sigxfsz = 0; m_ro = true; Setattr::SetUp(); } @@ -61,6 +69,12 @@ virtual void SetUp() { }; +sig_atomic_t Setattr::s_sigxfsz = 0; + +void sigxfsz_handler(int __unused sig) { + Setattr::s_sigxfsz = 1; +} + /* * If setattr returns a non-zero cache timeout, then subsequent VOP_GETATTRs * should use the cached attributes, rather than query the daemon @@ -553,6 +567,34 @@ TEST_F(Setattr, truncate_discards_cached_data) { leak(fd); } +/* truncate should fail if it would cause the file to exceed RLIMIT_FSIZE */ +TEST_F(Setattr, truncate_rlimit_rsize) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + struct rlimit rl; + const uint64_t ino = 42; + const uint64_t oldsize = 0; + const uint64_t newsize = 100'000'000; + + EXPECT_LOOKUP(FUSE_ROOT_ID, RELPATH) + .WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto& out) { + SET_OUT_HEADER_LEN(out, entry); + out.body.entry.attr.mode = S_IFREG | 0644; + out.body.entry.nodeid = ino; + out.body.entry.attr.size = oldsize; + }))); + + rl.rlim_cur = newsize / 2; + rl.rlim_max = 10 * newsize; + ASSERT_EQ(0, setrlimit(RLIMIT_FSIZE, &rl)) << strerror(errno); + ASSERT_NE(SIG_ERR, signal(SIGXFSZ, sigxfsz_handler)) << strerror(errno); + + EXPECT_EQ(-1, truncate(FULLPATH, newsize)); + EXPECT_EQ(EFBIG, errno); + EXPECT_EQ(1, s_sigxfsz); +} + /* Change a file's timestamps */ TEST_F(Setattr, utimensat) { const char FULLPATH[] = "mountpoint/some_file.txt";