From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D222743553B for ; Tue, 14 Jul 2026 23:54:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784073259; cv=none; b=YWrBKhgTLw0gtL8R2T/fhgSloN4xJamsCuDa3RAFPperufbWII46eSiFW+lN62UD/02XHzULhXy3xH9prIgTbT9ywic/Se/0C5sthHMnaeYnqI6pIfUslwbyR3qyG/OUggoRD3UqpQ3KcvNj107uu36ptk3Ol7RDysggClomKQ0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784073259; c=relaxed/simple; bh=t2bCjvQESDfrtTkydLO1/4vSR4Czd2I4rz/vDz9rwe0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dh39MZ+o4oAZEFCZK72zOz+c89qTppEPqu9so9v1z7B9/X1WZ+Nb/XOxgSXmoOViNm0meRACi2hbXQGSBXb4pV18dJDtLZeay8G+oZYqDSolWWGpwgc56Zn0Wv00G9uLLas86l7PpMdfLc3Wdw6AtBxuoPsYUAU1tG1qj01QNwk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=asu.edu; spf=pass smtp.mailfrom=asu.edu; dkim=pass (2048-bit key) header.d=asu.edu header.i=@asu.edu header.b=E5Y5HNDW; arc=none smtp.client-ip=209.85.214.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=asu.edu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=asu.edu Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=asu.edu header.i=@asu.edu header.b="E5Y5HNDW" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-2caced6038eso21347715ad.0 for ; Tue, 14 Jul 2026 16:54:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=asu.edu; s=google; t=1784073256; x=1784678056; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=WEci7FoVON0/ZMv2IFLGjX0V0D6atEWv0SWH6c8vLwQ=; b=E5Y5HNDWvSxTdGqodS22W6ncRF8dv27eH5UVX429NgsfXd09KIAJrdvGQUyX34ddYf vZvMnCMhEhZhtC3LOFSb4Z4WiwbzGCsYArk8u1I2FGtmRuoGOohQzeANWLPKHvJKnqI4 zz9mmSY5rdwmgsNjOFc/t45XW5mUhJCFLHVwBQvodWb91198ywkaOgUd6ceSlZs/pBob 28LGcB6TTjozgL1Z9Coa+lU6+s6+4hEBS4zqZSZus1Zua/3W2BZ0Lt09XBjmYC5W1VJ9 VWm3HaXRpVXVBk5kyukKWSYn5jhOOBJTaDip+qXh0i8cnLvXQwwyMy8MtpbESt5ZG/uG 5BRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784073256; x=1784678056; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=WEci7FoVON0/ZMv2IFLGjX0V0D6atEWv0SWH6c8vLwQ=; b=g+AnFxTO5u9DtkryBua20X0HCu8dqZvY9cRgwx50P8AmM9LRwkai/m+BqSaKxcr2no Cx4EQNhwnV2NtK9CNWcz6CH9tiWyxkNfKYyFULOE/++u/t/Lln5DtfefX+Wvgnwwx/tk JLT/VEHG8lDSrlM0eJf779QaYujU/QRn5gGcUd42AhsjbHgAb/i5vAqTxuRYWOmCdk4o VY6mXjhJOyUcM99KlvbFTzeOLw8/Lik6CNKQqsHNq3Ab6eMY9sW7e5+uDfee1D5AgHzJ ku0r7LTh0vvb8+uFUiAh2LyeguJhhxS2gqeK0EFHal26Sjj8IGZ5RU2/4CTu1BTSEyVd bpkw== X-Forwarded-Encrypted: i=1; AHgh+Rqe4Fmai7WYiXiVuF04wh14nWAbkMVxpvg6VW9ddYA78Mkjas5im2TXCUq9R9yxibVOCMjyLyXvGuPFx7k=@vger.kernel.org X-Gm-Message-State: AOJu0Yx+mYXCU5IVxYIk4MwThwyIGhh0hjETnM/doeerLumKxOnzPO9J ZPfnZck8CdhK63nvWbKsGPpmYIM9uWTITbQOVX5MyDPicsMRMPcbq6hkEzpCRvfAOg== X-Gm-Gg: AfdE7cluxnN/JxjLQGKguQTCI747CVB2pU/H0095+ASnRAkuQQy5XF0zAhvRbUCNz+w vcZs5rsR9dC8e41DSCkWkEUYQU4mzj0vzaUQ69q/if64MGwmm+rvix5vglE9wDwj38CY6dRxpx+ c43ogeYR/wtyOAprHME6BMaMnH08JEiR3SaxaCMuyfd6D2Uc9mvVruwUJxmzZv719kiS8E3bcxO ELTvYd97Nv4PgD3vuVjMcTtlU0YvhvbzAMhOK7BXpzGoMD22ybtLU+efAiuQLL8XRT2gMX150yP ruh6CM6KjY3RRIhTdow6TrLLT+1q7IkU3dwpWMquQ7s6Bi2A/JEUWI6m/uNcFAzkeMIgLfvOvwK joAkSagxA0Mv6AbkK6X0IyohUSLXWs2oSWklMcCp/zWtkiMYs8kBMZw32/Hy2MIEgb0jYFOZbUQ == X-Received: by 2002:a17:902:e785:b0:2ce:b67d:cf06 with SMTP id d9443c01a7336-2ceb67ddf65mr114511605ad.1.1784073256262; Tue, 14 Jul 2026 16:54:16 -0700 (PDT) Received: from p1.. ([2607:fb91:1513:463e:34c6:f6a3:8e91:2983]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3d451sm123236075ad.65.2026.07.14.16.54.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Jul 2026 16:54:15 -0700 (PDT) From: Xiang Mei To: Joanne Koong , Bernd Schubert , Baokun Li , Miklos Szeredi , Kees Cook , "Gustavo A . R . Silva" Cc: fuse-devel@lists.linux.dev, linux-hardening@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, Luis Henriques , Pavel Begunkov , bestswngs@gmail.com, Xiang Mei Subject: [PATCH v4 3/3] fuse: deduplicate the oversized-request error selection Date: Tue, 14 Jul 2026 16:54:08 -0700 Message-ID: <20260714235408.1666063-3-xmei5@asu.edu> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260714235408.1666063-1-xmei5@asu.edu> References: <20260714235408.1666063-1-xmei5@asu.edu> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit fuse_dev_do_read() and fuse_uring_args_to_ring() both pick the error for a request that does not fit the server's buffer, and both special-case FUSE_SETXATTR. Move that choice into a helper so the two transports cannot drift apart. No functional change. Signed-off-by: Xiang Mei --- v4: introduce fuse_req_too_large_error as a helper fs/fuse/dev.c | 5 +---- fs/fuse/dev_uring.c | 2 +- fs/fuse/fuse_dev_i.h | 7 +++++++ 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c index b8e43e374b35..56c38aca7389 100644 --- a/fs/fuse/dev.c +++ b/fs/fuse/dev.c @@ -1584,10 +1584,7 @@ static ssize_t fuse_dev_do_read(struct fuse_dev *fud, struct file *file, /* If request is too large, reply with an error and restart the read */ if (nbytes < reqsize) { - req->out.h.error = -EIO; - /* SETXATTR is special, since it may contain too large data */ - if (args->opcode == FUSE_SETXATTR) - req->out.h.error = -E2BIG; + req->out.h.error = fuse_req_too_large_error(args); fuse_request_end(req); goto restart; } diff --git a/fs/fuse/dev_uring.c b/fs/fuse/dev_uring.c index 4529505b2bca..cebd8f871627 100644 --- a/fs/fuse/dev_uring.c +++ b/fs/fuse/dev_uring.c @@ -729,7 +729,7 @@ static int fuse_uring_args_to_ring(struct fuse_ring *ring, struct fuse_req *req, } if (fuse_len_args(num_args, (struct fuse_arg *)in_args) > ent->payload_sz) - return args->opcode == FUSE_SETXATTR ? -E2BIG : -EIO; + return fuse_req_too_large_error(args); /* copy the payload */ err = fuse_copy_args(&cs, num_args, args->in_pages, diff --git a/fs/fuse/fuse_dev_i.h b/fs/fuse/fuse_dev_i.h index b511aaab6bfc..4958158c0f02 100644 --- a/fs/fuse/fuse_dev_i.h +++ b/fs/fuse/fuse_dev_i.h @@ -13,6 +13,8 @@ #include #include +#include "args.h" + /* Ordinary requests have even IDs, while interrupts IDs are odd */ #define FUSE_INT_REQ_BIT (1ULL << 0) #define FUSE_REQ_ID_STEP (1ULL << 1) @@ -367,6 +369,11 @@ static inline struct fuse_dev *__fuse_get_dev(struct file *file) return fud; } +static inline int fuse_req_too_large_error(struct fuse_args *args) +{ + return args->opcode == FUSE_SETXATTR ? -E2BIG : -EIO; +} + void fuse_iqueue_init(struct fuse_iqueue *fiq, const struct fuse_iqueue_ops *ops, void *priv); struct fuse_dev *fuse_get_dev(struct file *file); -- 2.43.0