From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751919AbdJTCCs (ORCPT ); Thu, 19 Oct 2017 22:02:48 -0400 Received: from mail-ve1eur01on0115.outbound.protection.outlook.com ([104.47.1.115]:29184 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751729AbdJTCCq (ORCPT ); Thu, 19 Oct 2017 22:02:46 -0400 X-HPESVCS-Source-Ip: 10.159.218.88 From: Lixin Wang To: Rob Herring , Frank Rowand CC: , , Lixin Wang Subject: [PATCH v4] of: dynamic: fix memory leak related to properties of __of_node_dup Date: Fri, 20 Oct 2017 09:59:09 +0800 Message-ID: <1508464749-54218-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.241;IPV:CAL;SCL:-1;CTRY:FI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(376002)(346002)(39860400002)(2980300002)(438002)(199003)(189002)(356003)(107886003)(53936002)(90966002)(47776003)(39060400002)(4326008)(86362001)(54906003)(478600001)(50986999)(110136005)(42186006)(26826003)(76176999)(52956003)(50226002)(16586007)(46386002)(316002)(36756003)(103686004)(45336002)(50466002)(305945005)(48376002)(33646002)(81156014)(81166006)(106466001)(106002)(68736007)(189998001)(6666003)(2950100002)(22756006)(6266002)(97736004)(5003940100001)(2906002)(8936002)(5660300001)(8676002);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0701MB2969;H:mailrelay.int.nokia.com;FPR:;SPF:Pass;PTR:InfoDomainNonexistent;A:0;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;DB5EUR03FT018;1:sm2MCJsVzb+SW0MAT1XPQyCVmnwn4hANKod4o5F8bYBhIBO5NCDEdW8aN5Rxl5+3+B9XgaiQz/KgZpWbQgTcsE1jy9puZBsEnT3nPpvNTgPzCXfJoIx7r+Uc/wcOJGwK MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 997bd199-63ff-4e4f-0b36-08d5175ea66c X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(8251501002)(4534020)(4602075)(4627075)(201703031133081)(201702281549075)(2017052603229);SRVR:HE1PR0701MB2969; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0701MB2969;3:6hBkYvwUv3RXh+jUmJCr05eyn/bkkKUE+1snrDp8ANdP+Vkrb85nAlFGkiRuojbkhlmLLtS49G29v7I5UFbnaQoek8ZRjOMfV/Zu7bUl0eRO1dDz+EsvSq+K8wbetsZ2IfB3UL9dzppYXEdmiXnJ38IlxMHDSgBXfbDM0JIvGPnz5H3DyRSOYI4BRFZrkEAU1kuKt57SS2/cuLJG5RviY5RxYauAFhsTyJwm6G+fgY8kb1zAVa/5Ay7Dcw+vyrUTwuJQaMY/YzDQKyk7XRtNSUhVReez9MeXQ8rR4UiNtXO3+wWlgaIivp02F2W4zonHmcDb/DHtNTUqafzL5y9Jd17680QzZuRvJZxq5A/x4JI=;25:a1q18AnQZIJ+QWX6UpEDw508dKgMchuchfoknWLbrwZERNzAMOYWUdsED3ONgL3ymDaZDcA/LhApu6RXjEZA8VySVXF6fPX39qqxwqHRWxDwk7XPAmzZGIejUS5Jkvvc7hx2FsmFEpAkrnzAOM7jKAddNdlo/RXgjXH2XQsPBEd4xQEm9GfrmmrYKV5wUaDfC47OgRk7tUMIkOIJ30QT04XLuAPbjvreXyBBNPt+BqKZDWtdH2UoUexkb5tVhzMrJ79hB8fcJGTgwxX9WPbItioEwpGIDCX0v2veMXE/aIHmGtfQVtWdZzvsAh3fSwNFk2Ctw3okMUlQzPKIY4qQZw== X-MS-TrafficTypeDiagnostic: HE1PR0701MB2969: X-Microsoft-Exchange-Diagnostics: 1;HE1PR0701MB2969;31:KWdNyoNQ6qayikIEaQX610Sok2bOMHkmFZaBCzyvcCvGRHQx60G02wp352DOFA5znuA6aNmb/AoMhrIHO3SF3WEkQAdzrucie5IO66M3Kw9Y4EIDQ2y8BaZhy7Sb22Qc+wVezOhfHw1FQgPdMMC3Zef0srs3q+ex2Q/z2CtvJ1I1zVtlslmhwC/jtIM1F5YPUe3MyYf0NPLrO8Et6YfzmhuzQxqf3PrvMmSMUJElgBU=;20:Ec5Sjfvj9luR6BkptUiOj+jm7lUmyQItWDnUDGn5KAWE5cnZ09et2oAFYdo4C5vBfNc9ul9W2llHrKobPfSxdM2qc//k8EfXQ6sKfgwhwmCiIjABindbhS0bp9iOJF/zAVTj6BUrqOAkEYm/GIUvySgsNwgxbYV3VbVsbW/vt/eue9oGkc5ljq+KHAkkq7n9V2iLDgmVAMjkOOldxlR24R7a555AkwzJkqavdeOXO0ZpjeZbq847853oEtIZfJKHGft/BVX0ozTm7d91qEpuGEPY9HzZL161Jb3yWUqU0V696DTpVW+TcT4rhNiCyY+y0Lqbw5BAVQyIbFyEzjzHGr3uwvzFYcZw1ytnnYdUZt6U5gWnNxVAHrZ3krP8JmFDeSjBi/v/mvBlAG8r3qEHAVE8KSFy/SM+b3E2P6LUH56Pp4gii7RQu9KS4KYUAsp2xPMD1Me579cfirAiCQRt7s30URFnNZXVlfBJ/IHtUdzDB80yUkARwk4vyImuwvHCVHiv+M24t27qpO6nMzIIq+6RW3X/uXhWykvc8x7puV1DGrig26TQ8zlJNcfjofuaFLJvyIWOdZ5thAb9LjHWXy2FFFmgB/RlTvBjQMTgrco= X-Exchange-Antispam-Report-Test: UriScan:(182409339516656); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(3231020)(3002001)(10201501046)(100000703101)(100105400095)(93006095)(93004095)(6055026)(6041248)(20161123560025)(20161123558100)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:HE1PR0701MB2969;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:HE1PR0701MB2969; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0701MB2969;4:FYEsADZUZpODKbFNjegSAmGn5fi6C2KcbT3vAYgZ94zh6W6UMO22sE6+tbz8ZvQ2tWbVJVGRJEcbH5zClqbBplS1JdSl1n0iEzbaaaXfXx79Sjelv10NG2g0cK4dpqfHgfUviLNChmls/xZbvULKxBLuObQwISO5oxOX4cVaX9sOI/3jpg3By9UgJVpBiqU/JJRxBCOw8pd98bA5TWxZiBqr5YA8cUijgvEjvzPEybzeDXmdUDF06rMo5RwHa1OZaxt9rgNBqGS1+zWGUPwiQZKu3CImWdILNL7vA/UFp7A= X-Forefront-PRVS: 0466CA5A45 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR0701MB2969;23:ap9nQhh+ph9R0DId4/jNwEe7m8aLQQWUuVqwtnH?= =?us-ascii?Q?QBwUeHK9SsdI5mvxTqtcKHmBUOfqb+XhYNK3vqWqp04+yEGn4leqOpcgDdzA?= =?us-ascii?Q?uruvHADdkVTAEdrIZABV6jkfdA/8BWaFidLcje22l+bDwLut45h4uHCmyfX8?= =?us-ascii?Q?OX21CDonM/WTNGhyz/wrja0uEc+bHyBS7kNBe69eSFVbLc5ytCMh6WFoF7H8?= =?us-ascii?Q?Frtv1rzlxer8vOT79DOOcabDVtXHAKG/cgx9Zc1cWXRaE1uaMGohcavetnRg?= =?us-ascii?Q?3Zz3pARCuuSpMxKVs+y8GZX9s+aB7ZNcnAmR4zMYAQG0azBvz5m4sg+uozuN?= =?us-ascii?Q?0tUFuR7Rs2Go5ULkg0ROGc0LYUewgRn7OD+n9GVHAG3H+TN1hkA8AmZUbaAU?= =?us-ascii?Q?2Of+JuQv4wqKPhIblOuQWSCs1HwXeFF2bSX7Pw9JzwunJSB6adUbrPJjB13m?= =?us-ascii?Q?2EIkB0WfDLKa+3xMIJbkstwPd6bYli02juh8NffAY3Liwl4TraAEaF0E5BdM?= =?us-ascii?Q?w+2z7yyi9ZgqPusB6dsMJpBeqnQ5qtUSIsTNGAXgsIgQNyqIwrZmK0u2O3bj?= =?us-ascii?Q?NJlFwsaeZpxVBndqWpmirhDL07O2ZLKDWwYuCJd2xSw23kFXYjb5yYaylYD4?= =?us-ascii?Q?DAbFtDuDSvTGeDNfHjsSxdKhrCnjZEsiMWJoYvokVxYfOM5vGi2cDnmAAbkC?= =?us-ascii?Q?M8PFDNSUOGj62GaQ3cWxzjVN5eYx7cibJir7Tx2Wsn4rwVVhfM4Y0trY4/2a?= =?us-ascii?Q?FnuChK5oakNXYf428Y8/i6TVlZTlYhiualmTNDydYTjzTsoj9YLFWGaLytNY?= =?us-ascii?Q?+smWj0maF8H+oW3nQ4ou6KQ2CjOAfCXI9vZvF8MLpC+necdgVSkaYTYQ3053?= =?us-ascii?Q?tdqDjHX9MS7Q67rEDjoSbZz4F7chL+CTzsJvYCmmQkfqQCV66LRCSEUbHTaJ?= =?us-ascii?Q?FN+E/Ai3ErsYAO6rLyIuOFmxf3AGRBbOzWV8cx5DoU603jIrAdBFa++5uDn5?= =?us-ascii?Q?DYXBMZYaMMdoGu5qnERhc17+WZ/Oj5P7F7VyyOgKQCBjB62m1azSv1djqv7D?= =?us-ascii?Q?JqVd/59WjY3uf9RB/3a86grHOkN1ifc+8o+dVX8Lknqz2U+OsyXoWLiBWx1A?= =?us-ascii?Q?dXcqMn2F1b4WEmX+SrKecmKJoDCVDJxnCwNFUb1LVLvIRmbmcuYCnaKyfF1z?= =?us-ascii?Q?ydLU/nTi35q0WsLHz4tiFTkRviIbcymgpdWrJ?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0701MB2969;6:wfpXvmZlHhw36mO8iV0StKL6swAqOgadI7fI+ApOrtWpv6PAcJ4wU/YV+64WL1GhRi2Silynd50epNyXsM7XAuXvbeN2UxQIEPYTji8vtjrovb1K6+y6lJEgk/pAQZuxuSmp0MKXUM9Qefa4+IQ+VYbtcVuGcZmiFja6BTVGQlN8ncNzhE7t0+jMKdany5K2NUqEnmBOBBePLoeHvVkI+nxpMO2Q0EWTewpC8cvEGyAehJ59+zZiK6Yr6qS2uq9GzMdTZ0lrXdSJ3fPv3HpdTIcg3TdRX2bUyEykcK+jHA+517icLMk21yqOPLifOURiQWfnmJSg9utJRMLsolL4jw==;5:EEydiP8X0eiCPm/fjLkVnw25VgGqHKRlc7l41Dq2A+NhVqezaIijz9sGhdX/K9rXl6QibowHPEENwO02FaKo9cia5b1fXggV0UFzwgFG3A3w3tBzlLUwHdufulLBJwurkWnO0/3q6LNnE6rHKu9vuA==;24:kIgaXeUtDDAGobHMM542VrUrn5y31fXe9cPQMDNttnsNDOSfPSBw7nysZ3FoecSTsd/9s7/btNr6IEq1qipSCHwjqr9RB5I3H3VZR5ZdJPw=;7:tmlf2NOofURJrUwoIY6gU8uCnzJ+eWQWacVOTavkEEZOQdHtJ+gwyx2zpB4flT5/Sr7Bwo/eRe4vr8Lby7e1hYrdW3p+sTkMpqJH6RSfBL047Q2wFp2k63njOKXitTObrK4XQH2sP58zvWIFFk/vTxibmsLatXQrJV8sB9pVqzLEFQuJJH8UhaGAQ5J1sT0cGhhM1VhTIkgoCz66hFsyVkebFTnrMZl0Xqm2ltAXKUc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nokia-sbell.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Oct 2017 02:02:42.7225 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 997bd199-63ff-4e4f-0b36-08d5175ea66c 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.241];Helo=[mailrelay.int.nokia.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0701MB2969 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 Reviewed-by: Frank Rowand --- Thanks the idea from Rob Herring, that I forgot to mention at patch v3. Thanks Frank Rowand for writing to me the example. v3 -> v4: * Using the style that is more consistent with device tree code, as suggested by Frank Rowand drivers/of/dynamic.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/drivers/of/dynamic.c b/drivers/of/dynamic.c index 301b6db..f33b7c2 100644 --- a/drivers/of/dynamic.c +++ b/drivers/of/dynamic.c @@ -315,6 +315,17 @@ int of_detach_node(struct device_node *np) } EXPORT_SYMBOL_GPL(of_detach_node); +static void property_list_free(struct property *prop_list) +{ + struct property *prop; + + for (prop = prop_list; prop != NULL; prop = prop->next) { + kfree(prop->name); + kfree(prop->value); + kfree(prop); + } +} + /** * of_node_release() - release a dynamically allocated node * @kref: kref element of the node to be released @@ -324,7 +335,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 +345,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; + property_list_free(node->properties); + property_list_free(node->deadprops); - if (!prop) { - prop = node->deadprops; - node->deadprops = NULL; - } - } kfree(node->full_name); kfree(node->data); kfree(node); -- 2.6.2