From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (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 888DC3630B4 for ; Mon, 16 Mar 2026 21:10:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773695442; cv=fail; b=an8K9rm0jNFUvLac+iYZ/r0lGnLLhFSVU9H3sviOSUszXyCIZPIxKNNNL55kFcK9duys4xXkftUudMmwx32qK41bck0rOJe5vvgjyS8iSDt9Uc0Sr4HAQ7zgw1zjHzvwFJ7jz28KY+dqO1YwXUMK2HEO+UqQyh1oLzUvJirwJMI= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773695442; c=relaxed/simple; bh=tDqCsbOE68yFzhF5HhfxCVDSP8Perqlm7HtRmDLyMx4=; h=Message-ID:Date:Subject:To:Cc:References:From:In-Reply-To: Content-Type:MIME-Version; b=ePs3IplOa9OyQuBEKsOxm+bmqJeBxSomcuSxyOpmsaMqqdeM+BogtCnPTs71UIRxFAuWnepiNj6xzmYQREv/St/dwROQ6bJFtrsCFzMuCskW4srL4vN5OS80P6f2zmyJGMNpA1VqM/YXGKZ5SfzbsdEZxhJu+lwi/nSxMM5ckdw= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=CnTjL0qS; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=Kkn05PCz; arc=fail smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="CnTjL0qS"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="Kkn05PCz" Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62GKXaMb494946; Mon, 16 Mar 2026 21:10:19 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=Hh90+0LV12vt/xxHrFwRHIM7so2mBRcVAPBNAsbRi4k=; b= CnTjL0qSiyzoGJqNfLjb0NkDtT7LYpOoXD/GfFd1DYRrBAQPxk36SMynyq4UYFAj vnDIXVWrurY3pJG0hne6QWemVjtFK6uY4KzZRkcUoOgRivjMfEe74WDUWLD8IG43 pFGYnXiVaGWxaQ4h/4SvgjkbgNz2FNipxeRdok2ZJ060mHI4hxBFsqZTK5a0rMUL bxJEFIBuO/JWmiZcndzOMrWZfguiQPpFmOwi+yJwYEto1XqgwS0rku4vMalzC88p SbvPst0uhc8asJCRH1GWYkGBIuYp+EFK+XHubaIa1jC9lAa6nseVHQk596SV4wGZ KznJKjd4E9WoRrjKnSawxw== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cvy9ru2gx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 16 Mar 2026 21:10:19 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 62GKr5Km002761; Mon, 16 Mar 2026 21:10:19 GMT Received: from bl2pr02cu003.outbound.protection.outlook.com (mail-eastusazon11011046.outbound.protection.outlook.com [52.101.52.46]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4cvx4kdgfv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 16 Mar 2026 21:10:18 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MiOv041ehmjoZhy1MNq0tZEIkX8M1dLId+sUO1Mz2KMToa8baHP7ASrUjLdM/oIPa0ZZ2JeiwFqBAb8V9ND38KN+4FE+IPqXw978lLUNzHIBeWrBEILdxsfATQm/kwZuWoXFSlS4fFOHoiTebTnM6wvnMNrx/P6KaDM//ELmh2318oEp7g4eDrOKhl0wD7mzHTEK/vZQ4EiVsEFuZ7YeNuNupE055ncvTTEoMZBZVXSl/E+dGlBrKhPxOYiF4+bmr544F6q97fXnkGLji9RRB2bBk1ofewSF8HevDexXUAiki1b8YQrp4ISGMJAX4IlkJDF78m3YHge40tRlB84syg== 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=Hh90+0LV12vt/xxHrFwRHIM7so2mBRcVAPBNAsbRi4k=; b=Unj6AEzQNsGwtnuDIasvzeFe9avystNOu5+L4JT0nP7mvIwpvM/Ki6yiuuDoHYJ0DROu0rN1MSL2uq4pr6F66aqJHxLuJ30TuWhiLZakeZR9RDzjhO5leWFy1vFkBDiTMm+6vV7LaZkyWecSLlI/OuzNZkWdP7Gs40m7RA5xTYCMpjQlIPtWtnbJcxqC1NJX8Lp80H+SiFvSg6V8vMKJ7zMkEnIENx7iG7WXR6MA3Z25I5rWd7Oyjijo9nAh/qm0h+hlV7ljtLWxg+M/XHNZTxwK7jdnKIfF77po4pIMWr6KgtljZp40DF1tUZt+7Z7LkXB8yXFDX+bLz4mMKlfTSA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Hh90+0LV12vt/xxHrFwRHIM7so2mBRcVAPBNAsbRi4k=; b=Kkn05PCzaXyyMSyGoxtO3qjerlbzc76J/UsTD99b1piD/BYdqeXW8ASyNMmJM6lc6dWYstE/gSi7HMcypBS2zbwefGVW1GOpd+XNzasuyIJVZsx+M0xYsC1jYgsQ2s4rIH0RCCTibDXkshK6bGR3x2OZQn5Dhl3KpapZXtLYCHw= Received: from IA1PR10MB8212.namprd10.prod.outlook.com (2603:10b6:208:463::20) by DS0PR10MB8152.namprd10.prod.outlook.com (2603:10b6:8:1fd::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.25; Mon, 16 Mar 2026 21:10:16 +0000 Received: from IA1PR10MB8212.namprd10.prod.outlook.com ([fe80::ee8a:bd21:f1cb:c79a]) by IA1PR10MB8212.namprd10.prod.outlook.com ([fe80::ee8a:bd21:f1cb:c79a%6]) with mapi id 15.20.9700.013; Mon, 16 Mar 2026 21:10:16 +0000 Message-ID: <3d652939-0e82-4c19-8c7e-41589aba6d26@oracle.com> Date: Mon, 16 Mar 2026 16:10:15 -0500 User-Agent: Mozilla Thunderbird Subject: Re: [Jfs-discussion] [PATCH] jfs: add dtpage integrity check to prevent index/pointer overflows To: Yun Zhou Cc: jfs-discussion@lists.sourceforge.net, eadavis@qq.com, linux-kernel@vger.kernel.org, kovalev@altlinux.org, contact@arnaud-lcm.com, zheng.yu@northwestern.edu, rand.sec96@gmail.com References: <20251120154400.1042123-1-yun.zhou@windriver.com> Content-Language: en-US From: Dave Kleikamp In-Reply-To: <20251120154400.1042123-1-yun.zhou@windriver.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: CH2PR05CA0006.namprd05.prod.outlook.com (2603:10b6:610::19) To IA1PR10MB8212.namprd10.prod.outlook.com (2603:10b6:208:463::20) 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: IA1PR10MB8212:EE_|DS0PR10MB8152:EE_ X-MS-Office365-Filtering-Correlation-Id: 77000308-63e7-414a-af2c-08de83a06c2d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|56012099003|18002099003|22082099003|7053199007; X-Microsoft-Antispam-Message-Info: IFztxCaRV1gyHQNqoPbDfOSb1BDrrdEOlsf0BtzFPSM8OnfMitieGvFzLk/q0GQpRyuwfIjCSCStS/RdvG6z/wOz/KFbEgUDrUDnd5aJ8qhRzlkeaoOcq+8Gz5lJ4ItU2rMKERsmHlMZZBgDRVELYzFRgIpByiJrTiLpF/o/V2K8bOEn12toDvP7B4k9Gqsa1IurCwkP4xSBf2fOAkNyMApTQLTY0tr9jEiN3+S52H7PMNcuqw4NuaNbc7Sou/vAarRKLILyu8UN2Xaby0vo9twG907FPTNBusfLgc8Cb4rZ6Sqlnl0rKRVn3fiPm8gF8EEZvqqmK0qHCGUGwc2KaSI49XChMCzEFrcHh67sA0EqvppVurzqikt+wThCzqKZMKDs2g64lv8sSB/q1yfouEa0+nv67w5tvxVxBpodSnBpbnWzGIsA5cDKg6ipovBSORSPPHje5oBte+AR1Uy7VriEQenFZU5EbgQVqvJGcDM3eTd1SAgGcBcKB38i7TSzp/UhIyaKuYoPGs6+RVtpyG8m27u3IvH7meXYztNBxga8mjMf6ybTGwJKBqOqT1tifEmN/Xbk0ZvlNoMrhJit/6isWSVOtRJ7JPDPLKolheS9OVgcTSOKBwg/5uWnyII3NnmtIZ2Aii/8jrW2iJ3yjDwBpMX4jbF/Zo4cg1D2c/ZyJXhUxkuO/F+pQ/QQ5fEP8wZ6EtHqay31WIJDAE3NirawbT91/m1nKarOCrrnkHw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:IA1PR10MB8212.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(56012099003)(18002099003)(22082099003)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Ums3eEMzaEY3VnFwMUJXK0FLZGt0Yi9Jdnh6ZER5d3lFQW9wd0lBTUNGQ2lB?= =?utf-8?B?Mm96MlNobC9ya3J2QnF0NFNqZzhEM0lsRjdkVnNJQUxhTitoNE4vMFYyRFFy?= =?utf-8?B?ZkFsbFR0VlpaVXB5NnZlSlRjTkdHVTlCTE90YUNzR0JCRHJnanVFb2d1alNi?= =?utf-8?B?M0Qzd3AyWnU5S2dVYmNjVEs5MUJ6VDFJSHU4RndhcVRCL0tJTTJQeHdiN1lu?= =?utf-8?B?ZURocWRZVDkxWUhzQjBncEgvQWVJNmVRVjFoN0krcUQxQklyLzNqczJ3dTJY?= =?utf-8?B?bWx2R2pBQmRxN0xwK0FHMlhrckttc2VScGhVU0d3eWhFMHNnU0VXWUdqYlNT?= =?utf-8?B?cGNQOE5EY1Q5VjAvd1dUK25FeWZpSVNrK2NKRXFmUjR6Rmc0M1NsTTI3WHY2?= =?utf-8?B?TkRjTzVkaGJHekZ3OWNxMER1dWczMFpVSnRzV29NQXk4VmN5akxkNCtxYVV1?= =?utf-8?B?TWRyRStDNndPWDYrbnhGR3ptTnB3em1ZNytQT3FBczlIVWpVenBnRjZjTFlQ?= =?utf-8?B?aWUzNnFIVm1mdE5MKys2R3h1V0JwWWM0Z240ZElmN2g2S0xtay9wZnp1Nncy?= =?utf-8?B?OWdaaXZMa0wrOXJvak00UDRDcW1DaGdhVWJDNzZLL1FHK05kTVQ5S1U2WDdI?= =?utf-8?B?b2toMkpyK245bFV2bzlQZGVoWmRLN3R5Z0RUaEppY3hUNTdpRWdQZTl5aER6?= =?utf-8?B?RXdiVDFmd2hlcWNqUHVLUXFKQWR1aGtsT0plTDFndGlLTk91ak5VS3hhbGcx?= =?utf-8?B?c2U1U3hIbGx2M3BndDl1OFlaMVo1eVMrN2pMZld5RFpXRVp4SzdVS09MZXhG?= =?utf-8?B?d3Z2bGNMZFQzSDJIRlQ3RlIyN294bWhtMHpGL0dIVU5Lc25KQWlHL2tWMDdG?= =?utf-8?B?cEJmV3YyQzI4MmRwWDdmNmw1dkRxN01qQXVTTkF4UG5UTEpWVGVUL3NBd1FU?= =?utf-8?B?OVlLUmY2SHA3cVc4VEtNZTB4SFlGNDN6QXA5VTBjdnBocTZJWDBsSUtXaUxZ?= =?utf-8?B?VTJRMEV5bGE1QW03elh3WkREWEFjeXFsWmdaQ3NOK2tBWkxLN0tIMTVnODE1?= =?utf-8?B?dGRtTGJyOW1sQVo1VjVKb29Hcm9jdmVQaStqL1kxaUZ4TEgwTUJuNHhKZDhl?= =?utf-8?B?R0RtR25MSHVSNzhGZW52c29CRWFOTUpXVWVEMTdsTDVaTkpmV21idmxoOUpw?= =?utf-8?B?eFNWY0lad3dMM1NESitZSkMxTitwdTk3ZERDTWVUdmdOTG54RktOeDBRb0I0?= =?utf-8?B?S0IzUHpqS2tVampwMWQyL2hkY21iTzNUM3pFVThrVGxnRW45bHNZMkhYRUph?= =?utf-8?B?alV2M3U2ZUFId25lV1UzMTZ4emd0eUJlWWxIWXJGaHJmbUlFOUt4NDJGeE4v?= =?utf-8?B?MkFiNkFyMVB3SFp6WlZESzF3WTNPQlpER0RqWng3UnVESnlQWW85ZGlBZzQw?= =?utf-8?B?RFpQaDgvaHg1NEE5R0tvSFZVUkpUSDF1ejVQWmNPVHQxMmtwR2UrLzBUbWdS?= =?utf-8?B?TW1OaU1tRjZTTkZGbWErTzEzWFhoekZlNFVxck1DUEN1LzR0YmZ0cDFubzlB?= =?utf-8?B?b1FGaFRwVWtua3FJZ2YzSC9PT2oyaXZDQ1NzbVJPa1dQV0hVRlo5UTAydVRl?= =?utf-8?B?eThicGlTRVBIdWF0WklnYW8wVWtsdFBHMGFyb1JjMm5IQmpmRGw4N0dpZ0k4?= =?utf-8?B?Ukw3Rkd4aEdTUjFaNFo1QkU2b0ZVQVNjMGlqMFhKSlNYL29EcEduNnpKU2lz?= =?utf-8?B?dFo3dEpacEFDMDlpeVdQYXdJb0EzQjgvMU45cGJBR1VTZ1loMmk4a2t6UEVz?= =?utf-8?B?eGd3ZDhiRHBGdy8vY0dJcnZZblRxa0FNczVhT2JiaEs3RFhZc3c3aTR5NUxz?= =?utf-8?B?OHZQcERLcDhuRldJekZmN2dYaUNGSWNYdzJXOTFzSUU5R0RQQUJXSDdhbFNn?= =?utf-8?B?T01GeEQ0V0d0MUVXYmJmNUwxQWhRQ3BxeHRBZUp4ajVjNGJjdSs4NGdzOVE1?= =?utf-8?B?K05UV25jeUFWendiMUp6MDd5VTNjQkN2K01xY3VURXMzb0FtejB0QVF5bWJm?= =?utf-8?B?ZXVVamp6dXBMSmt1cS9sMW9xajduN1Azb2ZoS0M3NHpoZzB6TGVqL296Vkx4?= =?utf-8?B?UzBvbGN6NTFCZ2E3YUg1MUdITE9BZEQzTGdmcWQwcjNYT1RiU3d3Umxod0xr?= =?utf-8?B?M3JsZk9GRTlpcE1KSUhEMmFsTmd2eTFCTXIrTnNsY3FONkMzcCtzdCt6VmlV?= =?utf-8?B?OUVHSWxsVC9ROTYrSkZpTWJBQVNVbGRqbHVRa0VOWU5nZnZWNzBlNlVMSGU1?= =?utf-8?B?THJnaFM2ZTUxODMzZzRCTkNBTkljUkxVVk5lR2QrT0ZHdzJxTkN6a3NjcjJP?= =?utf-8?Q?jpAt9giRdd3iZk5U=3D?= X-Exchange-RoutingPolicyChecked: N6r6t8XwvmwBq2Pe2ORQZEG1rbR7ZQiaGZqJyOvanISgHB9tXMz2k9L340AmhWeibjZi2mM6pLucwkKDUsqZ8k+qn8CiDcDagfNInQs9GyXLT9s9Jw+wDr9KMc5cmMVCOqsJ+Xfutu4/IFEm1BrW2eew0qz+FDy2opj6VLn9+OKRb3mH3Sa6MdO2F/iWaDKD2d619TXuvzHsesK8S91iWtW3cfynX9lyz1GX/4TqpkbYq5JKtRqovcRRTlvkuM7c15cVTqLPwgGrAsB4dk+qkhFnn28237DvJBAht53cSrwM33WPGxwdyTigy4nmbNagzVnzeNw9UmmlKOtodgsNIw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 2FVEbLqMyl8ydDh69VItQ4J9KBY0lw+HI4Eatmiicnd3QeRF3Qlw+MDuCWTX5q6JBpMoDfEhXfKoRLLtVfps4lCWpUNvdY8kms3KQWlRP0LgNZRJ/eKKP51lR+uQ2aoqz3FUh1A4Ggd/AvCIKqla6d9aCfSh/mdew1EpSPTIDu7pFhW/AfyQ65JgyI5KyaHHx2dzhXNIUF9zbuJo6gGCJ/+/oB6j5HuNbmJBRN3+199h0lrcK1OBdn9lkA99uaD3paFSofGHm+YFRqoS6LCMUaH4+7g556HON+ZKHr/ROnMXCcpRQTz+J7d8KkjfcZZoyGuoM4tV4Z+hDDva19Dhh9Jk0vBpP+QtiQrW2p59rM9IsO6v+mDUyO/1RTjze7lkWF2uyoQQgFQ5trVPZVmbDtzKyAuLqTBBGkLcxhK838Gk16EhbvDVoLBAZpxb3PQSSoz1X0J1LuWPsFZE5DPuNzZfroNm6Wd68l5a85jbLgdJkQeZ/fhdpa+p8FyJRbRfh9tjsxvQ6vrVN1KamDXXzb2cH4Mqw7is25tciTREa9yTyTgjdhsuBeJLUy8t0cX9m9Ay/FMNinURfxHptdAHTwaaUJ3U8srtdNJrQrMsTBc= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 77000308-63e7-414a-af2c-08de83a06c2d X-MS-Exchange-CrossTenant-AuthSource: IA1PR10MB8212.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Mar 2026 21:10:16.6818 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: HvXPVczoa0WWVU0za32T+ppQBCqoEwAJAzUXmPT4Qp/y7aXboO7jqoJL1E+O0tQeWljwGP9YSJJa3b8tIHhfVWvmio9rHAAmE0nzEUzeKoM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR10MB8152 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-16_05,2026-03-16_06,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 phishscore=0 spamscore=0 adultscore=0 malwarescore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2603050001 definitions=main-2603160172 X-Authority-Analysis: v=2.4 cv=X5Vf6WTe c=1 sm=1 tr=0 ts=69b871bb b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=3I1J8UUJPc9JN9BFgKH3:22 a=t7CeM3EgAAAA:8 a=l8h9uyCQzQEkT7wfaO8A:9 a=QEXdDO2ut3YA:10 a=FdTzh2GWekK77mhwV6Dw:22 cc=ntf awl=host:12271 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE2MDE3MSBTYWx0ZWRfXzRS1vZA2F31k 2UF8tIDVDGGEgf0Ja+hBcyuou6V2XFCfhFHTQKXoDiqKs6KgfhxhPZWNp41RmfrEjBtFWITnjGw Vur+8piFDFfZzL//a5QwLciZFEWUMMKjl24CDMlPi5DQK3bHHx2BAe8ZI4wMH2LFR/KSnuMmxKs EzWiRZqKUZKgWbuFPA/fqLa1QOh+bk78m7Tgyyxm0NgQ1iV5f6lBmjh/wVuePuFQxA7/XsAq5Ky 6ZTZwjKCV05Ezh/9IJ14+B0t574/NyWIdosaWd10wcKhdem2lAedYAevSV0zKT6JSEuOrVUZRvD z+XTp+0ZiHQACyHEOMxwCN7JDjBKm/yb5LkShn9SGqPQdOcEYx1hhbSsJ17CYyIbGIg0cFhj9VH E/YgZIxsAYG6SAVw/osRsjSNJsBZDmxfwhbavJco0Juj0b+TbhTaQhHhuK7rVRgsjyVM20wQzxU ovN4b3k7deHcD1sfsUioFvg8tAVIALGJ8ZUVFMyU= X-Proofpoint-GUID: kmgz9m3K3tOUfmiQ1e9Tt3VEtd42yL-2 X-Proofpoint-ORIG-GUID: kmgz9m3K3tOUfmiQ1e9Tt3VEtd42yL-2 On 11/20/25 9:44AM, Yun Zhou via Jfs-discussion wrote: > Add check_dtpage() to validate dtpage_t integrity, focusing on > preventing index/pointer overflows from on-disk corruption. > > Key checks: > - maxslot must be exactly DTPAGEMAXSLOT (128) as defined for dtpage > slot array. > - freecnt bounded by [0, DTPAGEMAXSLOT-1] (slot[0] reserved for header). > - freelist validity: -1 when freecnt=0; 1~DTPAGEMAXSLOT-1 when non-zero, > with linked list checks (no duplicates, proper termination via next=-1). > - stblindex bounds: must be within range that avoids overlapping with > stbl itself (stblindex < DTPAGEMAXSLOT - stblsize). > - nextindex bounded by stbl size (stblsize << L2DTSLOTSIZE). stbl entries > validity: within 1~DTPAGEMAXSLOT-1, no duplicates(excluding invalid > entries marked as -1). > > Invoked when loading dtpage (in BT_GETPAGE macro context) to catch > corruption early before directory operations trigger out-of-bounds access. > > Signed-off-by: Yun Zhou I finally got this one tested and applied. Thanks again. Shaggy > --- > fs/jfs/jfs_dtree.c | 108 +++++++++++++++++++++++++++++++++++++++++++-- > fs/jfs/jfs_dtree.h | 2 + > 2 files changed, 106 insertions(+), 4 deletions(-) > > diff --git a/fs/jfs/jfs_dtree.c b/fs/jfs/jfs_dtree.c > index e1cbc3a04f3f..6df4a3ed9043 100644 > --- a/fs/jfs/jfs_dtree.c > +++ b/fs/jfs/jfs_dtree.c > @@ -115,10 +115,7 @@ struct dtsplit { > do { \ > BT_GETPAGE(IP, BN, MP, dtpage_t, SIZE, P, RC, i_dtroot); \ > if (!(RC)) { \ > - if (((P)->header.nextindex > \ > - (((BN) == 0) ? DTROOTMAXSLOT : (P)->header.maxslot)) || \ > - ((BN) && (((P)->header.maxslot > DTPAGEMAXSLOT) || \ > - ((P)->header.stblindex >= DTPAGEMAXSLOT)))) { \ > + if ((BN) && !check_dtpage(P)) { \ > BT_PUTPAGE(MP); \ > jfs_error((IP)->i_sb, \ > "DT_GETPAGE: dtree page corrupt\n"); \ > @@ -4399,3 +4396,106 @@ bool check_dtroot(dtroot_t *p) > > return true; > } > + > +bool check_dtpage(dtpage_t *p) > +{ > + DECLARE_BITMAP(bitmap, DTPAGEMAXSLOT) = {0}; > + const int stblsize = ((PSIZE >> L2DTSLOTSIZE) + 31) >> L2DTSLOTSIZE; > + int i; > + > + /* Validate maxslot (maximum number of slots in the page) > + * dtpage_t slot array is defined to hold up to DTPAGEMAXSLOT (128) slots > + */ > + if (unlikely(p->header.maxslot != DTPAGEMAXSLOT)) { > + jfs_err("Bad maxslot:%d in dtpage (expected %d)\n", > + p->header.maxslot, DTPAGEMAXSLOT); > + return false; > + } > + > + /* freecnt cannot be negative or exceed DTPAGEMAXSLOT-1 > + * (since slot[0] is occupied by the header). > + */ > + if (unlikely(p->header.freecnt < 0 || > + p->header.freecnt > DTPAGEMAXSLOT - 1)) { > + jfs_err("Bad freecnt:%d in dtpage\n", p->header.freecnt); > + return false; > + } else if (p->header.freecnt == 0) { > + /* No free slots: freelist must be -1 */ > + if (unlikely(p->header.freelist != -1)) { > + jfs_err("freecnt=0 but freelist=%d in dtpage\n", > + p->header.freelist); > + return false; > + } > + } else { > + int fsi; > + /* When there are free slots, freelist must be a valid slot index in > + * 1~DTROOTMAXSLOT-1(since slot[0] is occupied by the header). > + */ > + if (unlikely(p->header.freelist < 1 || > + p->header.freelist >= DTPAGEMAXSLOT)) { > + jfs_err("Bad freelist:%d in dtpage\n", p->header.freelist); > + return false; > + } > + > + /* Traverse the free list to check validity of all node indices */ > + fsi = p->header.freelist; > + for (i = 0; i < p->header.freecnt - 1; i++) { > + /* Check for duplicate indices in the free list */ > + if (unlikely(__test_and_set_bit(fsi, bitmap))) { > + jfs_err("duplicate index%d in slot in dtpage\n", fsi); > + return false; > + } > + fsi = p->slot[fsi].next; > + > + /* Ensure the next slot index in the free list is valid */ > + if (unlikely(fsi < 1 || fsi >= DTPAGEMAXSLOT)) { > + jfs_err("Bad index:%d in slot in dtpage\n", fsi); > + return false; > + } > + } > + > + /* The last node in the free list must terminate with next = -1 */ > + if (unlikely(p->slot[fsi].next != -1)) { > + jfs_err("Bad next:%d of the last slot in dtpage\n", > + p->slot[fsi].next); > + return false; > + } > + } > + > + /* stbl must be little then DTPAGEMAXSLOT */ > + if (unlikely(p->header.stblindex >= DTPAGEMAXSLOT - stblsize)) { > + jfs_err("Bad stblindex:%d in dtpage (stbl size %d)\n", > + p->header.stblindex, stblsize); > + return false; > + } > + > + /* nextindex must be little then stblsize*32 */ > + if (unlikely(p->header.nextindex >= (stblsize << L2DTSLOTSIZE))) { > + jfs_err("Bad nextindex:%d in dtpage (stbl size %d)\n", > + p->header.nextindex, stblsize); > + return false; > + } > + > + /* Validate stbl entries > + * Each entry is a slot index, valid range: -1 (invalid) or [0, nextindex-1] (valid data slots) > + * (stblindex and higher slots are reserved for stbl itself) > + */ > + for (i = 0; i < p->header.nextindex; i++) { > + int idx = DT_GETSTBL(p)[i]; > + > + /* Check if index is out of valid data slot range */ > + if (unlikely(idx < 1 || idx >= DTPAGEMAXSLOT)) { > + jfs_err("Bad stbl[%d] index:%d (stblindex %d) in dtpage\n", > + i, idx, p->header.stblindex); > + return false; > + } > + > + /* Check for duplicate valid indices (skip -1) */ > + if (unlikely(__test_and_set_bit(idx, bitmap))) { > + jfs_err("Duplicate index:%d in stbl of dtpage\n", idx); > + return false; > + } > + } > + > + return true; > +} > diff --git a/fs/jfs/jfs_dtree.h b/fs/jfs/jfs_dtree.h > index 94dc16123c87..dfc87b6690a9 100644 > --- a/fs/jfs/jfs_dtree.h > +++ b/fs/jfs/jfs_dtree.h > @@ -255,4 +255,6 @@ extern int dtModify(tid_t tid, struct inode *ip, struct component_name * key, > extern int jfs_readdir(struct file *file, struct dir_context *ctx); > > extern bool check_dtroot(dtroot_t *p); > + > +extern bool check_dtpage(dtpage_t *p); > #endif /* !_H_JFS_DTREE */