From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751416AbdJWDU6 (ORCPT ); Sun, 22 Oct 2017 23:20:58 -0400 Received: from mail-ve1eur01on0104.outbound.protection.outlook.com ([104.47.1.104]:52996 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751082AbdJWDU4 (ORCPT ); Sun, 22 Oct 2017 23:20:56 -0400 Authentication-Results: spf=pass (sender IP is 131.228.2.241) 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 v5] of: dynamic: fix memory leak related to properties of __of_node_dup Date: Mon, 23 Oct 2017 11:19:53 +0800 Message-ID: <1508728793-1213-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)(39860400002)(346002)(2980300002)(438002)(199003)(189002)(46386002)(97736004)(305945005)(36756003)(50986999)(45336002)(53936002)(6266002)(2906002)(81156014)(107886003)(5003940100001)(48376002)(50226002)(8936002)(4326008)(52956003)(39060400002)(106002)(189998001)(76176999)(50466002)(86362001)(110136005)(81166006)(68736007)(22756006)(8676002)(103686004)(54906003)(16586007)(5660300001)(33646002)(26826003)(106466001)(47776003)(42186006)(2950100002)(90966002)(356003)(316002)(478600001);DIR:OUT;SFP:1102;SCL:1;SRVR:AM4PR07MB1281;H:mailrelay.int.nokia.com;FPR:;SPF:Pass;PTR:InfoDomainNonexistent;A:0;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;AM5EUR03FT032;1:8fjqtsFPZEUMAg+O87q6IkqMXIA4759Yxkixlhs78wRWjyAwsdFSEJWxfB9x923MsreX0TbXAbFsoqbaI4jhxSMvZMQ38ArIzkI/fIwSoV0x/UuDNEZkpDvNJ2yIN4rd MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5218d3af-ef4d-4b05-6eb5-08d519c51069 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(8251501002)(4534020)(4602075)(4627075)(201703031133081)(201702281549075)(2017052603199);SRVR:AM4PR07MB1281; X-Microsoft-Exchange-Diagnostics: 1;AM4PR07MB1281;3:JcxcT505b1BiD5x9zpqvmqwWUeBJvUXRCSluy82VPBqNGWnDCrqND/oG68kwiopw9IwABXbwQnhIa3D80JzNFG43RcRiU0oQLfdU1MWUOiwdc4XKEAKjsTSBxRg3BD9JKevvl0llBsYLC0Mhll64vZTEQJoHmIF9OBWQnc39b+D0l1pWuDxnM9w0NTE2Bw6Pxs4xjNItyeQ4VqayoRIjttJGrp4e4FO1uFaVaF8Cg02kxr3C2leQl0GNTk94EU6e0AXyKmGdgy1RvqdpqHBzkp10jPda3UyXnYWr1fjebV2nafT1i2T1axqX/qSkEP8NV/uRPluu1COMP1exqSzn1wZLGA72UYSCaj8HTgfClRk=;25:0yBibmIfJhBWV9h72IcID2AJt39m4QUVUwHwM6BbUQIYZTwOXHWWvIwKU2Xpog1s3ScL8bY/16tBwyZ6suJVcuQwp646sDAihNJ0YSAdW9girsEQkoRZlraxlEkDtj6Zmk4hz7FsP8TyTU/IaclDd5kVj29hk6b1vBm3q17cWU98qz6SUk+VpNwj+975mMrlEm6fAplwUcI7lDUY9X0ey31ntUSd2e7wyTSn6xgAunxY3CBfJwSkH6hzBklSx1E3M7FUj1r+Q4ppol4m114AwP68z6fffT91h3NBtQ57E9XTMB82buHoLpj/X3ZOrvav97LPehUp22t0o26ls6ReOQ== X-MS-TrafficTypeDiagnostic: AM4PR07MB1281: X-Microsoft-Exchange-Diagnostics: 1;AM4PR07MB1281;31:Mg/g0ZN3h3t90Ex+FWxtT5CYejpI9HXs32ylqXYI2nqGXEUNZr8Hu4FHfZEG5so5khz6YSG8GFYH57QBA75cfOTdWhDE9BFCfyCBzLGUDIyPpgVEVSiiI+UwlK2AMsRXemtX1xT5SGj42O9iB6XsZrs/wHcNgk/X9FOK9PHCBdnOHysBiDcGaLeky75lGv1p9GuVcd5a7bZV1r0Pl3oAqOPDsu92CXK2laKjlowsFyw=;20:vGb50DbB+RSO1AHQpWAMzLIHtKqRncaS2CFDgjlXm5AAGtIeLavIObLbbLO2VUhFb4XQ9BigP/PNRQNUJNcL9FkmhsCzYKkhwlrcp6N2kAafh1pEgIZU7f/Ggvjype+o8f9Upamlt7Rx7Fw5K/4R3Bghc2GZX0+OKvxO+SJHC5+ZgxiS/9mhH3sIbXcibPhlDbEvOMVmJT/O1ML0HYP4SDV/YuNvvs8wohxf/mpqKEnbNepbT6ku6/TUAokfW+ngguxPALBF9IZH542ajz0RYw2Voo6DaGnJfGwORciX0weV5K0P2yR32nZJIS6Gsmy0D4wjRPEeA+ZNcE5jgfF/Os/xMLhBR4anfsEd9TJzZufgSi3N1u79BCc5tnxldaNkazOfj71BAaidfet5xGMafWOCVhFXbjihIxUfOtQu1rjCKFFOFqOomk+5PqXtRYMogLOKjAbQfM001xYSwkwO0BZJlBFhuAByY0cJoBmfa5IOEqc9YRfp12hGkS33eklQUCE2XyDX+4/0Z3axTUwElURusIlDvS2jeZQf06afC+9J97Z/JIkSoPDXDcS0RE6lQpbpiVwznE4+9BvG5pQz4/awS65gu4AM6qSRkQXZj3I= 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)(8121501046)(5005006)(3231020)(93006095)(93004095)(3002001)(10201501046)(100000703101)(100105400095)(6055026)(6041248)(20161123562025)(20161123564025)(20161123558100)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:AM4PR07MB1281;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:AM4PR07MB1281; X-Microsoft-Exchange-Diagnostics: 1;AM4PR07MB1281;4:CjcnyzLeHboUvsr5CFXldXqBhO9L1Fka0gpJ9COx7bGMFiHcDOG2eByAkZOd4rEY66OLNnZTkD0iKUVHTGHwcezL7daO9+5Rlvlp2lRbFRdCqXxivygJUgOK+b8kYLSQjXhq31oRX6NmQ6go96loi/w0ekxWsrRqvDZVS2113n1aBTCuGk7w2ubTs5gC6Fjjr4qh+wB1+iDsuqE8zS8mouBZx+GVgMKr2NbH8vlLRc9JlZQy+4Y71h0HVDUFHCzC X-Forefront-PRVS: 046985391D X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;AM4PR07MB1281;23:tFfZ/dyu6MITbfgZ2h0Gh+QB3QnIdGPoUZP++lYHp?= =?us-ascii?Q?4A2Mb1Qpg7pSEoRH50Bdj9wUkRgWsSKCisno0t4UjEWJaLqmc/6tOAJEFDe1?= =?us-ascii?Q?/cgCB0GCFIHFUXs9Ro4I6Jc0liSCq3vl9wgMllQv0YUoav0YAbmVF+7TI2Ap?= =?us-ascii?Q?hd/WdlvEO7lcMtpNT208WDDtBUNXhnYdCJ4M6riM7nup1PqRmpT2LnRCo+v1?= =?us-ascii?Q?cR7geBX9vpGVkFgrT37uE4akHH1R1ml4vSG/VAj9hbTC7wMvr6Yc05EYo/xL?= =?us-ascii?Q?RyHGClja+apinMII0d+8C+jdmhZpIQufl7C7wmhVua8K2CM23uJRfjSc2B9c?= =?us-ascii?Q?b7yz+IYuJmHHVk98Zz/nyu6Xn5LRP6M+q0QSIWIgfCz0PF84i1MMGNHdu41j?= =?us-ascii?Q?ANiYGEqwamRk3y1BNU+kj/riftDt/4sDjQaLB0c2XD4NMDeFH6Qy5hDAk1E9?= =?us-ascii?Q?H7/dT8FatQjH0b/0iftGdfxpPEPw1N38YmxTvskxCIQSxc47jL5r37qOthJa?= =?us-ascii?Q?ndWxOFVySnksyYW1ciw9tBsyRSIk82MidfYMgpuO0kU6lFRoTsoJtfSfHP1Q?= =?us-ascii?Q?YK4ALxngreEeAgr9KwWHvFHogOx5UT8fSn4IKII2syumIdrIK6I4TYrwpcQG?= =?us-ascii?Q?8ZiZiH6rLmEoZY8qtFFaUsa/vQBEHav4+e3vebSi0a6jgjB0oQBdjRDwz3ve?= =?us-ascii?Q?bqlLjAHs7zeUMJJYZE5TwLsv34YLi7A/r17J6aDM6D0mRz5Tg/oDcTqgpuCG?= =?us-ascii?Q?BjmkVpiV9k1lviLpDK4JPAs7rt6f8PXJF9942mfoQv1lhD3chZaqNGDQ7Pak?= =?us-ascii?Q?SMVZqz8vw5C27RF4dYu7RaynqEvFu6bq6jYtv+q1+HANUO0VM4Dr0IGfAFRG?= =?us-ascii?Q?avzXxSClmTAlFXiSpSUzWwJuC5TZ8pSoBSXKRFFm90nT7JXXd4ROfW0y0fvj?= =?us-ascii?Q?ecOJscXvqS7X3AFn1kT+z+0IaTasQ0AbBKvE0EClkUxl5qhKXpITJ6OWow8w?= =?us-ascii?Q?jL784So8ZQOjGLokyJwfKvvQCzWAFk2AWynv7dFLCotS8w09NBioA1185711?= =?us-ascii?Q?y0uoYOaK4bBeW3NRLbisyMW8Q/SJIJ3Ev22jyLxJnqgS4FRMAbv9PWKV0+JD?= =?us-ascii?Q?WxVR91F24RSnrpZ7qo7GsvyjF8/VkDPKZ2PdUOXCvI6aSUH0NMv/V8tRjleI?= =?us-ascii?Q?XLkmxxZet1fj4k=3D?= X-Microsoft-Exchange-Diagnostics: 1;AM4PR07MB1281;6:Vb7r8oLex04X+UgchFdGcyCW3aL/Y/TV8vrKVnCVw5wNBbYvKuslI8/yVfSR74VR4Aq92YF88shMTubDrAuPzRkyqQGfsY/Paa+sATJa1Ng4BfTcjxzyO0P/HRXepyGLwsgXSOc8HxH4BzEXj0kzdf8CPGgg8WB7qq/Ef352XNbLnIsN/41xxiJ/zI0Z5x62VvcC4zAEjmfVuXT1wGtGLTfEYFXeVXgCYu1n774EspVqII/h+j5idtnkmzpDXFQaVhyk/nEOnAT25+3uQsOB0sjYZlYP22KfPpMyYaf8/VutCPuAn9qUIH7OHgfXFGAE1+7K03Lo3T5gmCN4yIlk7A==;5:94kk3Mf41TVF54xOUrYbcAUju73xODJ+35SijxyRzbYZvrkisyO15GrSJCbHVYEIEaD+JVzfBFrAHDin0vh9y61n/KtKq9DcACrM9lofsMCqD9MubC1PjysJD/hTtG/6LGf4UWAe0vC6VSAMs6IBJg==;24:cnSrXx+qUa074H0gSHD42v2fC9jMQKjgLHYBRs/YaM7sfOyHmHySkA4ikF7VXRU2Y/cK3E50OCOwyWS6Ec9QKmSuMG0RwTQib6u+mUg/5HU=;7:kqVTr2yZY03NkIaC7D1KZ8LHthhte9+gxjnruUjUHRua6+PdcaXIU4EwW9v0sJkQ4qcpXg/iWZfBECObaDj5q9F89g8+sfXX6LB7rEBeRBDWqSOPDPfUv5/lyXXjgm0P0VaHglnEXq9/PTSPtXCwZf4pgp0EQxXRaTqL6EUqnUvYQEaGXKfG/KnwuRNYCE13TH8S07ajciGSRqNQWStq4+oMS+kP1lqmykqfyIs/zAY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nokia-sbell.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Oct 2017 03:20:51.5358 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5218d3af-ef4d-4b05-6eb5-08d519c51069 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: AM4PR07MB1281 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 --- v4 -> v5: * fix the bug in v4, that the prop->next should be saved before release the prop. drivers/of/dynamic.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/drivers/of/dynamic.c b/drivers/of/dynamic.c index 301b6db..39d69d3 100644 --- a/drivers/of/dynamic.c +++ b/drivers/of/dynamic.c @@ -315,6 +315,18 @@ 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, *next; + + for (prop = prop_list; prop != NULL; prop = next) { + next = 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 +336,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 +346,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