From nobody Fri Oct 3 21:05:41 2025 Received: from SEYPR02CU001.outbound.protection.outlook.com (mail-koreacentralazon11013009.outbound.protection.outlook.com [40.107.44.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 62426155322; Tue, 26 Aug 2025 03:37:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.44.9 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756179457; cv=fail; b=KGutF0pi6xhExCCJym2BG3YsBCQT99IihyteAPgg0F7osXBa4SaJCvFLvLvyAjxHV2pKG7iOl1WEpd9V/x6Y3hh1NBBzJ4xA2siJwLF9l0sZd7Pt9N3FlcU7ejRozDoNKYKjwyKhtWF4c7jLj0rqyifRE0IJJ+twr6SYh7I08xg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756179457; c=relaxed/simple; bh=XjWFp3KvMn2RqWYNwDQi+A4WEs8/PtOG0A+rgAav0Ps=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Wh8GjGyQmDdgF1OP6N1zOV3IIfdEwi8Jlt7SzF1TVCLC+cTngk3IsTknrATMJZSHzIuH/sT2tF3ANPsF2RTBKq0JJ3xO4KWD+77J7zr2ZNjEwS3R+502FBPdVJ4nvMjMJZVPQAYpTCbJR7qSjZ/Dx1jXzqwZa0RoUayFyMwJQ6s= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=vivo.com; spf=pass smtp.mailfrom=vivo.com; dkim=pass (2048-bit key) header.d=vivo.com header.i=@vivo.com header.b=XWt6vivS; arc=fail smtp.client-ip=40.107.44.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=vivo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=vivo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=vivo.com header.i=@vivo.com header.b="XWt6vivS" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PAYvyTZ12pVM5deWhIHuhuH6FMD4MyjBk07NGXfPKBHwAana0SX6k1MR6m8UPGjqOAaQu8UL98/V3XRslKso9eY9IeFhSr1pPS1WljbNXb+lV5d5C9oELgiYWNs3r6K37Zyz47izpxdfjC/Isy0HeWg7Ua6Gt07bBKzr5/9mdHNZti10rvv+5bw9hPtwfsIy1hl9/mV48lRWSLfJv+vKkswpHEP5CvuhsrdR03iqwltMfHN64eDP3LGTexv+Xkwel84/r7t0lWbSfx4kzundT1PSjUhrmqaft+eB+DJaZWxpUnWj2ffGsYUyNAOeCO+JIhVfSbAC9xzmJLbflQXrvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Q40968wNTzEEvILSBwvKGqgEh0Xg8L9CHY7Ik20CaQ0=; b=rY3w8X1zRCwF/GMRjGxA5N1KL852cTsrMihuuvXEzwRkVNGwQHE3mLUtOBsWP2T5MK7R2xu8zWhXJDd9FxSPmvrn1KLAMIAnCRTKimpnWcvCEMB6OdYdkmuwSbispobKHJey/gusHujI5mVhPIyOLlA6O4k+RkH7UPm22jVtcPDKeok8rEkdIxjMDh/Ik62D0roi1uzY3uh9eXJAKkhxOp2gOtq/AOlOe2hkkDy1iWuCzt0vwyD2pMkms1fdyXDIjXVUba3yMwbA9FRi3qiwX+ju8mQa2Qvy3b0zHsrQIOBXDo8gm4Fs2Go5W6R1Y3RFgm4j4YkKsoFO/51XyUwTFA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=vivo.com; dmarc=pass action=none header.from=vivo.com; dkim=pass header.d=vivo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vivo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Q40968wNTzEEvILSBwvKGqgEh0Xg8L9CHY7Ik20CaQ0=; b=XWt6vivSH5u9EyXuS/kMk6GawZiyA1WydJi7I7BELZm/GDaPRlPwl/7YfZDfGy+WvtLPTI9pwxJ7NFWxFLKhrzSTTsr9BVY+abPJULoAnt8ab+PzQnx2jQWm29f6TSZNNSfLPU2h69oKhYwv7vcRjbOjs1+1cjCExPn9GbumqoHi/3Ok/kL8MqNsGkV/F1Yb30s80YC6gN/lyBgTwIRPGgcz9xF0YTF7VcfCowA9Y8qru+6Ohicr3xGqrk4J6C9UuTqAm2tUqS4Dl/SO1dP+DqAlrKpvuouaapZ3H8x55TvaydBwiZhvTPs80lKi9DnJh1S8rlML1hRo0Zie7mOtew== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=vivo.com; Received: from TY2PPF5421A6930.apcprd06.prod.outlook.com (2603:1096:408::78f) by TYUPR06MB6027.apcprd06.prod.outlook.com (2603:1096:400:351::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9052.19; Tue, 26 Aug 2025 03:37:32 +0000 Received: from TY2PPF5421A6930.apcprd06.prod.outlook.com ([fe80::6370:9e0a:c891:a1a9]) by TY2PPF5421A6930.apcprd06.prod.outlook.com ([fe80::6370:9e0a:c891:a1a9%8]) with mapi id 15.20.9052.014; Tue, 26 Aug 2025 03:37:32 +0000 From: Chenzhi Yang To: slava@dubeyko.com, glaubitz@physik.fu-berlin.de, frank.li@vivo.com Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Yang Chenzhi Subject: [RFC PATCH 1/4] hfs: add hfs_off_and_len_is_valid helper Date: Tue, 26 Aug 2025 11:35:54 +0800 Message-Id: <20250826033557.127367-2-yang.chenzhi@vivo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250826033557.127367-1-yang.chenzhi@vivo.com> References: <20250826033557.127367-1-yang.chenzhi@vivo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0030.apcprd02.prod.outlook.com (2603:1096:3:18::18) To TY2PPF5421A6930.apcprd06.prod.outlook.com (2603:1096:408::78f) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PPF5421A6930:EE_|TYUPR06MB6027:EE_ X-MS-Office365-Filtering-Correlation-Id: a80b0dd9-6996-455b-cb02-08dde451e392 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|52116014|376014|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?zwQmx6zRdogLw+HvUkLNSg0bPBJI51zbEOtND8kx/0vJfZ1mFScMvxatWh9I?= =?us-ascii?Q?dMFi+hVJj2oE2+UR6x6xuIqNREcBIZRVCRF2hIw3Qej9xPqkauhsxoHtLZzs?= =?us-ascii?Q?DP3HpP4r86Tl18K7O+Y2wteIOJX73XEty4Zgyr2WKZKgjzcBo56+i27qsbw5?= =?us-ascii?Q?3JyjdNMIlb0sTflwZc6fgZ/+rBXdEScJlt9EcTwvsDd6+Nx0S6NXINSCt9Im?= =?us-ascii?Q?8Urk0sbht/vhn7EJGoe29Q+Yz/B3GnurwlVXq6zwjfXSQTlD2xCaDNlhRm3R?= =?us-ascii?Q?YmQH1wdQEciykmkwyCyQlcxbT0HV1uEaULT28Tzxpypvu2P1HVuM2OO/Yv+I?= =?us-ascii?Q?EYxmF79dAQBJG3gGlFob6pnabMY9cwGBxA9IgRRHx4TZiNP18THP0KHmM530?= =?us-ascii?Q?Ddry4Nue1JIAyUKWqk8LCkgfslkYEF1koRU7XGxVUm+uUN7wR1p22norR+g5?= =?us-ascii?Q?NDn2lWTAwBOjVoz09bJrBSQ+BTpzgUf/SVgBW969tQ3QR80DLtvpeJ06feON?= =?us-ascii?Q?mzFAWo6vRTFkcR69ExbaxKo7AsQxJjDgu9RjSULAGEVirJZgbBSxtX+OnSn1?= =?us-ascii?Q?xm5ioV5LkvhEzK8P9B/CyvX040NnGH/GdcQvjNs2BA+0Bab1Jy1fBXOnafu4?= =?us-ascii?Q?kG0Ox8p9qjwOLVKfN+uMwfJdHDQ2KoOXvFftTsf7DbbimAwC1nxCXdKR7bew?= =?us-ascii?Q?AoPPOwmiMM/YXjydG46Ps6zzEQ3uExzfy+rUfqezVIbCh1RkhA/j/ZslMcOz?= =?us-ascii?Q?3UgROrIZWTMg7v7hMPSdBzNAkDuG37ccX2kKeEURn20tgON5vQbL74Ga9vb3?= =?us-ascii?Q?oBUgxK9KQqlIaKU6qQVa3JCKinR2mqz6DgYpzZqh1kjcykFJ9ujIfOpyjD6/?= =?us-ascii?Q?//TN0wRZifrWJgG3sBz7R8y8B8+MFDX/8bTJTeLOxKooxsegqZk4zVtagyQp?= =?us-ascii?Q?1XS6hCcZBdWnCMWKY9xyWODatxggkUTWFinzKIWElw+xVycxkdfBpd/3gIM/?= =?us-ascii?Q?d3m2SaL5dRtLXDPQtuMh6wAzYEn/31RVqF4xrh94SB2GkCYnAT6A4W1OSv9Y?= =?us-ascii?Q?bSztajCetTY/dawLr0D7h0MUZHPlbIt1ZWta5zzltfVW36LfouP87XENWm2c?= =?us-ascii?Q?g/CMlVmvxRMQmdToqcIvQK36t0cubqzlEEI70DCBFI5lQY8i0wNI1n083195?= =?us-ascii?Q?VBPYRsTRzhunKQ5yvdaVs/VhaMSlYyVz/SL8ByVfM/UwYfqjors3QUVonF9Y?= =?us-ascii?Q?kcUFv69mYS5ACqEcE4rbuFgJDKm8VQtgjxhS0NlvYdQreE3HXmS695ZUs0b9?= =?us-ascii?Q?L9UBG5b+A1t2uTgFTGMKXUGpj2b6fzPEJJBh4r4hH5B3kIHMDXjLnQJViWyV?= =?us-ascii?Q?qoNvI2BxBEJLduVrBic9EiZcvjcD/u4zXNWDYX1vhxq2ALlwf+ZIdGHH5Nvu?= =?us-ascii?Q?5UnVulFuzQn0r+vIP7UWu1JAabuYJIxOKydV/8o/RGdTFpNFrFrZwQ=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY2PPF5421A6930.apcprd06.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(52116014)(376014)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?aaBc9U2lmG3T+AtYnH3RfqIzSifAiNKt7Pu09afrP01k/FNfbUe3cUemEyfu?= =?us-ascii?Q?F74XkzvgP2rGBmBYxE0XhdaaTfX1YTAGnE2vTclYCbJrpz/yujpu+w5YzARP?= =?us-ascii?Q?aHdmYcizD3/g8EjMWwif8YgUJgMY8mjBBRnLMFtQfjioI8r2Yu/dKVG+p5RJ?= =?us-ascii?Q?hwupv9R07hLzk1g87Gfn14muAeNsMJNM77INZ45eml+pYk7d/rT7wbIjcRV1?= =?us-ascii?Q?dsQwuKQh6pi23Ut5HWpDgpJrfybvGqu+pY89SuB+Zq+Add9pmQZhtrCZyZoU?= =?us-ascii?Q?uAG2xyXLCTqP5/PI3s6UF5iPO2papXlmAh+6jqzc02dqXK81oFNkwJoBQ6qg?= =?us-ascii?Q?HgFdBWBgorTVZgHKDWN3fGep7nNgzacjE1/IuulTZoVUomUcsKx0+/OS0QRO?= =?us-ascii?Q?Hz2+vScJScUpR7Bb2+G956UcB6LJ1o1brNsCbSFrDrD6wbmkZ3fUjr8CKua0?= =?us-ascii?Q?zLlBnxZ01woizY52eY1h42TPQ8hShSnR1ATtJSaLjrhM1zGZN8/GYCKLOO2P?= =?us-ascii?Q?uvRho1QSGTzxXN2aBxjxU+g+qRfTEBI1IEWHiBAZEMnoZxFDfKnKA/kcSGEN?= =?us-ascii?Q?PKrHM6F6iHEA/aQnKCbipg9Xlfz3K9K1ii/Q5yMu/omagNpA/n6nW6WNWtbI?= =?us-ascii?Q?D9J+97xekd8sykssq9shzDajtwPhLJ3rwnfZphtoTdG2Nl3ncxSFDTw1wyJd?= =?us-ascii?Q?1yKeqlcdHsHP5RpzLhNzWHDz08eQgX0yBssXyFex6Nx8BYa/fJKhmsijNW/L?= =?us-ascii?Q?2ztOPmOfvsZlRwoPJDoheWBRblXiJup8f8rAsnw5SG0Zk8SuSKs2SG9/D8Di?= =?us-ascii?Q?kATUBC/8nqtbpflvnr2D0NG8ctzCbK7aAkPmYQTqDjLD09u/S3xJpmCrTGQw?= =?us-ascii?Q?Ny6nO3r0FmHTC/Lu0eYsKt12aJmhjBV3Utwo9LoTr0qYkK2zCa6Vnr/PCIE2?= =?us-ascii?Q?oSwhTK4SoHJv7aqCiUtup0O9A7eBImCgVsZwz1FQ9/TWhlXoWr8CprsCjRKB?= =?us-ascii?Q?kCn4ZA5lj/NiTQamcDBiCWCSgmTEK0XmppPILWFKkSWQMdf6SC8efRZSYfRc?= =?us-ascii?Q?8d2bgfjB5x+NGvVZSFItRPAINwtJTNQJy4PlFic4YvtFKVzWeVOPhEdCXhgv?= =?us-ascii?Q?MQu/EvlnlwXGwI9rUeKoiown/+J/chXQxGKiZXsi3YhOgl1FCp/dhIBqOXxf?= =?us-ascii?Q?DM/lr9DkMtEi3Yr9BDa4IHYtYnSGuF35kOxIhQTQm7Bza9OERkiGUV2Z5Ypc?= =?us-ascii?Q?D16v97YpMYHEIB029F97Mpq9N7k3r3y+P5BRNDS257TxOoV+vi9D3OlKdIu6?= =?us-ascii?Q?CilnZQU/1QHkEWBF5k+jVzDvLFZK3+bVdGSjZY+83fSmt7YOE2hbzoyQBp1Y?= =?us-ascii?Q?TcPNtozC1Akp+Nq4B7LA55AZwz4IyBmxgGV3R0k7LS1/fR118kXo9En5fWNV?= =?us-ascii?Q?HMTx62ZD2HO8gsD7AialJ4mqy37u6H7ih8VhBem6XqD/XFLl3IyU6x7rOwYk?= =?us-ascii?Q?/rdGs/zUX6NeT4XHlbLHfxar7XGpB/JzeIK8aExb/KgNF3bQ2jxQoUEfIly2?= =?us-ascii?Q?X5kelvZBydsMRws+521X3arqoZbOQ6jA6SmsJ+zY?= X-OriginatorOrg: vivo.com X-MS-Exchange-CrossTenant-Network-Message-Id: a80b0dd9-6996-455b-cb02-08dde451e392 X-MS-Exchange-CrossTenant-AuthSource: TY2PPF5421A6930.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Aug 2025 03:37:32.0940 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 923e42dc-48d5-4cbe-b582-1a797a6412ed X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: NjprYz8xOWMhuJo+2xlmkbNtpEuIHF14ZkOhNyF5FbajTrkXk1hLdQkwuo6yB9/nEobGsaLBcPwevGLPnPTiMw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYUPR06MB6027 Content-Type: text/plain; charset="utf-8" From: Yang Chenzhi Introduce a helper function hfs_off_and_len_is_valid, which combines is_bnode_offset_valid and check_and_correct_request_len. The motivation is that check_and_correct_request_len correcting the length may force the caller to continue the execution, but the corrected length might not match the buffer size, this may trigger a out-of-bounds memory access. In addition, if the bnode is corrupted, continuing to read data may trigger unknown bugs. It is still unclear whether there are special cases where the length must be corrected, so instead of replacing the existing logic, this helper function is added. Signed-off-by: Yang Chenzhi --- fs/hfs/btree.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/fs/hfs/btree.h b/fs/hfs/btree.h index 0e6baee93245..fb69f66409f4 100644 --- a/fs/hfs/btree.h +++ b/fs/hfs/btree.h @@ -170,3 +170,21 @@ struct hfs_btree_header_rec { max key length. use din catalog b-tree but not in extents b-tree (hfsplus). */ +static inline +bool hfs_off_and_len_is_valid(struct hfs_bnode *node, u16 off, u16 len) +{ + bool ret =3D true; + if (off > node->tree->node_size || + off + len > node->tree->node_size) + ret =3D false; + + if (!ret) { + pr_err("requested invalid offset: " + "NODE: id %u, type %#x, height %u, " + "node_size %u, offset %u, length %u\n", + node->this, node->type, node->height, + node->tree->node_size, off, len); + } + + return ret; +} --=20 2.43.0 From nobody Fri Oct 3 21:05:41 2025 Received: from TYDPR03CU002.outbound.protection.outlook.com (mail-japaneastazon11013055.outbound.protection.outlook.com [52.101.127.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 519A42D3732; Tue, 26 Aug 2025 03:37:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.127.55 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756179460; cv=fail; b=C54B7u/IbaDomUoITcCXgxw0XO6xGQ0FtD1ZlbtshEXJCz0FhH9XEMS/1Kp1F4oT6QHrd5x1Pu9p77dUQtBO4evQ0/9+qIT27oRtNnQCSXianti04IYZZ01JvelvBJMkqbXJ0welOGpMcPpItd3b82mFFXVfDNySRieGcJXoou4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756179460; c=relaxed/simple; bh=Tn252cv819uc3eQc97QlJbW7i4jYO2SvmKFbZW6PXY8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=PUUF8yRaImkcR9+vmmZfQO4jUnbsCtRS3lhBkdwf79GatLBQIu95AVb2V4xF9NMkvCkirU41f2JHR75tafk0RAG4uiAaYlwa6r0kR+IrqGtiZPj7yAHwARWcE5HJB3vTmOgpDVlY2Gqrc4ovmugC5s8E45lFv0dIAqw4gGz5/M0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=vivo.com; spf=pass smtp.mailfrom=vivo.com; dkim=pass (2048-bit key) header.d=vivo.com header.i=@vivo.com header.b=fRjbm8tc; arc=fail smtp.client-ip=52.101.127.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=vivo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=vivo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=vivo.com header.i=@vivo.com header.b="fRjbm8tc" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RMrwPRFcdlYsHfyw7jVOXaOHciNqTDUV2eVnaaPYbiQZE3TbewQQshDAb9j6PCj8hP3I8UrX2HVvHA5oBIBTzLxsl6dTrK7FHl8/J60hLzCy8kNwkmZP93E1+ckt5O5wV/pKqRziKAR37dO/HrSfVh3dF6eQYN7FNHKgPal+CVkCCXb49Wet8cUapJ58G3pllGqP71y/MN1ICqKOuY3C0j4GyVpMSAIID12cLMP4hVAPLe9WpYRJDTugyIrhRN1av73jpVnrW8lUTHU6UyyJb3ZYm6/rsMwWlYMLcl/fwk8DJZqsfVogRIfLkLtdsjnfCabrno/rKvjOB73KuGQg3w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=UR03hK1Pyiu7MPpKxqm4V5g53mBQm0rieKvi7dRhbTY=; b=G9eljkeVHZ35yn5indKV4owiKxBZPZ3PrVsDS0qoEuQz4s9R8P4hSc7c/jelev61PZbqAJbgw3wSbYX2BxXSiVjQMqx9OdPOBrU23RL4xpGjqUt8d2OqM66phaCnGkNYeyf0X/xNBZTs3FcCs1P97WN8+rTM0ABX3qYKFZtgzsHfKwbiFyc82UQr0Mm+cU9CUJa1WK92U/Xg34UOi2IVdZX+wNYq9geV5aiBNydPxIPlh9qfBxXN5DM65L0NNcVFM/ydVFqsq2Ohld6NFni3gIVM8/0CZscOSMCy1FGvWv5jeYpSNHBuFx6jXdSBRGu5PeFJ/6Phb48Y/MznLAwcLA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=vivo.com; dmarc=pass action=none header.from=vivo.com; dkim=pass header.d=vivo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vivo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UR03hK1Pyiu7MPpKxqm4V5g53mBQm0rieKvi7dRhbTY=; b=fRjbm8tcDSB3lcShXIKIXTS19ya1vf3DXgx+CfUKM8ru47hxjPk0pc81TPa4ktiHcnU/qAzPQSCjqTl7zeJubteFcni21AbWcEOePG8My7rGslKehzGktuMsk9D1qdua65DBFr/627kEacOSehuOTXZlbVPdo3I2EuIhMkOyPvkdZsnkMXTvNHhoWgY6pceW/N0lbI306AYJ84bzuCFl+fw6Bk5+eBHbycX4rapD5qHs8yKVCdJaRKnlpdSHwxTydWAbqsSjO1qGPuwplk7bEYSusdfw0lIGoMTOxClnjoTeknNQYIz6Rp5cDkJymnTRwI33TOKWgpPwNj/QboDgGQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=vivo.com; Received: from TY2PPF5421A6930.apcprd06.prod.outlook.com (2603:1096:408::78f) by TYPPR06MB8049.apcprd06.prod.outlook.com (2603:1096:405:317::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9052.21; Tue, 26 Aug 2025 03:37:35 +0000 Received: from TY2PPF5421A6930.apcprd06.prod.outlook.com ([fe80::6370:9e0a:c891:a1a9]) by TY2PPF5421A6930.apcprd06.prod.outlook.com ([fe80::6370:9e0a:c891:a1a9%8]) with mapi id 15.20.9052.014; Tue, 26 Aug 2025 03:37:35 +0000 From: Chenzhi Yang To: slava@dubeyko.com, glaubitz@physik.fu-berlin.de, frank.li@vivo.com Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Yang Chenzhi Subject: [RFC PATCH 2/4] hfs: introduce __hfs_bnode_read* to fix KMSAN uninit-value Date: Tue, 26 Aug 2025 11:35:55 +0800 Message-Id: <20250826033557.127367-3-yang.chenzhi@vivo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250826033557.127367-1-yang.chenzhi@vivo.com> References: <20250826033557.127367-1-yang.chenzhi@vivo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0030.apcprd02.prod.outlook.com (2603:1096:3:18::18) To TY2PPF5421A6930.apcprd06.prod.outlook.com (2603:1096:408::78f) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PPF5421A6930:EE_|TYPPR06MB8049:EE_ X-MS-Office365-Filtering-Correlation-Id: 01e2a0be-6298-497b-e2e5-08dde451e573 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|52116014|376014|38350700014|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?xOIfuqYd1sYBBusDFFOyYsARX4tX7ZF5Dw3FJ/QH/84zlh3H2GFVcf87rBWW?= =?us-ascii?Q?KgmFSq9q6HD8Zv4BqzuHyzZcZlSnsQjLsDZMD7thGt/Uq2vaccHCmqsogXLc?= =?us-ascii?Q?u+XnSv2/g/wixTQHzvwIJo20bZ5+j0o0IRqNmcxOYIbN9LT/mvcMg5X0OpLr?= =?us-ascii?Q?J4LJQa1dsVoQX7B67se0F3fS0Vlp7VF6EWX6huJ4jcXSykwqeq6u856g9Ixe?= =?us-ascii?Q?c4NPISPN61ksAZhKjPP3ZSG6Errm+APzwPvE5vA76LQpSq67NHCOzRBsSnRp?= =?us-ascii?Q?usFbFSrINrlvSxyvlkcJANvINf3U6MrqTfukZAGDGm6+IwsflSx/1iqfKokT?= =?us-ascii?Q?cJYSxFYB1YG29IJLr9mdZVQ0QZPfvPEWjlN2FbRc/DJpj9cfwrEyknO+Zp1Y?= =?us-ascii?Q?Gq0AMwzs5E4++pCREp2nhpywx0s6idwpUFlgGPw8R3PX9qjE0RUIDVvWZZyT?= =?us-ascii?Q?5+V7Rd1zDDfd7JXZVkCYn9qeYGxgfMR9dgkSl0aGXtp3qz58NbmBGJjK/r+j?= =?us-ascii?Q?qpFU0Y6QMsnN+jnKneQh/b9GLAsDa2cUFD4gvIy72Ub5ZG8DZKjHgneN/y7V?= =?us-ascii?Q?krZCthdmfX0xFImK3+024BayX2dXj/eKN9SZ2HIDBVrg5UzyxgpdmKO6GqBU?= =?us-ascii?Q?D7ryxCsMmnQGFTOCvQg72qBW4UxOmahGEGuiIhzKsN94/prymAYuL5Ld5R0F?= =?us-ascii?Q?unIswIHkS/oly+bDReVuMAtKXbfMYHwHET716sv2cCFMOHudwd1YJEG6hIuk?= =?us-ascii?Q?T5gTr0bCvgWkzkNHPUBZqHSA5DZc8el7rlPhCeA4fCimB9pUiwzcmlgFNtTw?= =?us-ascii?Q?iWzE1TlUlW+H+HFjX8w57G2ZlYD49i69/y91rNe2iu8oaNHQqDrAyIxTC+9F?= =?us-ascii?Q?/zJXFhS94RteOZJyBydY9BoHJLRIgQ/ccxIT5NVbFWSJyI2Sd7P9cpChb4yi?= =?us-ascii?Q?cJs3yKvuWrQC5BEc7qPmswDzZGG1Vqa3gBPjhDl+wwNBethJH6BoJ5Y6QwlZ?= =?us-ascii?Q?Dr2TXnLBE4SNMfAvhcnsDSq0sxVyycXiBePcxw7lxBT4uPy5aLa15TbD6uFh?= =?us-ascii?Q?6lPskeiB1gP4RJmUluY0oBRhRAl3SlGcBzNT4M29BZFFyPNzyuUEHqy16497?= =?us-ascii?Q?T8lUPZekWjPF+TN57zqiaAx/MjlM4Mb2RgByiQ7dnDWTFk2VnQazRZIJ8lbW?= =?us-ascii?Q?W/P0P7FxOiRhOi9+2+mGZxAzJ826+4FHRui9WGIoy95o/fPjQkLkTQHfgCod?= =?us-ascii?Q?v/7MgZOyCfWSnSl5jWHCnFi0G9KZeyvMQfpu6QxOL/614HVV4LXTvBjkiB5j?= =?us-ascii?Q?zKnYLEJUDBsQjiKHiw5rr1aTc5Wcv73uWVv8PcbTR6re7+PMpW5he0u01Hme?= =?us-ascii?Q?fy5oB2/drmqHlROc9KdyQIfDnBaix/Yh2bRULG1Vx6Yt5eGWfRZrfZQ22Epl?= =?us-ascii?Q?+AdQ0iExlDs=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY2PPF5421A6930.apcprd06.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(52116014)(376014)(38350700014)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?PxEsBzOSgr76eXw/1p1x3BHUglbTtB46BhoXHLsLreHr1Ziq78MjDnO3iNHJ?= =?us-ascii?Q?VNSF8aZKnDznXfbBOaRzAcBusAOoxyaWwdftbYACC3YjjgcK8ZVKROX7orcH?= =?us-ascii?Q?Jjk14kFvpSGsPx8fFuHf7zbhhoFBzo/Fw95T2dLMPo/EU2ZpIqfDeB3duAXP?= =?us-ascii?Q?GX0WtPV1DAXneUzltjUaQsMKcKf71kwQ6S1+o2KoFP18C9mSYjC346qcYFM/?= =?us-ascii?Q?ZzaqOICeaU9BOuRElmPxxlD0qqV0sEIYV++QbCCLTHG22KAMkdrAuHsR7zBv?= =?us-ascii?Q?zLE4+VXjklgdAZm1SXoVxuYae8LFaxmqbG+lQB82Ffa1zRK4/sCMW3l+6uCa?= =?us-ascii?Q?+D2lJN7fpML9I4RS5wRYmrzHAYlXTR8oflqlq7YaMsjlYJPv4myQaiyVxhad?= =?us-ascii?Q?aKeatLUUc1j12RrBZYXF55fn+eFqwOlgpDzeJPwI5fDdDU4k5bkO8Qzmv1Ll?= =?us-ascii?Q?/U6D5tP3JaYRFy015I5NaMztjZhjwBaeO0UC4/TRn+S8+4W/GBrJvqwuJs+1?= =?us-ascii?Q?NQtIxkuc18ooliBDwIWkqR/X9N+jRl50Ui0OZITVvoKc4lCdBiHz0cSg7/xA?= =?us-ascii?Q?hkCiSV+2BUyHFxupKkwy0J8c38D1mP+qtcy09/pqEZ7kwC0RAXIX8wORhDYL?= =?us-ascii?Q?rGzIzEQjWdWz2AalP08tACIeHeMFjWsoh0FezOu4jaOmpvslRt+NTl3Q8GLp?= =?us-ascii?Q?6XQ3ODfqRRXCNzPl27m6FwEedx4w2O6xLgv7TTJuQuqq+Wqn/F8XIhcJLDvD?= =?us-ascii?Q?CS66fpmVpBGOX93sX+H816acyKA8J7P+iMPqEfz2QfsMor24APAEcGCFrMbb?= =?us-ascii?Q?NRN29iH8yDauJn4m6+uA3nv+D1NhueDnlQqtLeVeYzpZIKtR8UN/H6kLTvXo?= =?us-ascii?Q?kmENe0tZcE+gvT67eG1+loXiKhau4Y8NiSK4uSAZJtYGuh0z6MJluOMZQYWb?= =?us-ascii?Q?4HD1m++jvZqXeFokzIDUsr8N7txb4LBUlkdN2/ZwY7hhTjdTLK1CTB+wqxSb?= =?us-ascii?Q?vxSflekFtn73GNRmVCh4lb4LbpZG2+SiLb0wJZ6p2uukIsFNuuUX8waYtQLg?= =?us-ascii?Q?oeVUkdsbmglwu//Hw59VgmRMhK3/485bbIFxpIiDDG9RkcKXiOycZhQD5izA?= =?us-ascii?Q?lyityhDX4QcYZIZ1+s/dl30y6eubq4xkbvbygIqXuZ56eI0EzsoH7gLXuNUM?= =?us-ascii?Q?aovAJaM26G/mFBMUQtorKQymNe0TF+v5o9plO8icMeEjYL29WFY5G5AcaI6y?= =?us-ascii?Q?ZJqhEWxZfENbH36R1FSu/6+71Z+uF0qwIoq81EucybHwJzQZZ5HV7Z212zUS?= =?us-ascii?Q?NLuFmJ1t569Wc120UBtIssJF5q87Ih+5KAT2g2lWeKFqWOMDEaiTnygPoJ/M?= =?us-ascii?Q?uWGGIRk0XwbIN/2b7W0TNQn3V8Erw//m712daCgLX2pY0sFDQrYTDvgBMR8V?= =?us-ascii?Q?p52Cmtw07AWim2h93D118Ac7d2YZasPzpEBsTHxHBGOFLAR8YdbhUFhjd1HX?= =?us-ascii?Q?7Bj66VZwgaSkM1R+Sctitv9/wzV1L8M3shPCZsAhsWNfhhWCNm6wi1NVEehz?= =?us-ascii?Q?kWH7m6drduVNS/WESg+3/Rj+66klW6nfsmcpCZ61?= X-OriginatorOrg: vivo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 01e2a0be-6298-497b-e2e5-08dde451e573 X-MS-Exchange-CrossTenant-AuthSource: TY2PPF5421A6930.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Aug 2025 03:37:35.2173 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 923e42dc-48d5-4cbe-b582-1a797a6412ed X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 1Zq7Nas4bs2ZMqNuUCO62tVdOoBYD8+21+i0TTUYXoOXdyaeD6z0mVQmT1RdkLxBmPIDFxkHVoAPFOO8C1F0gQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYPPR06MB8049 Content-Type: text/plain; charset="utf-8" From: Yang Chenzhi Original bug report: https://groups.google.com/g/syzkaller-bugs/c/xSRmGOV0xLw/m/D8DA6JGcCAAJ This bug was fixed by the commit: commit a431930c9bac518bf99d6b1da526a7f37ddee8d8 Author: Viacheslav Dubeyko Date: Thu Jul 3 14:49:12 2025 -0700 However, hfs_bnode_read will return early detecting invalid offset. In that case, hfs_bnode_read_u16 accesses and uninitialized data variable via be32_to_cpu(data), which trigger a KMSAN uninit-value report. This RFC patch introduce __hfs_bnode_read* helpers, which are returned-value versions of hfs_bnode_read. In principle, hfs_bnode_read() should return an error, but this API is widely used across HFS. Some heavy functions such as hfs_bnode_split() and hfs_brec_insert() do not have robust error handling. Turning hfs_bnode_read() into an error-returning function would therefore require significant rework and testing. This patch is only a minimal attempt to address the issue and to gather feedback. If error-returning semantics are not desired, simply initializing the local variable in hfs_bnode_read_u16() and hfs_bnode_read_u8() would also avoid the problem. Replace old hfs_bnode_read* in hfs_bnode_dump with __hfs_bnode_read*. so that an error return can be used to fix the problem This is not a comprehensive fix yet; more work is needed. Signed-off-by: Yang Chenzhi --- fs/hfs/bnode.c | 81 +++++++++++++++++++++++++++++++++++++++++++------- fs/hfs/btree.h | 1 + 2 files changed, 71 insertions(+), 11 deletions(-) diff --git a/fs/hfs/bnode.c b/fs/hfs/bnode.c index e8cd1a31f247..da0ab993921d 100644 --- a/fs/hfs/bnode.c +++ b/fs/hfs/bnode.c @@ -57,6 +57,59 @@ int check_and_correct_requested_length(struct hfs_bnode = *node, int off, int len) return len; } =20 +int __hfs_bnode_read(struct hfs_bnode *node, void *buf, u16 off, u16 len) +{ + struct page *page; + int pagenum; + int bytes_read; + int bytes_to_read; + + /* len =3D 0 is invalid: prevent use of an uninitalized buffer*/ + if (!len || !hfs_off_and_len_is_valid(node, off, len)) + return -EINVAL; + + off +=3D node->page_offset; + pagenum =3D off >> PAGE_SHIFT; + off &=3D ~PAGE_MASK; /* compute page offset for the first page */ + + for (bytes_read =3D 0; bytes_read < len; bytes_read +=3D bytes_to_read) { + if (pagenum >=3D node->tree->pages_per_bnode) + break; + page =3D node->page[pagenum]; + bytes_to_read =3D min_t(int, len - bytes_read, PAGE_SIZE - off); + + memcpy_from_page(buf + bytes_read, page, off, bytes_to_read); + + pagenum++; + off =3D 0; /* page offset only applies to the first page */ + } + + return 0; +} + +static int __hfs_bnode_read_u16(struct hfs_bnode *node, u16* buf, u16 off) +{ + __be16 data; + int res; + + res =3D __hfs_bnode_read(node, (void*)(&data), off, 2); + if (res) + return res; + *buf =3D be16_to_cpu(data); + return 0; +} + + +static int __hfs_bnode_read_u8(struct hfs_bnode *node, u8* buf, u16 off) +{ + int res; + + res =3D __hfs_bnode_read(node, (void*)(&buf), off, 2); + if (res) + return res; + return 0; +} + void hfs_bnode_read(struct hfs_bnode *node, void *buf, int off, int len) { struct page *page; @@ -241,7 +294,8 @@ void hfs_bnode_dump(struct hfs_bnode *node) { struct hfs_bnode_desc desc; __be32 cnid; - int i, off, key_off; + int i, res; + u16 off, key_off; =20 hfs_dbg(BNODE_MOD, "bnode: %d\n", node->this); hfs_bnode_read(node, &desc, 0, sizeof(desc)); @@ -251,23 +305,28 @@ void hfs_bnode_dump(struct hfs_bnode *node) =20 off =3D node->tree->node_size - 2; for (i =3D be16_to_cpu(desc.num_recs); i >=3D 0; off -=3D 2, i--) { - key_off =3D hfs_bnode_read_u16(node, off); + res =3D __hfs_bnode_read_u16(node, &key_off, off); + if (res) return; hfs_dbg_cont(BNODE_MOD, " %d", key_off); if (i && node->type =3D=3D HFS_NODE_INDEX) { - int tmp; - - if (node->tree->attributes & HFS_TREE_VARIDXKEYS) - tmp =3D (hfs_bnode_read_u8(node, key_off) | 1) + 1; - else + u8 tmp, data; + if (node->tree->attributes & HFS_TREE_VARIDXKEYS) { + res =3D __hfs_bnode_read_u8(node, &data, key_off); + if (res) return; + tmp =3D (data | 1) + 1; + } else { tmp =3D node->tree->max_key_len + 1; - hfs_dbg_cont(BNODE_MOD, " (%d,%d", - tmp, hfs_bnode_read_u8(node, key_off)); + } + res =3D __hfs_bnode_read_u8(node, &data, key_off); + if (res) return; + hfs_dbg_cont(BNODE_MOD, " (%d,%d", tmp, data); hfs_bnode_read(node, &cnid, key_off + tmp, 4); hfs_dbg_cont(BNODE_MOD, ",%d)", be32_to_cpu(cnid)); } else if (i && node->type =3D=3D HFS_NODE_LEAF) { - int tmp; + u8 tmp; =20 - tmp =3D hfs_bnode_read_u8(node, key_off); + res =3D __hfs_bnode_read_u8(node, &tmp, key_off); + if (res) return; hfs_dbg_cont(BNODE_MOD, " (%d)", tmp); } } diff --git a/fs/hfs/btree.h b/fs/hfs/btree.h index fb69f66409f4..bf780bf4a016 100644 --- a/fs/hfs/btree.h +++ b/fs/hfs/btree.h @@ -94,6 +94,7 @@ extern struct hfs_bnode * hfs_bmap_alloc(struct hfs_btree= *); extern void hfs_bmap_free(struct hfs_bnode *node); =20 /* bnode.c */ +extern int __hfs_bnode_read(struct hfs_bnode *, void *, u16, u16); extern void hfs_bnode_read(struct hfs_bnode *, void *, int, int); extern u16 hfs_bnode_read_u16(struct hfs_bnode *, int); extern u8 hfs_bnode_read_u8(struct hfs_bnode *, int); --=20 2.43.0 From nobody Fri Oct 3 21:05:41 2025 Received: from TYDPR03CU002.outbound.protection.outlook.com (mail-japaneastazon11013055.outbound.protection.outlook.com [52.101.127.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 363812D3731; Tue, 26 Aug 2025 03:37:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.127.55 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756179461; cv=fail; b=IqPv3Ro7Z9V9wtGPY7oMnhvX44CaIpMrhjNFHmvCTJVzqHThjACemURV1goP5Z1/1uoRTqfjnzuey5LtydM+BgTycLNAtbhx2iYID6L83Iq+2hBYUWcixWX7TAsFJM93Q0maxMIT2+Zk87sK7dxZcyXId+t4jR7S9KllwEWJEG8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756179461; c=relaxed/simple; bh=OwCYh9IurLDC/c2pQUjCGwiY9AQi1prv1MbGyjRYxF8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=rf041Awh6kLt2jEcIMIMgFNBDs6EM03qdiwepbKe9v7gvcy3chCtN9JnCLd2CduEYr177970HzJtSik9PFhr0A03Wy9j07D7Kxz3reowTK95YCGgoueLSUpX11L0tuY2SByGE7brl5huuNviBU0nkuKXVhFEWDRWBLvojliLWT4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=vivo.com; spf=pass smtp.mailfrom=vivo.com; dkim=pass (2048-bit key) header.d=vivo.com header.i=@vivo.com header.b=n1ymOUSC; arc=fail smtp.client-ip=52.101.127.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=vivo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=vivo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=vivo.com header.i=@vivo.com header.b="n1ymOUSC" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kPOdVAIxLhemmcGHWTGKAJtNtme8cokuAbSOI1FIeDcVDt+ZH5vz393AXuwgJsKpfEjApveD2qzWM/mPrFvQP3LD/1/SI68RZa+7PRKdKvEHrWw44mUpyzzmNKNeE2hUfCRVKofvIj4We2FNf+fg9uzVhsws8bPfl3ECVGQcjjVG049vfc9KZfDgRLNNdrjoGlUUmWpzV1HssXSiFohmUAkNPwOVuwzxhH2IG4ImgeYAMLfXJsCfjpy8qPPJgc8fTmLXKS5N8p9pg0uPpzsAJPqqpsmLB2gr9gwV6yfNPkJkbYoFjSrcQi1FVllUqxG0BEu+jMLll6C/JrG8q582rA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ARh5dcjodp3ZPnPzP3ZpLjL2HDumQH6RcxDKH88Yzyg=; b=Z7Gbsc46irx7D2NlNhgQS6MyFpRtH09zfYhLdqIIPYjf+jxeeNrKzQUbGchVgSSJywQigvep2yzYSpUXCmLu0czbp7Mv3pfwXUadmbfiU/X2Wy68qfBOjgXjZFGw07r7SYjvD87sHHQ47gN9UKQbRix9VIT+v444The/EzZ8SvjR1aLPw1FNTww67gk9WJHs+aYhSlKY++I/jSeER1UofAkNpQoFhRn5YL+zsMCUtXuCbf+xntiGSZqvmhnYR7+M/F/DgLM0jisfokWG0xAuLWgaEnvhsy35rGxneRxngvKtDRJrNOlVEtfHuVTl4b8W/jg+6yYG7CDqeozIK8Uxww== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=vivo.com; dmarc=pass action=none header.from=vivo.com; dkim=pass header.d=vivo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vivo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ARh5dcjodp3ZPnPzP3ZpLjL2HDumQH6RcxDKH88Yzyg=; b=n1ymOUSCFbCe43mvGOmum80dsHf65MAmFSwotzAXz2GGqtYVHm+IjCIvTO9y5ln+t85Btf8LwP1MNqUHLEGeNy8OZN3YviLFOkyPR65cePw9sTv3gm2G6tSJZpoBKU7PWUhurrXw00+YtxW+0LgaCIdZueATmPJL6khCW7F1AAqpqu7R90AKpexStZqpaQNmQcVyNz4zdyKUqufrraJSB3/f1uUELC4G+/RKoCkB+pe0b9PGlVQr+J2RLLtvq0g9YiQx1Nqj8oBT1+izBINg0QIGFFRdZUPUT2wBKNi64DjTiwNY7erOtTvAcIrXYjyd1wPbP0caWAOfLHXGxUYo7g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=vivo.com; Received: from TY2PPF5421A6930.apcprd06.prod.outlook.com (2603:1096:408::78f) by TYPPR06MB8049.apcprd06.prod.outlook.com (2603:1096:405:317::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9052.21; Tue, 26 Aug 2025 03:37:38 +0000 Received: from TY2PPF5421A6930.apcprd06.prod.outlook.com ([fe80::6370:9e0a:c891:a1a9]) by TY2PPF5421A6930.apcprd06.prod.outlook.com ([fe80::6370:9e0a:c891:a1a9%8]) with mapi id 15.20.9052.014; Tue, 26 Aug 2025 03:37:38 +0000 From: Chenzhi Yang To: slava@dubeyko.com, glaubitz@physik.fu-berlin.de, frank.li@vivo.com Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Yang Chenzhi Subject: [RFC PATCH 3/4] hfs: restruct hfs_bnode_read Date: Tue, 26 Aug 2025 11:35:56 +0800 Message-Id: <20250826033557.127367-4-yang.chenzhi@vivo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250826033557.127367-1-yang.chenzhi@vivo.com> References: <20250826033557.127367-1-yang.chenzhi@vivo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0030.apcprd02.prod.outlook.com (2603:1096:3:18::18) To TY2PPF5421A6930.apcprd06.prod.outlook.com (2603:1096:408::78f) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PPF5421A6930:EE_|TYPPR06MB8049:EE_ X-MS-Office365-Filtering-Correlation-Id: 6a54c495-5b85-42db-de89-08dde451e726 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|52116014|376014|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?6oj5KeGfsAZnqTUbyHGd8yCHzHXJtpN/9X1dXKK2sWZLl5TeyShzNPyGqKs3?= =?us-ascii?Q?nnYFlbS0W82V44D41c80Gcbh72KQBq5/4EYz70bjeskDCtPzUJ61fIKfPZ0X?= =?us-ascii?Q?ZFTgmUOC2DBG5YPOAACmpvNSxVnxe8rH3XmqL2CrjruJJUOQQna1wF8jXj+O?= =?us-ascii?Q?ANJLTglJWCJoG/ALe9Zr2Ranwti5ZRIJY9+H5i4hxcLBpZm3dAjvHPRYoGEU?= =?us-ascii?Q?Vh1G1Bsv90oiXbyCU7YTgZGghucW3SIyD+Rlam3JReYXuJK6kXfelvex7KAV?= =?us-ascii?Q?odUrZKFEgij3ss6g3y2C/CY2hnbpxR36NTXUvj+ahuE6rywqEXDnZoNiP7my?= =?us-ascii?Q?9imfxOxakxB+KmzC1Q7Gx/wEQC/Di5h4hqPywtbVL8Y56sell9ZrSzs0KtC+?= =?us-ascii?Q?oCqyTnDcIaLCzO3w52XXH6pk+noagyL5YqcBk3yJDZNNWNGFFJeAEXKRSUL3?= =?us-ascii?Q?c5xwHq5iFFx8jt3nMLUoRA7MlXQNbP5tu1renETFND1pgF5AKbV9sHH8zdVV?= =?us-ascii?Q?Pj7AW4YTaf/ux9ct6H1pBmYh3H4AUgksDkOIbeWhys7ac7aavsCycqPk2p3E?= =?us-ascii?Q?/crHXk9XbbkZaLIQ/iNuU8sd6mBtVqJPk2ndRF7MVTjpq5mG6Ud8a3F7mw7x?= =?us-ascii?Q?AIaG5GfS0DEnEjOG/umsjBsLRgW791+LKNBZ0Sl6XShV57cAYVFqoSaQZgdb?= =?us-ascii?Q?iG7py9FmZONt2t2ewJkvSVL6sJedbyCafwM/7OkI6GwB8o5QdqWGcwdWyP74?= =?us-ascii?Q?BN03EeEIC9AmH+8hyS9i85LxhdjziYAraJTjBANPBUYqF5VqOsZKX/IJXmON?= =?us-ascii?Q?oEBe0WTCSl6JaTaUr8maf3FkJ1aedR/r4HM8RwtwUMz+X0FIRkGp8UUYf7JV?= =?us-ascii?Q?yIZjqCr3dYYU2mIY4D/M8ngLI0jpJThRsnZnagyQ7hZEQSafdK8eTkwZRGz0?= =?us-ascii?Q?IgtbpWDa3TM488fsGhilikdLozcFRqUeEJk5kZ6SJx/+NKFrXAbkqLyvGfOj?= =?us-ascii?Q?1pqudllLVGvGSHWgzmE89zwdRdseepy4hJF09DT7Rvo9cUrMI/yXXykoB7cT?= =?us-ascii?Q?FydVw5OSiChb8LV3I8RKBLbvvMUo/HTm2qqWdDBgHvKERCRWK873lGdtxlsL?= =?us-ascii?Q?vQtNJpG5VPkx8xPS5t/PflYBhpiZeqixoJbqYkKlZvz2zDiPu7jelZt58Jrw?= =?us-ascii?Q?4KrjAT5rW0iHaxG44Rp92s6SYB3zz6reDefyFcyQxH/ULIuoim1jDGtm/GTn?= =?us-ascii?Q?N1J8IrFWT2XcUPX7c8j4TzCYyMI06xhl9AEs+nSC1FVKk0K/TW1tMGg0asop?= =?us-ascii?Q?mXFEOehgaGaxYU3VvEsDEF6AF+piGNPPAr+GD/KxdtU4xTCAsuA8IXjmNEHH?= =?us-ascii?Q?7m4G5EY3+MQJnsDjDaIIT3SfzGSvYmvsaG5Dgh7Gg2+e/kiFJv0EnJbPKbJa?= =?us-ascii?Q?4M1S1CNGfuP1hQW4EzE7tO9WR1A6nchc9CJ1CttBWBWmXgr1bUJgrQ=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY2PPF5421A6930.apcprd06.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(52116014)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?keMAbUihDxsuo5et9TPPK/BoFxv+XqlykcO/fc4/op03S9Eo2lKBWqSbV7LH?= =?us-ascii?Q?HBmiECydSoCLWYA0/5TbpkKvMBFxMd+If+kIah3CsQaiaFHjDptm0emldh0C?= =?us-ascii?Q?XB5XB2xcFG8WGx6hBP6ScI7Una5HGFS55TfWEsHVqDUubrIXcWgxQEQymYVS?= =?us-ascii?Q?yKRJkSjmp8cqJnOEtDLgYvUtO3ZQmuW39pWnAl/2fIufQf9BiZX/UC2++Be/?= =?us-ascii?Q?6/U160tG8OVRM7P4QiNPjzF+rJ0xhsuhU12Rn6dH3INLuKZf+LyL4EhJuWqD?= =?us-ascii?Q?zWMTgwNCmiblgKkTcHYYw5BLD81LWvmUlClaQi+bptjJog6UUmOWexCDUIz0?= =?us-ascii?Q?XQzrMH0y0khrgl0UtZH8Q/xd2Lu1+wopJA6RAA8pT+AU0OGd8OVflNg5Bmqh?= =?us-ascii?Q?WB/AXk4BpYvSeSNvEHOoq0hG/gXyHPEslZoaVBLLukis3ptTalASFnNhuiav?= =?us-ascii?Q?eDRCo++8eHeFVCjE9+VDlPorxb9moCbcXxFoowGs61io19r+2a0Q3oYay6FU?= =?us-ascii?Q?DSlpYv44HUiz7BohDkzkStL48hZhDHa3zI7tZeX0cqbttJOXzrbRbfTl83F0?= =?us-ascii?Q?mNWUJUwZaqdioAUnAoGbrLzp8JoxTeoZJOB9jGQ7W+Y9FHygzHmXoRh6wFbv?= =?us-ascii?Q?pdwPNWBdPYWDHTbVU6Tfa2M1CrN4PZhqpIEPHSyeMlgMQivMbGcXvqFCKYI2?= =?us-ascii?Q?4Jvms/auCAj9Q4htm5djB1c/Z9m71XcpIOHp8vP0lJjl8ILZdkjan79mvDiK?= =?us-ascii?Q?/NK3lUOT72A5M1Px4xYOJk71urekW8lHw6BDLAmp9u7z/J3Ac8155Cy+6P31?= =?us-ascii?Q?a+YIqwnoFh1oKh8tpk6gMKuhWu82fR7meMkseOpeWyb8uKDRe4mv/6MOkkwk?= =?us-ascii?Q?tLuKoQG7AkrdFKD6TxR0yYxRzjZqrdeXT9LOSYxNzlfYAPdUIvpsKPARkY+J?= =?us-ascii?Q?C35v4/T5Poyzzu2A1NlmihDrmJ+lRZd0niwI04gYfhpCD1e8NOI6TTUl/S/t?= =?us-ascii?Q?S9o+yJ1Ebo8D1RegbADeqqx4Z5KaJwvjGuAkn30Fx/vG6K0MCW8SNCPT8eVf?= =?us-ascii?Q?abHlrREwD/itGILJYmeHoOYNYMAjWlJDv9g91mzE1u6xsE0jgtP/Q61KUsv6?= =?us-ascii?Q?rNgnEKSRK22ho8SCv1saDYGL6lZsts2zY3heIiFkV7lb3mVOFc65pRHWsG0g?= =?us-ascii?Q?IMdnvYiBAhciUfjGMkbs+qvof7N+Rwpr7qoAMIu4Y6dAxpMwDAQrishINavM?= =?us-ascii?Q?S/6R5sHQj96SCY+9AP5F5tRs/SpOldPr0MRtKXZJHHDZSTVLBFEWZpFet7Rg?= =?us-ascii?Q?Zi1w1yFIzePy4b6oiDrWDzECO4fveGR3CK40g4C1ZTrdPQYo31WeS5l28S31?= =?us-ascii?Q?Z6YszuYzYC6n48w+EGCYRgb1veupUjknCEhuy9vrt8fczKsxdnINyRpnv+nt?= =?us-ascii?Q?Wi/0GUe38k7bNYbuwMroB6yyrtDqoyrcmtA7+ThsmZ0Qou4NrRjDpmloIRAB?= =?us-ascii?Q?NspY06MY6NRkaUtpWDPXx98G9xezUWvHfI7Oa50AKGa+p1HsM1cgzEl5qaz4?= =?us-ascii?Q?0wMOlTky60C5JR/bcCnH4nmQo5I0pltMFrBULB8I?= X-OriginatorOrg: vivo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6a54c495-5b85-42db-de89-08dde451e726 X-MS-Exchange-CrossTenant-AuthSource: TY2PPF5421A6930.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Aug 2025 03:37:38.0461 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 923e42dc-48d5-4cbe-b582-1a797a6412ed X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Rc+P6hk2LRd1CAitUuQR9EQD+0VAYfUCPwuk9GPxC7ksKEH3K5PgBsDARFUcDKrFRYjQsab6tMlySklXYvhiKQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYPPR06MB8049 Content-Type: text/plain; charset="utf-8" From: Yang Chenzhi Since __hfs_bnode_read and hfs_bnode_read have the same implementation, make hfs_bnode_read call __hfs_bnode_read and report errors when detected, while keeping the original function logic unchanged. Signed-off-by: Yang Chenzhi --- fs/hfs/bnode.c | 34 ++++++---------------------------- 1 file changed, 6 insertions(+), 28 deletions(-) diff --git a/fs/hfs/bnode.c b/fs/hfs/bnode.c index da0ab993921d..b0bbaf016b8d 100644 --- a/fs/hfs/bnode.c +++ b/fs/hfs/bnode.c @@ -112,40 +112,18 @@ static int __hfs_bnode_read_u8(struct hfs_bnode *node= , u8* buf, u16 off) =20 void hfs_bnode_read(struct hfs_bnode *node, void *buf, int off, int len) { - struct page *page; - int pagenum; - int bytes_read; - int bytes_to_read; - - if (!is_bnode_offset_valid(node, off)) - return; + int res; =20 - if (len =3D=3D 0) { - pr_err("requested zero length: " + len =3D check_and_correct_requested_length(node, off, len); + res =3D __hfs_bnode_read(node, buf, (u16)off, (u16)len); + if (res) { + pr_err("hfs_bnode_read error: " "NODE: id %u, type %#x, height %u, " "node_size %u, offset %d, len %d\n", node->this, node->type, node->height, node->tree->node_size, off, len); - return; - } - - len =3D check_and_correct_requested_length(node, off, len); - - off +=3D node->page_offset; - pagenum =3D off >> PAGE_SHIFT; - off &=3D ~PAGE_MASK; /* compute page offset for the first page */ - - for (bytes_read =3D 0; bytes_read < len; bytes_read +=3D bytes_to_read) { - if (pagenum >=3D node->tree->pages_per_bnode) - break; - page =3D node->page[pagenum]; - bytes_to_read =3D min_t(int, len - bytes_read, PAGE_SIZE - off); - - memcpy_from_page(buf + bytes_read, page, off, bytes_to_read); - - pagenum++; - off =3D 0; /* page offset only applies to the first page */ } + return; } =20 u16 hfs_bnode_read_u16(struct hfs_bnode *node, int off) --=20 2.43.0 From nobody Fri Oct 3 21:05:41 2025 Received: from TYPPR03CU001.outbound.protection.outlook.com (mail-japaneastazon11012011.outbound.protection.outlook.com [52.101.126.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6DD4F2D47F5; Tue, 26 Aug 2025 03:37:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.126.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756179465; cv=fail; b=q+3q2KvH7FwNZ9cCbXWRJ+P0oa8FApUVKgjzK+Blr3INGNitaya0937wZA16fCm64DiMPAcwgtMae/YAryQEdEbEYYU0A+oceDRdiwnStSr9BFAlaNKAfPkptzurgEnDkTvO1HWsI/HK9YB7HNFDV/YhN/P9NCo4jLj7ncc2+0g= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756179465; c=relaxed/simple; bh=z8OikXUVWHUfcLDTzniicmJ4H4lZp01TsfxteW4Pxk8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Q2QR9ujhUPfq/4P49wifSCNygEOjYd8NAJmhREnsbBuvJGFzsbSW/eZ/amMR02+s7C4otfle5lt4oMfVrsH0c9PBLr7VUDTJp15nAAEguAxQ5O9kVgz38tKX54RnzrIw1a/U0nwyYuLgoRI2OgJffqdmJvYchbqxXjyvZsijGGI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=vivo.com; spf=pass smtp.mailfrom=vivo.com; dkim=pass (2048-bit key) header.d=vivo.com header.i=@vivo.com header.b=OVFg10kd; arc=fail smtp.client-ip=52.101.126.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=vivo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=vivo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=vivo.com header.i=@vivo.com header.b="OVFg10kd" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gIGKvl4dMW4P6iFm1bafxkLSKYpanHckrVbD41MYRidcvEJAwjLeBLhpjXOkureprNMF7OvCV/lnbh6udSUzczABLVNfUwtLeYinT44E8kDEO1s7F3fNRhcqiOsDukDx3QJlmJ1qtuCy6n0HMyKqOVmV7dkneUsA4xBNGFXDkW31vo4W1kmJBIyog9MRTw0LnB/MN3r6C1z2SxN+qGgC3E3WXP3HerlyMLWUfkg8gHdToGshRoEJVcmRTmeUDXpwXan8QHE88EHlHrZM7+OHJ1mL5unukdtZRhjh+7y7Y1xovzNVhKdybYHmLHLTTJPg8bRQba80kXB7sL6HUpOf8Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=M4yQ+GMFSLYB46RLcXWm6mdmzhwhqr1gZWpV76GGgW4=; b=QPLhElZhlM8RcRdLP6xwOg4yOaD/bPBROW7vhfA0VeyfiBybvDWQ6iIKHJwSIgmCvWdG4Sp2+GfLHyXCO49jolCfcQkZFZk8XDZ6F11KTk9eOFyusiWx99rNI0zxO3ZyNdTHPJ+SzCNJRq+fQ9yPf4IQpe2Ja4PpeTmtg2s0iPa0VhvM9Jc50xO7Y0HiyL99XE9SomFXoRDvgZTw6UoTMkyvjSRQSZkkfJQheUkJVKDJP+/fii+FAQ7dF7HXjHIpWIYlkk/eHMw1MWUmY9y4IGV2basHJb/Vp48BrhVaS6p3yZ+A/ltLqqQ6W0Wsn7IzGBs3NIuu2eDD0tN2vHQ7nw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=vivo.com; dmarc=pass action=none header.from=vivo.com; dkim=pass header.d=vivo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vivo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=M4yQ+GMFSLYB46RLcXWm6mdmzhwhqr1gZWpV76GGgW4=; b=OVFg10kdS85cuJ+ZcCWB/euxUYsYIBANuDyINRx7d2d0m4dmOOw/raAr2qXVkFtpn2TUnPGYsN6oq1tYgRtCGuMblZVIlPUaG1H7GRfOUnnXFT2fubmeeJA7fEdc6CXeQL45Ypa6zfizBhnumofdcUXpB5rMmxoFkGR6vJxOlC3Eab0P7clYITzjJ2YtHfXQ3AsV31OFlALMDvQRMyDIF7539Wh9IST/xca2qS3YWe0NKTTYsNs9ALY1EG1o/AH7tZMtBWfGqF78HSxCSUsvcxu71QUQ2a2g7JJuD0Ehqo6Crl61wbiAhs+4sdESZ1dss5z5CEt4iRKfTnbByp045A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=vivo.com; Received: from TY2PPF5421A6930.apcprd06.prod.outlook.com (2603:1096:408::78f) by TYUPR06MB6027.apcprd06.prod.outlook.com (2603:1096:400:351::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9052.19; Tue, 26 Aug 2025 03:37:40 +0000 Received: from TY2PPF5421A6930.apcprd06.prod.outlook.com ([fe80::6370:9e0a:c891:a1a9]) by TY2PPF5421A6930.apcprd06.prod.outlook.com ([fe80::6370:9e0a:c891:a1a9%8]) with mapi id 15.20.9052.014; Tue, 26 Aug 2025 03:37:40 +0000 From: Chenzhi Yang To: slava@dubeyko.com, glaubitz@physik.fu-berlin.de, frank.li@vivo.com Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Yang Chenzhi Subject: [RFC PATCH 4/4] hfs: restructure hfs_brec_lenoff into a returned-value version Date: Tue, 26 Aug 2025 11:35:57 +0800 Message-Id: <20250826033557.127367-5-yang.chenzhi@vivo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250826033557.127367-1-yang.chenzhi@vivo.com> References: <20250826033557.127367-1-yang.chenzhi@vivo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0030.apcprd02.prod.outlook.com (2603:1096:3:18::18) To TY2PPF5421A6930.apcprd06.prod.outlook.com (2603:1096:408::78f) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PPF5421A6930:EE_|TYUPR06MB6027:EE_ X-MS-Office365-Filtering-Correlation-Id: e88cc202-c346-4c14-0720-08dde451e8b3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|52116014|376014|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?/FFTzDaUzoNU4NPfoIRTizGTQHR0VpHG8L7hv277xjXpc/o2erhlZocSN2/Z?= =?us-ascii?Q?LSoiyVrP22iH+Ww4+/HWzAD5DDE8baW9qqHc0c33WrZFi2D8HLlE90iFig34?= =?us-ascii?Q?RLoQaMYgJgkFNXrZjTT9U4QFalFkZY9snwB2rKZcNJSmJ9/R5MiM+Uni5SZn?= =?us-ascii?Q?QT8kXIeZayt0ziHdVFm5hutY5aZewgVJZUghEepV7H0eBLg6VS2DMCGoskHO?= =?us-ascii?Q?aKTSu7g4p6mmO8bN8VSqID1gATFDgerbVxReialq2YynlthHaC9o9f9gU5ju?= =?us-ascii?Q?KtCUUysG6uBAn3+5pJGQxJ3tBY17mrv1jMGBbcA8cvm46VsP+aV1NREw90nN?= =?us-ascii?Q?OLn/a0hCd6Kf2rnO21oS2LJuORv0RGyxBxOezFxFs83+34Km1rY6pJ1Pl1or?= =?us-ascii?Q?9t+jOEtK1Mfjai2hF3ki0B2kc5dbKR5HmPZnvs/RGPsKb+fG4sO7qIvS4VvG?= =?us-ascii?Q?Iqz/yyNdThX+Mmzhr5bXknuD3qejmchOTlatsT1Du+CB0ZALYw6xq+33oYBr?= =?us-ascii?Q?+nlxRO5sJ76GwbCo70c+Z/VEzBnvZafFB/t/GK6TtNn+PQEFzoqw25k4wORI?= =?us-ascii?Q?nICYltU6dStPfBLTX/JMpHy9N3mDsDqzjsoTwtWjMNpdZPaMRMPrV3LPZN09?= =?us-ascii?Q?Bv6zPK+ylKhPVoZ+mAFxovbhohFsl1ToU4flUU/s5ClzhCTnakZlzhXXKRa/?= =?us-ascii?Q?FHQt0DMRBGzangnqo08YiE49f4WaRSGgt5/YCdBw5Nb9sD/BA3gMKUvnkCwq?= =?us-ascii?Q?ZDL6PBSvc20rP6behRtZAbHcTLkfegdm3FhXBUOkCe3v425CjIDXZvRHDGa3?= =?us-ascii?Q?qJ+d7/fGjZYOaDCsQ9KxCOYlvO2GX1IIVvpLjFejonHc28vX8EjSc0TCFf5y?= =?us-ascii?Q?I3ADS0fhJ5zpBT7M2jX0N4WIUZWE+p31BP3i495HcWmjM0GXngf7MH+7U3Ua?= =?us-ascii?Q?quvvdaLT0x5We9qLM78r+K6OWwt5cRteO2Thuqq3Q8+jJhKy+jK9+vFKoQ7D?= =?us-ascii?Q?zow9xOoRjSm/pWxw6v/a4kUtyfFoeYpahAV0+9W7EhdfdAMfO1I9Q4BiWn8+?= =?us-ascii?Q?GkzKB4e42d3K5HIlyM8MU+El3pgy6VTK8cAn1hNMfWUEkggiZ5nBOq1s03pR?= =?us-ascii?Q?iDp9v0dF3pnD5CbcSBKujkn6MGZOspMgvBa5j6v6zDr0Z/WsZ6C56WiEK2iz?= =?us-ascii?Q?JiQRpIZRWaqRAZiugR1dhhXfEzVRsIFWeTcj0GHmwLgassZHunLHisCUTsMH?= =?us-ascii?Q?rJy0POcw03ig71aK0bnnp1d5wECglKdHal+/lOAviKTAmgsqT+OGmmArPUMU?= =?us-ascii?Q?Q4hutfxsjTx4amNfuDfYYHM10OY5GmBa/lWwX6oz6ZdkdEXbH3TWTGFxJ2en?= =?us-ascii?Q?sb08ZoKpijQuRiGbpOvoKBnOsFWlKJppvyouUzLITGLiEa81DcD1oAn4aUI8?= =?us-ascii?Q?RLCbgw8hW0KkDYHwIdPXLurd+lGyl221rYy5Fo+4kBqoEk7aYknn9A=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY2PPF5421A6930.apcprd06.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(52116014)(376014)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?vEpLHzu7OiHTCUwG2yyGM7jPhViJr9Ho4HVikna3lgwpONb9KIEQOz6PLwYy?= =?us-ascii?Q?7XHCvN6dBIubn/rCJhWT0wd/yVedP1AWNmHjVrh7bLOFzxTFDuayd8JWctYM?= =?us-ascii?Q?Yl6TSMcQ7XoZPB8NbWCpPS2BZdZXqtQ3rpftRh83nwtuEAQkoZfrU7A6GhUW?= =?us-ascii?Q?itz171LRNgvzJsYz45xgH5x6+/WxKtIBPfzzUrAFzmVkjEGiAbpdjf6Pw81M?= =?us-ascii?Q?+xxNhwyjjOt0hI0M1QpS2TiDAa+jfQo3+/5OIiHBEDc3Br5wTJp5GdoJ4CHI?= =?us-ascii?Q?hLvKxu5XjzB/Oo93xeUeaeZaSxiO5OI4XcAvIzHo85u3E2Wb6yWo+L1muMme?= =?us-ascii?Q?jDFkgC54RqD0djtbE9jDUW3YEGXEVCa7sZwxymsi08Wvhd44AyUo/oatL/0s?= =?us-ascii?Q?wxi9PcA82iJ0ufo6ymfnRPFYKFsDgGQrSgv82J1IRqkJ7bmD/SDMOdMsdQbX?= =?us-ascii?Q?CzGdCwYVhFxEKwNu5C27MVcbRPrKWLzEwigyBKO82POZyeyGLEA2K4tem2iK?= =?us-ascii?Q?pkos7IXjU5sOY3+JyFx1cbwyEaG5RKWTs/AsMrWeRzJCV6G+zbrTnWboomAy?= =?us-ascii?Q?g7AINlkypFU0k6LVAW0AYeuXTrqnSr6GlDrPIlBJ4Jjo8HvNTgNXukZ9yrYY?= =?us-ascii?Q?SsbhpwYBBlrDH5PAFUv8I+eKbUW0fxhx3mV5hSWf104hV3l9CtX7oUSgg8Ji?= =?us-ascii?Q?qJfizgvhj39F6ge1POfTYpt9nfOZd0+u1Z3825iPB7LaAVrwda3s2P0kIZyI?= =?us-ascii?Q?dm8pys3qvMBvHwJ+ZP1Ms8oGeFWxWqG0gKpKEq2GqITY6/j1uw511Ehb/6+N?= =?us-ascii?Q?av1UNcgm+0Q8TLd06x4DYFwCmPlJUGPcE7wxDsMGsV0uxiXmtXI39hZRzifW?= =?us-ascii?Q?LSh0RU+YH7N5RGpyp3NTriEUBYBFAlV1gvOI5/5rU0ILsgCgTtuUjZFI54r2?= =?us-ascii?Q?z8ARxAj/VS0nsyLqVxIx878iUmBOnmpoekEx/Y3nj9jH06UUOq8fnYQaIho6?= =?us-ascii?Q?vwRLygocSgkfHemYT/PICRXHo/vK4OGxJAqqTfykSy/QQ/gOMLQ554w2pN/F?= =?us-ascii?Q?3dnIpkpEcHrnAbDGCgZKVoKLPNhXfvEPOwWQhkEYh372te27lCSWc6kAKVLu?= =?us-ascii?Q?ZbawZzqIMtm0x+3nMGvwPqIpO5Wpe59ljZspCuI0I75K9b0SAcFU0MeoZx3+?= =?us-ascii?Q?/8QDteFKOqov7Q8hSE51TMewejPkN5BtZ1mIwWUxIMqEd4UnDbyaD0M+U37f?= =?us-ascii?Q?eb/zjfp6bPgmg1IxM6khchcGfkO69GT9fqlVV/zAuCeHxjNmg7w7YNqNoQcM?= =?us-ascii?Q?yGE7HfDMxQwog1li/+uFo2c9oXSHixy7lMqQqPLbLJZf5Nm8auU17+uA4fkl?= =?us-ascii?Q?Fu7GTh7J1kBlWLL9wGzxGNwY5zwdgDTMQdkabi6/mTO72gM0cbDt+1HZB0gr?= =?us-ascii?Q?azMpokuWSh8u6onFrkl3xz5qoyI6IZ6obl2n7XT8GRb5E2hgdq9bYhrNiM98?= =?us-ascii?Q?nWLChBvZrUXuif0d5sUqNK16QueAGXcWw7srQEbB3Dwvq1+MTFBeLwGGaMTp?= =?us-ascii?Q?/4W+7ABXpjsSnoWVQuH/68ufTzzCcQtVWk1HnZ7e?= X-OriginatorOrg: vivo.com X-MS-Exchange-CrossTenant-Network-Message-Id: e88cc202-c346-4c14-0720-08dde451e8b3 X-MS-Exchange-CrossTenant-AuthSource: TY2PPF5421A6930.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Aug 2025 03:37:40.6781 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 923e42dc-48d5-4cbe-b582-1a797a6412ed X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Tbc7N90w//nMCefbTUk03aSPr0p9KkoJp3a+MPQT5lPkSQQQM2F8TwX0cqdqoJ54/kWBDLkPYS+GY+EAQFgtaw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYUPR06MB6027 Content-Type: text/plain; charset="utf-8" From: Yang Chenzhi Restructure hfs_brec_lenoff into a function that validates both offset and length. This function now returns an error code to indicate whether the execution is correct. This helps fix slab out-of-bounds issues in hfs_bmap_alloc Replace the old hfs_brec_lenoff interface with the new version. Signed-off-by: Yang Chenzhi --- fs/hfs/bfind.c | 14 +++++++------- fs/hfs/brec.c | 13 ++++++++++--- fs/hfs/btree.c | 21 +++++++++++++++++---- fs/hfs/btree.h | 2 +- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/fs/hfs/bfind.c b/fs/hfs/bfind.c index 34e9804e0f36..aea6edd4d830 100644 --- a/fs/hfs/bfind.c +++ b/fs/hfs/bfind.c @@ -61,16 +61,16 @@ int __hfs_brec_find(struct hfs_bnode *bnode, struct hfs= _find_data *fd) u16 off, len, keylen; int rec; int b, e; - int res; + int res, ret; =20 b =3D 0; e =3D bnode->num_recs - 1; res =3D -ENOENT; do { rec =3D (e + b) / 2; - len =3D hfs_brec_lenoff(bnode, rec, &off); + ret =3D hfs_brec_lenoff(bnode, rec, &off, &len); keylen =3D hfs_brec_keylen(bnode, rec); - if (keylen =3D=3D 0) { + if (keylen =3D=3D 0 || ret) { res =3D -EINVAL; goto fail; } @@ -87,9 +87,9 @@ int __hfs_brec_find(struct hfs_bnode *bnode, struct hfs_f= ind_data *fd) e =3D rec - 1; } while (b <=3D e); if (rec !=3D e && e >=3D 0) { - len =3D hfs_brec_lenoff(bnode, e, &off); + ret =3D hfs_brec_lenoff(bnode, e, &off, &len); keylen =3D hfs_brec_keylen(bnode, e); - if (keylen =3D=3D 0) { + if (keylen =3D=3D 0 || ret) { res =3D -EINVAL; goto fail; } @@ -223,9 +223,9 @@ int hfs_brec_goto(struct hfs_find_data *fd, int cnt) fd->record +=3D cnt; } =20 - len =3D hfs_brec_lenoff(bnode, fd->record, &off); + res =3D hfs_brec_lenoff(bnode, fd->record, &off, &len); keylen =3D hfs_brec_keylen(bnode, fd->record); - if (keylen =3D=3D 0) { + if (keylen =3D=3D 0 || res) { res =3D -EINVAL; goto out; } diff --git a/fs/hfs/brec.c b/fs/hfs/brec.c index 896396554bcc..d7026a3ffeea 100644 --- a/fs/hfs/brec.c +++ b/fs/hfs/brec.c @@ -16,15 +16,22 @@ static int hfs_brec_update_parent(struct hfs_find_data = *fd); static int hfs_btree_inc_height(struct hfs_btree *tree); =20 /* Get the length and offset of the given record in the given node */ -u16 hfs_brec_lenoff(struct hfs_bnode *node, u16 rec, u16 *off) +int hfs_brec_lenoff(struct hfs_bnode *node, u16 rec, u16 *off, u16 *len) { __be16 retval[2]; u16 dataoff; + int res; =20 dataoff =3D node->tree->node_size - (rec + 2) * 2; - hfs_bnode_read(node, retval, dataoff, 4); + res =3D __hfs_bnode_read(node, retval, dataoff, 4); + if (res) + return -EINVAL; *off =3D be16_to_cpu(retval[1]); - return be16_to_cpu(retval[0]) - *off; + *len =3D be16_to_cpu(retval[0]) - *off; + if (!hfs_off_and_len_is_valid(node, *off, *len) || + *off < sizeof(struct hfs_bnode_desc)) + return -EINVAL; + return 0; } =20 /* Get the length of the key from a keyed record */ diff --git a/fs/hfs/btree.c b/fs/hfs/btree.c index e86e1e235658..b13582dcc27a 100644 --- a/fs/hfs/btree.c +++ b/fs/hfs/btree.c @@ -301,7 +301,9 @@ struct hfs_bnode *hfs_bmap_alloc(struct hfs_btree *tree) node =3D hfs_bnode_find(tree, nidx); if (IS_ERR(node)) return node; - len =3D hfs_brec_lenoff(node, 2, &off16); + res =3D hfs_brec_lenoff(node, 2, &off16, &len); + if (res) + return ERR_PTR(res); off =3D off16; =20 off +=3D node->page_offset; @@ -347,7 +349,9 @@ struct hfs_bnode *hfs_bmap_alloc(struct hfs_btree *tree) return next_node; node =3D next_node; =20 - len =3D hfs_brec_lenoff(node, 0, &off16); + res =3D hfs_brec_lenoff(node, 0, &off16, &len); + if (res) + return ERR_PTR(res); off =3D off16; off +=3D node->page_offset; pagep =3D node->page + (off >> PAGE_SHIFT); @@ -363,6 +367,7 @@ void hfs_bmap_free(struct hfs_bnode *node) u16 off, len; u32 nidx; u8 *data, byte, m; + int res; =20 hfs_dbg(BNODE_MOD, "btree_free_node: %u\n", node->this); tree =3D node->tree; @@ -370,7 +375,9 @@ void hfs_bmap_free(struct hfs_bnode *node) node =3D hfs_bnode_find(tree, 0); if (IS_ERR(node)) return; - len =3D hfs_brec_lenoff(node, 2, &off); + res =3D hfs_brec_lenoff(node, 2, &off, &len); + if (res) + goto fail; while (nidx >=3D len * 8) { u32 i; =20 @@ -394,7 +401,9 @@ void hfs_bmap_free(struct hfs_bnode *node) hfs_bnode_put(node); return; } - len =3D hfs_brec_lenoff(node, 0, &off); + res =3D hfs_brec_lenoff(node, 0, &off, &len); + if (res) + goto fail; } off +=3D node->page_offset + nidx / 8; page =3D node->page[off >> PAGE_SHIFT]; @@ -415,4 +424,8 @@ void hfs_bmap_free(struct hfs_bnode *node) hfs_bnode_put(node); tree->free_nodes++; mark_inode_dirty(tree->inode); + return; +fail: + hfs_bnode_put(node); + pr_err("fail to free a bnode due to invalid off or len\n"); } diff --git a/fs/hfs/btree.h b/fs/hfs/btree.h index bf780bf4a016..78f228e62a86 100644 --- a/fs/hfs/btree.h +++ b/fs/hfs/btree.h @@ -117,7 +117,7 @@ extern void hfs_bnode_get(struct hfs_bnode *); extern void hfs_bnode_put(struct hfs_bnode *); =20 /* brec.c */ -extern u16 hfs_brec_lenoff(struct hfs_bnode *, u16, u16 *); +extern int hfs_brec_lenoff(struct hfs_bnode *, u16, u16 *, u16 *); extern u16 hfs_brec_keylen(struct hfs_bnode *, u16); extern int hfs_brec_insert(struct hfs_find_data *, void *, int); extern int hfs_brec_remove(struct hfs_find_data *); --=20 2.43.0