From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752645AbdJSJmE (ORCPT ); Thu, 19 Oct 2017 05:42:04 -0400 Received: from mail-eopbgr20090.outbound.protection.outlook.com ([40.107.2.90]:5625 "EHLO EUR02-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752212AbdJSJl4 (ORCPT ); Thu, 19 Oct 2017 05:41:56 -0400 Authentication-Results: spf=pass (sender IP is 131.228.2.240) smtp.mailfrom=nokia-sbell.com; gmail.com; dkim=none (message not signed) header.d=none;gmail.com; dmarc=pass action=none header.from=nokia-sbell.com; X-HPESVCS-Source-Ip: 10.159.218.88 From: Lixin Wang To: Rob Herring , Frank Rowand CC: , , Lixin Wang Subject: [PATCH v3] of: dynamic: fix memory leak related to properties of __of_node_dup Date: Thu, 19 Oct 2017 17:40:06 +0800 Message-ID: <1508406006-64893-1-git-send-email-alan.1.wang@nokia-sbell.com> X-Mailer: git-send-email 2.6.2 In-Reply-To: <1507858967-40416-1-git-send-email-alan.1.wang@nokia-sbell.com> References: <1507858967-40416-1-git-send-email-alan.1.wang@nokia-sbell.com> X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:131.228.2.240;IPV:CAL;SCL:-1;CTRY:FI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(39860400002)(376002)(346002)(2980300002)(438002)(199003)(189002)(2906002)(5003940100001)(189998001)(22756006)(478600001)(26826003)(50986999)(76176999)(356003)(8676002)(81156014)(5660300001)(81166006)(2950100002)(305945005)(6666003)(106466001)(50466002)(90966002)(8936002)(48376002)(33646002)(103686004)(42186006)(16586007)(54906003)(110136005)(107886003)(52956003)(316002)(106002)(6266002)(86362001)(68736007)(46386002)(36756003)(47776003)(45336002)(4326008)(97736004)(53936002)(50226002)(39060400002);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0701MB2967;H:mailrelay.int.nokia.com;FPR:;SPF:Pass;PTR:InfoDomainNonexistent;A:0;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;VE1EUR03FT024;1:Dd8hV5yF76bMaMRq/Ya8wAG2vCpx7S7vNWAxCzURWsVpHTbJnSX1w/8f/JVO3cAEVyvO4iGw4sqKJ5UfZwObL3ccZMU6u6d8KXg8AOv4JeNjrg25fuvtEp/I3QiHhxBj MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7ff93404-daf6-48ab-4521-08d516d5a0de X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(2017030254152)(8251501002)(2017052603199)(201703131423075)(201703031133081)(201702281549075);SRVR:DB6PR0701MB2967; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0701MB2967;3:zuWlb8XCyrJhzTYkxVFe2MSAfpwn54w92iUhkKN+OVQX5S5JT3Zs/PBkx8BUe0ZF2sPpl4Kvn1MahnfbM7bAW37NQ6fL7zvHWpqykMN2w9YPrA+rKVG1O6i5y3bKwt2r56++ZUKrByjzbC6FzCyAZlgacjER1SvMNE2LScfY50vte5s9IB4NU3LRbfBYWnP1zaDrkRveUK8DTMSfvMM6KynqGXqdbalCPoGbfbbDGpcms1nR3ANxWjJJfpNSuZmfp1dmW7E6O+tm5O0YH4lukIFHyVfjbHlrrkol0PtWIMxQfItUiIItsaYGc2G/aDR3Wj+IUvqAXD1UqnSj0feP7sUipHKURBk8/iBQmimLG90=;25:Xlf8x//4oNpv3+b7dJb5CK4DCuifMMZTEh8Izio6lCPWoX+XwZGYRCEmxjl0MjlZnD2bCipxM+q1UAOquwfyLTRtt1fVP5i+XX8HHWoTBYxwq4QvO/g4buSPoGQC/1GbwaWT60JfoTjcKrkcqmvITKNU3FzfeBeQB6EmcOkhxAMim8FF626lDa3Oe/JDkBi8J4TaA9jRQ+nro4r2jWmwuBBiUutV/6PenaaRh1ZNsyKi9mTCdPmPIkCvE2mN9RCQ/2UGY+G4kTjtYGUaFR5+eunC0s+QewAVvQ9v4Qbeg83I4sD8NabgMC3Xa/ectBZl58YkTXCBMzdgTzbcT8m5iA== X-MS-TrafficTypeDiagnostic: DB6PR0701MB2967: X-Microsoft-Exchange-Diagnostics: 1;DB6PR0701MB2967;31:BLq1hDsJUZ9oXuCGlg6z0miftrWaJXxlPbxMP+/xCtTEEq6sDG5j2UukFoTtHRi9ya+DAwA2rxRc2JjIB8WYOUzX8dn3N4SShhAtapP9A6aMEwLf8NgPPGIG0GH53bh4GfrPzP7UEMD3D9mYg1P2JCxQYM/6R2PE1PFXXGFYQRzoB6iB1ni+n2jO+1e6ObsHNNks7HIzyW4qf4Co29dEC1phMzy/sqSONe4C57ZpDto=;20:yjTFrp7ZiAFDpJmYRyHp9e8XRSTkuoS6fX1jyvNUw0E8CRmN1iAMuWeA+rwN1ekYsyh4lhyzvaTo/E7AUEEU5osOINSFdJnTi6KmRgvhoE9pmMWj+xaZvVseO+cmzcW4VQRdWhzlwVo0peowMUDxpa2YEqayWqYNDCm+ExVIncmTyYp1WMZprbJBTZ1xoNFu6+80Kfhdl8FnpOh0EX3qIHSNZViU4Y5Ll22dURkisjD+OALB5cV68V5YpdUudKOQjzCu1+ufpsXni3ctOYAucgn4U+vvF0NAQx4sYPdkguMXueNySBpHgDXmjkwf/95Q5oITPhk3YYRL4qDWHMhHl8nnc2Zk7ESF2Kq9OqtNQL49UXBhFHPefkpAwcd9NljGkVhUZFoaBh2M+R2IVgmjp5gVhvr3jobqSRrICpuea2NKiJbzffVbowsDTlutMyhXaci8BAJvwgLVNMkeqMWn5G7dRVhi8BjprYh40BzM9jdlxSEkMqkVE6a9Rj3XwkFGdy1GK1MGjaNBg/yZv/trNdgcv8chlLIbHqiiLVokaCOz2h/urq/mGK4fMdfbi5R2YVx5uZ68NPICtlXfKv572PsKvb18KsnO8BGUSGrdxgk= X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(93006095)(93004095)(10201501046)(3002001)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123555025)(20161123564025)(20161123562025)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:DB6PR0701MB2967;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:DB6PR0701MB2967; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0701MB2967;4:qDKHFb3qMgr/jkGnPnvNv4h1yxFQHAMsqdOsuGPEW0f4p+eDN2zg4CtVo82RjXlaArf6LdGw6fb8P4MdvnvaJtXqoaDXrgAWIO0ap2ryJeCPoQWQR13EKu51TqX3w81Nz9eI4DFG/3wQmBmncOsUQkvucVV8bCmqnADetBKOMVFlOMQ15Cc+GPS8T+c5jxWh75l+RmzWEjeMFxUUbuf4wLQtmo7SXfmxXGxyv3wjcyiO96V1T4fi8kYbZJqh5hRF X-Forefront-PRVS: 0465429B7F X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB6PR0701MB2967;23:suukDpiwABiKaaq72IRuDQMQ4RF2OAupz7ZMiiu?= =?us-ascii?Q?1popmEijBwBHl9EXbHUZJsS+TfDLcxUXJwthNHP0Ix2zGz6OM7kgp6E/L2or?= =?us-ascii?Q?1rTppep3VXEoTC3mB33Rcyb3g8NhwBGpIdGlyy6z03r7t8Kn2EnxY1MrbKkN?= =?us-ascii?Q?dRpY2JfaWtHA8WiRjR4Giauu0ggZSY2wODm1pNMEvMNht0Xx9THi6rgSRJXI?= =?us-ascii?Q?N4X1wO/0eNdQ8hgcnflJPE8csW5Nk53rm4w58rEq7yCEayfCZ1ld6YBq2bHB?= =?us-ascii?Q?hYno77ikBw54EBdZ8t3jF23Og3kUoGsCyowHzUTJ2aUkV9atnWu/G4Oc6WK6?= =?us-ascii?Q?oVSjvXymSWWQz0+zfz6Ne2CVYTDDd/9+MgAD6zaWiR/SeFrW6ANI8ZylXg8b?= =?us-ascii?Q?S4BLzrwLi9osm7hrReroUyk6jWk9NpegKqWF1GQ3H69pkrYuKkBLOT+TLkcq?= =?us-ascii?Q?WBeGWFGyUo7wYKu57zScvbOIJTI40ksY1hZA93RKhbvZzV9VgpFH5AbVa70C?= =?us-ascii?Q?D130+vv9eGsNv2LREryphbR6OCGZ3GWC5KvfIJN0A/bhTXwF3DpL6N8e2O13?= =?us-ascii?Q?tdIlRp9Y49GiMAqeRpByfkDdssvU2edlJQzXhPEWU5pHBIawULPxh0MhAO0b?= =?us-ascii?Q?b+K8THeo6vzXuWyRFNfJxI5zQpBi5mYhLAgElLmmudPvWY+5lVS7fJt5ztTu?= =?us-ascii?Q?gKuYj8QafFLbCDtuSD7r8uhIFevqI8bcOATTGV3xBM7ABuA1WSK5q0veuGjP?= =?us-ascii?Q?fPryBxd7uEJ7xC/2G2yveMqsh9cyfeZfmAEDsaQHNbZYHV5kDgr8xFm7Tvcj?= =?us-ascii?Q?AStaVTN4Ln8fd5sij6SgvobCDYpzH2eeiHuVzo1He81MRMzeCzoHi8iL/jyD?= =?us-ascii?Q?jDm/bYypvdtsqKgrMLvjseE5a+ab787iL0n+OgB3SFTi+sTEiIT4rxbwG/2q?= =?us-ascii?Q?DOpEnTPYnYeGmauxpKnk/RImHp7uabM/LZwK+ii/wCT0dhSYSsOGlu+TaqRP?= =?us-ascii?Q?gkjpbtbzGmgFbaR97GlpHq6DLZZIkbKuEkVrBK4E/iXpqt74Eme+vuXS2OiK?= =?us-ascii?Q?khDIweUobMCpmtMAqQId1RdgPVNHME4cK5WFNsIPebyCGCk9xR8n76bnfKYq?= =?us-ascii?Q?f4nhyHnAihynO+We0Yaegn0AJnZpbSmDf1QpMq8XNQxrdGJJiK8qtbDXqmCR?= =?us-ascii?Q?Lw/k994vRug7UCSKiOYs4iN5xNfB/0cDvuFmS?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0701MB2967;6:l2c+p3cNRmO8MF9PCfcOt5IfcD3h/D3R23VKyNyu//sv8+oDa8ijwLIBPxmxtwtO7dA+b5hFX/Z1WnPJ9PTWIx+AHIpu8Uk6rKacdPs1eYM0JCcSfn2HYDrtvaD6FJ4y/mRSxEhH2qwcKq14YSLamjVmYQEs2QC21nqNw3ZGWpX+urja5gPuDF+Pen9cXbIuxeKFjEA7BcBlvbeHuppCUuX6kz4FjQo5o2FlrTm+RFQoZfT/qNVzml7qzsxi8sEcZ3ooF7ErNwdOYwOhrKSNAX82kq9MdZx7wXTGp1GPipfpyzGDkXGc0Su8n8CYsCCiJRjux1DeGjCzp6ytz/KBmQ==;5:1mb7cO5YCmuRhQMA91U6QDrshafJJlHZ1WBRU3CXD+G3dZ/L43WzLKmVXJrFE6xQHIgDusLO/h8FSxZXJKTEnPEfoxdr7DHfrCuP+4ybiWbXqGVTic1Nv7GafnGkJuQIHgU1qoOA0iyHwn+d2tsSiQ==;24:cAiiAqul8vKN0zEH+hu94k4gOJYsXbKLU+vFzSoAWVQZTdqAmnodCJwihOMECWZwRdl0dTy31RT/Exwseb6IHe8YO9RCbCalH3vxx5LJnao=;7:wIOYGICzfpGjwfG450PYiyJHl47uyxGGjwuNP/eZAPeEcT8R5n6aMmOxmZDMbRMbx/b8yGkedZVPqFlZ/sGv7aSfnXGMY3M1ZDpby756CuWVwdLekD4R1QsSvxtnqAOrdhRtKs6f0xDX26wp++FlvztTzahV5R3Q7U0iZAiHkUY9ntNw91zHZOFNhBsf+ErfhdnSE5GHqFHytcQSZGoZUvY7OBA8B78fDxqFcN3O1BM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nokia-sbell.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Oct 2017 09:41:52.3684 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7ff93404-daf6-48ab-4521-08d516d5a0de X-MS-Exchange-CrossTenant-Id: 5d471751-9675-428d-917b-70f44f9630b0 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5d471751-9675-428d-917b-70f44f9630b0;Ip=[131.228.2.240];Helo=[mailrelay.int.nokia.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0701MB2967 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If a node with no properties is dynamically added, then a property is dynamically added to the node, then the property is dynamically removed, the result will be node->properties == NULL and node->deadprops != NULL. Add a separate function to release the properties in both lists. Signed-off-by: Lixin Wang --- v2 -> v3: * Add a separate function to release the properties in both lists. * Change the patch description for this change. drivers/of/dynamic.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/drivers/of/dynamic.c b/drivers/of/dynamic.c index 301b6db..b28511f 100644 --- a/drivers/of/dynamic.c +++ b/drivers/of/dynamic.c @@ -315,6 +315,19 @@ int of_detach_node(struct device_node *np) } EXPORT_SYMBOL_GPL(of_detach_node); +static void __of_property_list_release(struct property *prop) +{ + struct property *next; + + while (prop) { + next = prop->next; + kfree(prop->name); + kfree(prop->value); + kfree(prop); + prop = next; + } +} + /** * of_node_release() - release a dynamically allocated node * @kref: kref element of the node to be released @@ -324,7 +337,6 @@ EXPORT_SYMBOL_GPL(of_detach_node); void of_node_release(struct kobject *kobj) { struct device_node *node = kobj_to_device_node(kobj); - struct property *prop = node->properties; /* We should never be releasing nodes that haven't been detached. */ if (!of_node_check_flag(node, OF_DETACHED)) { @@ -335,18 +347,9 @@ void of_node_release(struct kobject *kobj) if (!of_node_check_flag(node, OF_DYNAMIC)) return; - while (prop) { - struct property *next = prop->next; - kfree(prop->name); - kfree(prop->value); - kfree(prop); - prop = next; + __of_property_list_release(node->properties); + __of_property_list_release(node->deadprops); - if (!prop) { - prop = node->deadprops; - node->deadprops = NULL; - } - } kfree(node->full_name); kfree(node->data); kfree(node); -- 2.6.2