Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp3641937ybc; Thu, 21 Nov 2019 11:21:30 -0800 (PST) X-Google-Smtp-Source: APXvYqyT3uWZ9V4k9duOeJIzIYrBjYNMUpQjNhMv6DKxjzy4p36duRBgp+Rfwb3xok69ZHXm8XtI X-Received: by 2002:a05:600c:214a:: with SMTP id v10mr12043480wml.102.1574364090488; Thu, 21 Nov 2019 11:21:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574364090; cv=none; d=google.com; s=arc-20160816; b=hfFK8ucBezu8CHvoSb0FL9lebO7wxEYmVnUweBcSs9xFFDJcDU/dWIbOmFzey5RYkU 8oL9hZH/rGZxSffDX27Wy+IW0dlQx5eF9LtgW4rleFc9b9kwZhJPzjijV6Fx9QekC/ld jXkuBmhazHSdvE4LWX+YLf7//vhkqqeTR0Y37DPeO5EgiScVNvkhVyU/b0qxgK5iQKNl HS9xmIug+Mvr2pjtSuhabb8lmnwwrWikSKbnEKZ+PLJtxluRHTsU9CKvN3bdMjxpE1sf VIOERrkaFDcdVZAs5CyThNmbbit3y64JPe1ovbl1e0bPdcr04ZSTCsvowt9IXswcZTa3 jU6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=iRr78PF0ayUGDH0lcR09CGwIA4V53aCMn+ho2nN2cbQ=; b=ca5Cp2IS9b3DFvT5D82DWOFil+8PVKn5ateB+tJax46ZcHdneMEUy/Nqj/1XFdheTY N8Q1zitCcqxZYe2DKf715CMVqosr44Eesa6GgBEb54jn3ueBTCa5GuHK9fYJW9bmJSr1 b7Az9lH5HZI3BOvUO+tM/Evi/U1WT0M+wugZKbjrILwq8+mUxtT8QJLktAyRqZxV7w1T 0KIWuw4/Kp4iJwDhdivGnouOrXe72PxatUPqN/GiDrGWHMQ0Niks1hJJ7rXg2BTQSBMX d4/RmGf0XVix5tVsu51FiBS/W43vi5QXQF232AEaWY4UtNGydrtU4LeWDvS5G2UzOgNE n4/A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=vQqPhQps; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q18si3245307eda.291.2019.11.21.11.21.05; Thu, 21 Nov 2019 11:21:30 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=vQqPhQps; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727047AbfKUTRe (ORCPT + 99 others); Thu, 21 Nov 2019 14:17:34 -0500 Received: from mail-yb1-f196.google.com ([209.85.219.196]:33835 "EHLO mail-yb1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726333AbfKUTRe (ORCPT ); Thu, 21 Nov 2019 14:17:34 -0500 Received: by mail-yb1-f196.google.com with SMTP id k17so1788288ybp.1; Thu, 21 Nov 2019 11:17:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=iRr78PF0ayUGDH0lcR09CGwIA4V53aCMn+ho2nN2cbQ=; b=vQqPhQpseYcJ0sLp/8WE0kM0lkiX8G95JtDPQME8OxsSyHyzQ+Uf1Djn7vcqOWt4V5 vDWlKkgE3tmz5EYd51R1FT4UGjbnb3EvEGivXNrhK+T0+by5aSTan66dvodYyOOeRNOX TzPUePdqT3oOCE9+mChMlKLdUJ2XngcdKBgJ2MO6fZeDVIbuq0rGz+/YCIBGFGvDlSpI FCdNKlVvaE4YgNj3KlQHqkeo72dbMn0zawHico0+uU8pw7JIO6SkYOgwrUn84fvdawgk zhT7EVqIZYJw66uYX+kaR7aL5lpqLZZ03JjjlIyZpkYuIeuGKa8OU0ys5vWR2dhEpKJc eEPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=iRr78PF0ayUGDH0lcR09CGwIA4V53aCMn+ho2nN2cbQ=; b=l0KkoU2HJMZFeePL1JPtQ1ecE6BL2ox3Oeehp1XkQVvcrAxcEOo+91zRlE8i7VdODC mwFz/LF8mUqKI2RxTyp6TZX7Ks9pHK7/t3c1v3RzGe6Xl7B1ys9VPdH+c1qjnK0DS2Nj swfOeY9D+jPeScTdMJEtbzgAoHLVrZ9cibQ/sSPRhsAUY/Y8H39VHl495qXtusTYJxJ2 VqZ73rJvHtvHFbp+QxIyU/fU2/GVO9wrz6d+yptAtj0n1CNhpC4b5nFi1CXHP2oihSUP Pthlqm5xhO2owstRlOITnRg0meaWNkLCeXiGt1PQUU4075/9TsagBD+IIZ366haEL+Dq Ptsw== X-Gm-Message-State: APjAAAV9E6EIo1vh44AxcIFFKENk3e2X3sYsi5lmS1JW9FtWX1dZ4dRd 1ZiYw8OLvfc0JuOXeNLDqWm8cbSd X-Received: by 2002:a25:9882:: with SMTP id l2mr7019459ybo.435.1574363852952; Thu, 21 Nov 2019 11:17:32 -0800 (PST) Received: from localhost.localdomain (c-73-88-245-53.hsd1.tn.comcast.net. [73.88.245.53]) by smtp.gmail.com with ESMTPSA id j144sm1105251ywg.77.2019.11.21.11.17.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 21 Nov 2019 11:17:32 -0800 (PST) From: frowand.list@gmail.com To: Rob Herring , Vincent Whitchurch , pantelis.antoniou@konsulko.com, Pantelis Antoniou Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Vincent Whitchurch , geert@linux-m68k.org, Alan Tull Subject: [PATCH] of: overlay: add_changeset_property() memory leak Date: Thu, 21 Nov 2019 13:16:56 -0600 Message-Id: <1574363816-13981-1-git-send-email-frowand.list@gmail.com> X-Mailer: git-send-email 1.9.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Frank Rowand No changeset entries are created for #address-cells and #size-cells properties, but the duplicated properties are never freed. This results in a memory leak which is detected by kmemleak: unreferenced object 0x85887180 (size 64): backtrace: kmem_cache_alloc_trace+0x1fb/0x1fc __of_prop_dup+0x25/0x7c add_changeset_property+0x17f/0x370 build_changeset_next_level+0x29/0x20c of_overlay_fdt_apply+0x32b/0x6b4 ... Fixes: 6f75118800acf77f8 ("of: overlay: validate overlay properties #address-cells and #size-cells") Reported-by: Vincent Whitchurch Signed-off-by: Frank Rowand --- drivers/of/overlay.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c index c423e94baf0f..9617b7df7c4d 100644 --- a/drivers/of/overlay.c +++ b/drivers/of/overlay.c @@ -305,7 +305,6 @@ static int add_changeset_property(struct overlay_changeset *ovcs, { struct property *new_prop = NULL, *prop; int ret = 0; - bool check_for_non_overlay_node = false; if (target->in_livetree) if (!of_prop_cmp(overlay_prop->name, "name") || @@ -318,6 +317,25 @@ static int add_changeset_property(struct overlay_changeset *ovcs, else prop = NULL; + if (prop) { + if (!of_prop_cmp(prop->name, "#address-cells")) { + if (!of_prop_val_eq(prop, overlay_prop)) { + pr_err("ERROR: changing value of #address-cells is not allowed in %pOF\n", + target->np); + ret = -EINVAL; + } + return ret; + + } else if (!of_prop_cmp(prop->name, "#size-cells")) { + if (!of_prop_val_eq(prop, overlay_prop)) { + pr_err("ERROR: changing value of #size-cells is not allowed in %pOF\n", + target->np); + ret = -EINVAL; + } + return ret; + } + } + if (is_symbols_prop) { if (prop) return -EINVAL; @@ -330,33 +348,18 @@ static int add_changeset_property(struct overlay_changeset *ovcs, return -ENOMEM; if (!prop) { - check_for_non_overlay_node = true; if (!target->in_livetree) { new_prop->next = target->np->deadprops; target->np->deadprops = new_prop; } ret = of_changeset_add_property(&ovcs->cset, target->np, new_prop); - } else if (!of_prop_cmp(prop->name, "#address-cells")) { - if (!of_prop_val_eq(prop, new_prop)) { - pr_err("ERROR: changing value of #address-cells is not allowed in %pOF\n", - target->np); - ret = -EINVAL; - } - } else if (!of_prop_cmp(prop->name, "#size-cells")) { - if (!of_prop_val_eq(prop, new_prop)) { - pr_err("ERROR: changing value of #size-cells is not allowed in %pOF\n", - target->np); - ret = -EINVAL; - } } else { - check_for_non_overlay_node = true; ret = of_changeset_update_property(&ovcs->cset, target->np, new_prop); } - if (check_for_non_overlay_node && - !of_node_check_flag(target->np, OF_OVERLAY)) + if (!of_node_check_flag(target->np, OF_OVERLAY)) pr_err("WARNING: memory leak will occur if overlay removed, property: %pOF/%s\n", target->np, new_prop->name); -- Frank Rowand