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 9A3E41C5D5E for ; Mon, 16 Mar 2026 21:09:00 +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=1773695342; cv=fail; b=g4Bu5x2fz6jlwzacsv1s11WK+IR9Pcxft3BbxRMTtq7poVl/rdDTI3y6wMa/7ALYONnV8o9USyDjGolceF0tGlMFnyGHezA7V4OUBbwOaDCbQ78jB7APW5nFoQ5/DrIyEoyKtptsAwuslNKoq+jDi31VGKxAtVB8KC1GSsPRhCw= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773695342; c=relaxed/simple; bh=djTKu0dwwyWTfZ+p2Lg8udQgwXJMD16FJou0nyar3UI=; h=Message-ID:Date:Subject:To:Cc:References:From:In-Reply-To: Content-Type:MIME-Version; b=hIsKVZe2gjhEEX/8ZctdWOpB4jOUOD11Gb+nvUM5ob6HywHqzzrEwMCLKJIn31cgzJBaN/hD5GA8dwemUiWSFKAKVb1VUk+7+tUbat/6eTQOagxV+GlM0x5ztb/EYg3tmk9nZfUxOPUcebue75VJ5OL2hv2yBvQU7egbLmjCWEo= 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=nWDL+7cj; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=fVR5Dpcu; 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="nWDL+7cj"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="fVR5Dpcu" 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 62GDiEDB1527994; Mon, 16 Mar 2026 21:08:34 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=a30bhqX6GObOtIXOuXHkHXWuymj5xU33S0o4GzmYipo=; b= nWDL+7cjwMvqEB5aEod8oz+dNqWKtXvn3bp9pXC1yUSEmm9MSX2gduyQc/3cEEjT R0h/Q0JUN1UoJ6OXiMzmLgVbufDrqZ2gA2EM9LLDUfIV2IQiWYgsfzqJ5dvdcrog xz5qK/ib4lL6chknYi3JKeSQwiMqqIXbIB337eY2jhe5Cq9Xjz/3OtwO29wTAR38 Z5t+PQx/yJFMuyUkP9PiKsFZWV6HAGyGI1eWnz0M1tf7WL7Q4eCfVOQV1fjS3osG fKA4WoIO9lwSw8oiofMhRs6xpbJSXgPEM82O4n1E3wQYBQvXk0gJYdSHE+uHUlxp w8dH+y8q2ZEx5mWYmcQgSw== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cvy9ru2eg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 16 Mar 2026 21:08:34 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 62GJGq5b017946; Mon, 16 Mar 2026 21:08:33 GMT Received: from dm5pr21cu001.outbound.protection.outlook.com (mail-centralusazon11011041.outbound.protection.outlook.com [52.101.62.41]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4cvx4kpd8t-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 16 Mar 2026 21:08:33 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YqQJhPeolyD7nbvbzanfQx2ynRkzbmL/D7taCue5rh3ZxneDT+RYcl1f9tqfnevLw4PH/Z0SFAPJzAcLHmXIkHjn/EgBoUVX5Vwm/kVPUEKxYL3lXjtOwCM8sqB9PkGpr0FDZowH+Lnb/obO/CJ5u0l+tpTeIYt4YqF7rBY4rwvDfjqlsw03ShI6dIwD6dXW2D6AdEsjm/tgrsW/iyy0GCafJuKOK+pBf+KDkb4unwKpBWgnyqftZvTz0rsxw2DVpojuJj6BgpvhRB3lWymB54LEXj/f4MnN8vT6o2iwAOiVC+9y8IeJzv1EHk3/dVqCbdWWO9YqjsB735bx5I5GXg== 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=a30bhqX6GObOtIXOuXHkHXWuymj5xU33S0o4GzmYipo=; b=lzRFK1KgLGkqzjnRCpS3xZx+9D+V/BpVZKL4AOtKY755bGcyj7NRFfrW9HFZF+CuKR6rBMuNBvghRuwma3bSRonoZLmVHEy2mvdDob92ZhRKH5yaEyvpiUHqwxq1IJJBX7BIdT2/s8eokaFd5m9slJVNcbhQWGLD+RL21LUhlUYzVykNkWHrtycMwK+Ii16ttJ2+HcY1U71ArqNaJ2KBDW5Z/uFbzYw5fAazXprezwvXZvuzusGvtS5EB9gDFtI/rrKwz9ec0tSoDFkakkJlJ0UPVhrfTu0qq8xfhzUanSTZdGQjlUAgbwrR7fNjN8Y8+OYLoIeRSd3JJhvJ4rak/Q== 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=a30bhqX6GObOtIXOuXHkHXWuymj5xU33S0o4GzmYipo=; b=fVR5Dpcup4bGzHV14DU1yNtZiEdM+J9pz5c68nTlYzNBM0+46d8yGjcGgEYUMgLgZWhinF1V2bdx2DfWM+3l0yzNkIUywdgHdeEaz7BaAdMdXo8oUcxmuCsoe2ROxy6EnZdnad62n0dcL9bGgId2NYf0PTW3pOns2o4fjKmRfPY= Received: from IA1PR10MB8212.namprd10.prod.outlook.com (2603:10b6:208:463::20) by CH3PR10MB7808.namprd10.prod.outlook.com (2603:10b6:610:1ba::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.22; Mon, 16 Mar 2026 21:08:29 +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:08:29 +0000 Message-ID: Date: Mon, 16 Mar 2026 16:08:27 -0500 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] jfs: add dtroot integrity check to prevent index out-of-bounds To: Yun Zhou Cc: rand.sec96@gmail.com, contact@arnaud-lcm.com, kovalev@altlinux.org, zheng.yu@northwestern.edu, eadavis@qq.com, jfs-discussion@lists.sourceforge.net, linux-kernel@vger.kernel.org References: <20251120154350.1041513-1-yun.zhou@windriver.com> Content-Language: en-US From: Dave Kleikamp In-Reply-To: <20251120154350.1041513-1-yun.zhou@windriver.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: CH0PR03CA0284.namprd03.prod.outlook.com (2603:10b6:610:e6::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_|CH3PR10MB7808:EE_ X-MS-Office365-Filtering-Correlation-Id: ace82cef-7748-4315-6c64-08de83a02c24 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: Jm2DSW1twNuen+GYGJtaOdzu9R3zk+GieGiaZzCrQ42GGnHf0XIjgtUeg40+bNA/NMeuM717Hf3kBdDa2u7SlbUrWuUBfZedG5jdbailgj2jhUvRXeVg/poBBbYkLBVv7Z2IZH5ER4LOgn24mtSE8usvD+hO5aTSZ7ekxE2xVvayY7FE9wpXnQUnSP0gnVM8R2Aul1fEl3VC+Zn5XJQTbpudqTiwJHfI3LlU59NY67p//MqIhfVH26jHj8jPgmSEDP8CUq6GklVt5ghyxRBDW0IAnvP9IEIJEzOhNZC5lDXG45Ix6pESCb3UFUwEe66JjRbV+w4XAkxPwR+vfEdH/1+kIGSITgcRq6E/EOim33iOG7od75667qHnlmLl5sA/ZxspT0LdobIyli625jNUXRktsvR1snJuGx+ox4a4lFqWrllYe+wWimsY3wekmgMBd9rgUNP84Z0stVlm3rDEQGj2wVUmb2S80uUSAbSHPBBrG409SxXWytnC6qT7vSEKGQhNmZJIiUShRM1g/WNDfbqPLMC+rNeuzpPqa/y4N5w1+yBPb3713m1c1un2YZUOBz5inaRBlNpovmQGpvrNP1FoBlht1WgRW3/W0MHQPRbxhTp0PFXSrf1q+xmVplUv8rc+wcZFPA44Dhy5Qkc/ptuS1k7YxJtKEFVXdR2NLyca0Mig1cYl8GQ8xIs1la0oSVbQbeEYjb5bHDFxKvp8y2lgnXSsdNOSj3TpIdv11Pg= 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)(366016)(376014)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZHVKRXJTbkQ1NXZBTFRhVVRVZi9za3NMTE5PcmNkY0pGb0VJMmZ4OVNUUyt1?= =?utf-8?B?TWF4Z1lSQUJhQjR4U1NzMzEvV1cvTzZGWkVpOCs2YnhIMjl4Uy9IcHo5WitT?= =?utf-8?B?VnVnVC93TGVjcGp6b213NWFUVjRUMjhXNytZWUNMVFJFbUpKcDd2MXQ2VjVz?= =?utf-8?B?ZXZyQm1jQjE0ejN1VVk3QnpuSThkZFRRRlJrVGdFaWhMdGVGMXZ1OHV3L292?= =?utf-8?B?MmRlNTgyWFlBSktHTk4xZnJ1cHdqenkxOXdNME1waExrM2pweUNFSS9VNnJu?= =?utf-8?B?Qi9rNkdIQjJaTGpvU3V5bDBrVnBWbyt2OFdrOVRQRFd0R1hxWUFHWmtzS0tv?= =?utf-8?B?d2l0Nk8xVitkTHp3b2plTlVOWkNwUGhmZXFreGJXOW9POFVmTEhVOWVWNk5F?= =?utf-8?B?bnVRVFM5THZEM0tmN2x1ZkljZDJGWnV1dWE4OTZBbGtVOUlNVng0aE95aTMz?= =?utf-8?B?dU5vVEZYb1IxenNsMks4elI5a3UzRExJZjd5OGswNkVVUUVIbWpUZlViVFNM?= =?utf-8?B?Vjd1UENqeHZBanB3aUx6NEEwOTNVeVl2cGd4VnRhRVJLRG0vanRuNzBpaENX?= =?utf-8?B?YXB0QlNGOTRuNWM2dzAwOFE0OTQyeE4vZlBRY3NzUXBFWHB5TC9RUmNBZmxq?= =?utf-8?B?aFZIZnMrbmFQYk1mSXRnWk55dUlvWHN1VllQQXFOZ3JTdlg5RlRodExiODNN?= =?utf-8?B?Y0h4anZqbUtkRU8vL2xiMk5lUHVleFgra0UydnFsWWNFZTZ0aWE2dGdNWFJq?= =?utf-8?B?UWRGcWllYllZajZLMmw1TUFKL2J2VlZ0Z0wyaHM1Q2l0b2lzSjREK3ZvT0U4?= =?utf-8?B?M0x4amtzeE9aU29Na0R2MWFmWEtUL1FUVkJXTmhFbzV2TC82WnFnTjdMaDZr?= =?utf-8?B?VTBla29BMmdBMDl2aTBiVGMya3djdnJoNFQ1dlltRlkzb0FKSkVkSGJZNXZl?= =?utf-8?B?UW5lNEFOb3hwODFhRHlPU3oxUTlZWUZsRHhOakVVL0hFTmJFNXVmTkF0OGpN?= =?utf-8?B?RE51R0RnandINVRjQ2E4b2pVNmk0SmhGVllGQ0d0REZod0ZZWkZZTGMyQkgr?= =?utf-8?B?Rjk3VDFDVDh4MmlsNG5ldHluWm9YNVNiWEZpbks3WWcvTzkweEZjMWQzendh?= =?utf-8?B?Rmt2aTdvcTBuZmw4VlJma0crTjV4d1kvbUhwR21EU2JKNGtFN3FuTkE2VTNk?= =?utf-8?B?Tk9LVEJwQVU0ZlJFK0p5YjJmWjNwVXJWb1JCWXFqNnIxZFdzb3dUUDcxK2lD?= =?utf-8?B?bE4zTzRNQTZ4T2RkYlNGSCtDUmJuQ0xkTWZWYWJzV1Y4MndDOWVRekp6Qlpt?= =?utf-8?B?SUNKV0ZobnlLUWg4OTlZZ3hRdlBSS2NhMWNhVEZlS3ZCWlFOSzVaRmNsZEZH?= =?utf-8?B?VFFpV0N0T3VwZGJpcGZ0ak1nYmhtWnNJbldPSlcxSFVUQ1FhNWZOY01jRUJM?= =?utf-8?B?QWllNHJHU0lKTVpYY2JjNnM2eGFHRFFYcXhqRzh2ZkRoSytMelk5WEFWckZl?= =?utf-8?B?d3RVOG96UTlLSTVSNVRSSnMyRVhzT1U4MkU2aUpTeXZ1ckF6Uk56VmFUYTQv?= =?utf-8?B?Qnh4ZU5pMUc1V0R1aFpQYVpxUG1JQWFucTlOMDBPdnN2QTR2REhSVWFqd0lt?= =?utf-8?B?MGt5dTV2SEx4bUZhQ1hqMzhQdVhBWnptenBHaW1aUk52TzlxMTdETnNRZjVt?= =?utf-8?B?S3NOL2txRU4zMVNkQzh1NTFqQ1RCbzFsb2MzMGNOWGJmYk5KaFkwc3B0UndZ?= =?utf-8?B?Ulo2V3BrVEhyVFBFUWdaRXM1dEtzamlrbFFES2FqOVdvVnVVb3duMmc5dkdq?= =?utf-8?B?VjZjeTFxSnBRNHdJSDVIY003bk9mQWtPTmtRcTArbkpJRDFRdG1reU1NQ0ZF?= =?utf-8?B?dThjb0MzNEZnTU1ZNzR3bC9uQ1RsNjFsUmVTdTRPaWc5cXNNcDBQVTFuOFpJ?= =?utf-8?B?RStPN3FGQ0s3L2h3clBZUnV2TDJDV0xOcWd3WWJpc3p2dFdmN0E0YlFMcCtV?= =?utf-8?B?ZHA4WTBDTUJkbWJyOVhnU01EY2V1RzBWZzhNWE40SENLRlZ6WDRCQ2JSNzlZ?= =?utf-8?B?aDFwUU5QcnhKRjRzamhlbndreGtqWG9YYkZOblRTbUtjcXZRc3AvOU1BYkpT?= =?utf-8?B?bTNsV2lPU2oySDlYRThZdFZLbS9yVWZRUzZqVEZ2MnE5VDI3V0NkVFRmeDA1?= =?utf-8?B?aE9leFVJLytYTG1OQjN0WTYvV2M2cVp1VDdQVWMvQ2l3ZndEQ2syOSs5bXlG?= =?utf-8?B?WDYxRjI5NjJhS0UrbVphcENsZUlUcWtEdXpiZjJSTElsTmw1K3hEbDlqYUc1?= =?utf-8?B?cmI5K1N3WUM1SXl3bXMwT0NoR3RST1QyeHlscmhUN2srd3FoWmdUeXZTVEE1?= =?utf-8?Q?+uGPZj17wCXm4Two=3D?= X-Exchange-RoutingPolicyChecked: AcTD5AEnWTqerHKYmoiSBIn9MmG1ozzc9uuQc6GhHmPKsmWKYMrVvg8+s7eJ4IYQS2uNQsgHnI4QTHIEmzQqhuwn3c6Ecj2wOob6bBSB0IPykbS9csGkNtWh3lL93lRmQKPsDq6G6BJ3sLfr/8H24nuy4pf9u3ARp+hmTR2yTogHhEJrD9k7VUCVn7cDcpTOqc3q8WcBQqXxd6B2eKUx0oEzNGRX/xdPzTp/RNWnZNePQz6aKi+U7W57oVYjIGEWKUuAEi/GL72RZGovBl9+hibErsYBPUoAocFN9cwAooe+dVx/cN73BmPRcYyVIRsGAzRJhW38dOgPtYOsa5dGTQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: OzZbwe99jnxob/RKQdqVAGvdS4UrzW6IAzQz45jV/9Zr8QYjfIKiqbomZyT2ueDkvMTsjYfkwp/9nsSB7FhqdPB82LoDUJG2lXI7FLJw6GjwuJjl9hzg2PkNRNAR2Q0Lu+GF41ATT+DXKyuquciEFkjrnH5oirZh7vBPQSzxv/ZN1eDCZoooRJqPkGB6wNz5p9EUnB48rUCHxTsuIClbjRcINM7XxgRkN0KW2XReCIhmS/UYUQMV/U5KCUENp4JJnG9fFxgU40p//WZH7AGOQgpnDGTdRJPNcOtiyRoRZMY0tPSD9c0muew/tDKMpEriKLFmo+rm906rbF3ZemrtPNq9N7UEPJeQ98rXk2ygIWiyGImvX3gkS1HeuNXRT6FhO0X/HBB+pvHhFz6yFm1nu5sU3iIu3cxOXiEL8wjoj81ia2OzSNvzGTDoQ9qkSefDncHhD0RnREbjJbRQ/YAqKxXQPoUUd8IeCoBcwFgLoGrRwPa2AcKyW2GzLtOoaIEnADy5SrrwoBREcQO8v1w8C/IOyHR8gu+cPAkGt/Y8serN0w7ntVD8Dl2nvDOKLFSzY3R9S97wendO/6PQ3qHtp3f0BXzjyOFoCsoJBD++fFc= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: ace82cef-7748-4315-6c64-08de83a02c24 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:08:29.3488 (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: 1jb63BjHp7tJJZhbtPyoTeH/A9O0zo8iM8MOa5mUPKV+MDs/YVxGJgoeygWKSN5kwVO2T6BcjIpa1yIcuQP4oc+3c4xBVIz/5aO0uS5+7ko= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7808 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 malwarescore=0 adultscore=0 suspectscore=0 bulkscore=0 spamscore=0 phishscore=0 mlxlogscore=999 mlxscore=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=69b87152 b=1 cx=c_pps a=qoll8+KPOyaMroiJ2sR5sw==:117 a=qoll8+KPOyaMroiJ2sR5sw==: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=SL4K8EpQiW1LEVh6N2AA:9 a=QEXdDO2ut3YA:10 a=FdTzh2GWekK77mhwV6Dw:22 cc=ntf awl=host:12272 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE2MDE3MSBTYWx0ZWRfX9CScyrnQoi9f Z0IpBDQP/nxjjxfVA1RpVVejTgCtdX4FmfRXkVOgxpKWB0CpqEUx5XfV0a6eCzP6Ch3kxeRuOZL BUQEIekucsIn498V3TOWSxgcZxmVwyNrJXmvPSxFrySw0+KlIfV4oQdN9d9O7oP7q00JXgXcnOq 3LHMNHJ3n9qhgVDwHbjDT3kuDYnQcyS3D8Z4663AyD162vQcBnmjVRx5I9fIyFU3Yut4U2TzEgt NwgylL05skywn8610/5Jy5+k0w2TtlYjm/q4z3ftWhXTnL2USNyflS+kHQYIBxwS103PDJnvRri G2DIzIq2Lx8Nslx98tOy89ldk2IfA0k6JAFTMgo/i/TilPLVBMAOjKYpdGdkK9eKozVdnJEGEIO cYaZCuSGTHYCpIZZl5o9/JBdd7GmgBRtkVfT5bEd2t3jtxgXSgmvLKU0uDNEzzxG3jewKuRggET Ex/B8nBZJFHAer9iqD2/mtGVh1bv33ubvbPY/K+E= X-Proofpoint-GUID: LrE6A3bvHvhxLPLZHkWnXD9gGjE_Fnhu X-Proofpoint-ORIG-GUID: LrE6A3bvHvhxLPLZHkWnXD9gGjE_Fnhu On 11/20/25 9:43AM, Yun Zhou wrote: > Add check_dtroot() to validate dtroot_t integrity, focusing on preventing > index/pointer overflows from on-disk corruption. I finally got around to testing this. I made a small change, but it's applied now. Thank you and thanks for your patience. Shaggy > > Key checks: > - freecnt bounded by [0, DTROOTMAXSLOT-1] (slot[0] reserved for header). > - freelist validity: -1 when freecnt=0; 1~DTROOTMAXSLOT-1 when non-zero, > with linked list checks (no duplicates, proper termination via next=-1). > - stbl bounds: nextindex within stbl array size; entries within 0~8, no > duplicates (excluding idx=0). > > Invoked in copy_from_dinode() when loading directory inodes, catching > corruption early before directory operations trigger out-of-bounds access. > > This fixes the following UBSAN warning. > > [ 101.832754][ T5960] ------------[ cut here ]------------ > [ 101.832762][ T5960] UBSAN: array-index-out-of-bounds in fs/jfs/jfs_dtree.c:3713:8 > [ 101.832792][ T5960] index -1 is out of range for type 'struct dtslot[128]' > [ 101.832807][ T5960] CPU: 2 UID: 0 PID: 5960 Comm: 5f7f0caf9979e9d Tainted: G E 6.18.0-rc4-00250-g2603eb907f03 #119 PREEMPT_{RT,(full > [ 101.832817][ T5960] Tainted: [E]=UNSIGNED_MODULE > [ 101.832819][ T5960] Hardware name: QEMU Ubuntu 25.04 PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014 > [ 101.832823][ T5960] Call Trace: > [ 101.832833][ T5960] > [ 101.832838][ T5960] dump_stack_lvl+0x189/0x250 > [ 101.832909][ T5960] ? __pfx_dump_stack_lvl+0x10/0x10 > [ 101.832925][ T5960] ? __pfx__printk+0x10/0x10 > [ 101.832934][ T5960] ? rt_mutex_slowunlock+0x493/0x8a0 > [ 101.832959][ T5960] ubsan_epilogue+0xa/0x40 > [ 101.832966][ T5960] __ubsan_handle_out_of_bounds+0xe9/0xf0 > [ 101.833007][ T5960] dtInsertEntry+0x936/0x1430 [jfs] > [ 101.833094][ T5960] dtSplitPage+0x2c8b/0x3ed0 [jfs] > [ 101.833177][ T5960] ? __pfx_rt_mutex_slowunlock+0x10/0x10 > [ 101.833193][ T5960] dtInsert+0x109b/0x6000 [jfs] > [ 101.833283][ T5960] ? rt_mutex_slowunlock+0x493/0x8a0 > [ 101.833296][ T5960] ? __pfx_rt_mutex_slowunlock+0x10/0x10 > [ 101.833307][ T5960] ? rt_spin_unlock+0x161/0x200 > [ 101.833315][ T5960] ? __pfx_dtInsert+0x10/0x10 [jfs] > [ 101.833391][ T5960] ? txLock+0xaf9/0x1cb0 [jfs] > [ 101.833477][ T5960] ? dtInitRoot+0x22a/0x670 [jfs] > [ 101.833556][ T5960] jfs_mkdir+0x6ec/0xa70 [jfs] > [ 101.833636][ T5960] ? __pfx_jfs_mkdir+0x10/0x10 [jfs] > [ 101.833721][ T5960] ? generic_permission+0x2e5/0x690 > [ 101.833760][ T5960] ? bpf_lsm_inode_mkdir+0x9/0x20 > [ 101.833776][ T5960] vfs_mkdir+0x306/0x510 > [ 101.833786][ T5960] do_mkdirat+0x247/0x590 > [ 101.833795][ T5960] ? __pfx_do_mkdirat+0x10/0x10 > [ 101.833804][ T5960] ? getname_flags+0x1e5/0x540 > [ 101.833815][ T5960] __x64_sys_mkdir+0x6c/0x80 > [ 101.833823][ T5960] do_syscall_64+0xfa/0xfa0 > [ 101.833832][ T5960] ? lockdep_hardirqs_on+0x9c/0x150 > [ 101.833840][ T5960] ? entry_SYSCALL_64_after_hwframe+0x77/0x7f > [ 101.833847][ T5960] ? exc_page_fault+0xab/0x100 > [ 101.833856][ T5960] entry_SYSCALL_64_after_hwframe+0x77/0x7f > > Signed-off-by: Yun Zhou > --- > fs/jfs/jfs_dtree.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++ > fs/jfs/jfs_dtree.h | 2 ++ > fs/jfs/jfs_imap.c | 4 +++ > 3 files changed, 89 insertions(+) > > diff --git a/fs/jfs/jfs_dtree.c b/fs/jfs/jfs_dtree.c > index d9cf2071c41f..e1cbc3a04f3f 100644 > --- a/fs/jfs/jfs_dtree.c > +++ b/fs/jfs/jfs_dtree.c > @@ -4316,3 +4316,86 @@ int dtModify(tid_t tid, struct inode *ip, > > return 0; > } > + > +bool check_dtroot(dtroot_t *p) > +{ > + DECLARE_BITMAP(bitmap, DTROOTMAXSLOT) = {0}; > + int i; > + > + /* freecnt cannot be negative or exceed DTROOTMAXSLOT-1 > + * (since slot[0] is occupied by the header). > + */ > + if (unlikely(p->header.freecnt < 0 || > + p->header.freecnt > DTROOTMAXSLOT - 1)) { > + jfs_err("Bad freecnt:%d in dtroot\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 dtroot\n", > + p->header.freelist); > + return false; > + } > + } else { > + int fsi, i; > + /* 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 >= DTROOTMAXSLOT)) { > + jfs_err("Bad freelist:%d in dtroot\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 dtroot\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 >= DTROOTMAXSLOT)) { > + jfs_err("Bad index:%d in slot in dtroot\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 dtroot\n", > + p->slot[fsi].next); > + return false; > + } > + } > + > + /* Validate nextindex (next free entry index in stbl) > + * stbl array has size 8 (indices 0~7), so nextindex must be within this range > + */ > + if (unlikely(p->header.nextindex >= ARRAY_SIZE(p->header.stbl))) { > + jfs_err("Bad nextindex:%d in dtroot\n", p->header.nextindex); > + return false; > + } > + > + /* Validate index validity of stbl array (8 elements) > + * Each entry in stbl is a slot index, with valid range: -1 (invalid) or 0~8 (slot[0]~slot[8]) > + */ > + for (i = 0; i < p->header.nextindex; i++) { > + int idx = p->header.stbl[i]; > + if (unlikely(idx < 0 || idx >= 9)) { > + jfs_err("Bad index:%d of stbl[%d] in dtroot\n", idx, i); > + return false; /* stbl entry points out of slot array range */ > + } > + > + /* Check for duplicate valid indices (skip check for idx=0) */ > + if (unlikely(idx && __test_and_set_bit(idx, bitmap))) { > + jfs_err("Duplicate index:%d in stbl in dtroot\n", idx); > + return false; > + } > + } > + > + return true; > +} > diff --git a/fs/jfs/jfs_dtree.h b/fs/jfs/jfs_dtree.h > index 1758289647a0..94dc16123c87 100644 > --- a/fs/jfs/jfs_dtree.h > +++ b/fs/jfs/jfs_dtree.h > @@ -253,4 +253,6 @@ extern int dtModify(tid_t tid, struct inode *ip, struct component_name * key, > ino_t * orig_ino, ino_t new_ino, int flag); > > extern int jfs_readdir(struct file *file, struct dir_context *ctx); > + > +extern bool check_dtroot(dtroot_t *p); > #endif /* !_H_JFS_DTREE */ > diff --git a/fs/jfs/jfs_imap.c b/fs/jfs/jfs_imap.c > index 194cb05b42b9..7056c8d6fda2 100644 > --- a/fs/jfs/jfs_imap.c > +++ b/fs/jfs/jfs_imap.c > @@ -3111,6 +3111,10 @@ static int copy_from_dinode(struct dinode * dip, struct inode *ip) > > if (S_ISDIR(ip->i_mode)) { > memcpy(&jfs_ip->u.dir, &dip->u._dir, 384); > + if (!check_dtroot(&jfs_ip->i_dtroot)) { > + jfs_err("Corrupt dtroot\n"); > + return -EIO; > + } > } else if (S_ISREG(ip->i_mode) || S_ISLNK(ip->i_mode)) { > memcpy(&jfs_ip->i_xtroot, &dip->di_xtroot, 288); > } else