Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp1543634imm; Fri, 12 Oct 2018 21:57:14 -0700 (PDT) X-Google-Smtp-Source: ACcGV60SjJYS8DEBjgOt6Tg7c36RKExAfhX6LG4+rWxOUpeHS6dxXlQZkDyTY82PktgTLpA9rdel X-Received: by 2002:a17:902:28a2:: with SMTP id f31-v6mr8627758plb.312.1539406634846; Fri, 12 Oct 2018 21:57:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539406634; cv=none; d=google.com; s=arc-20160816; b=YQq9iz56EPkW6YF2rp3NygFppCYjeFvImiN8sqPVT+c/1QZislYt3RhZUIaG3zORkv CqUkfSv8MLa4GQplUdFmaIgHLn2hu+pz+k/24jVHWWsEKUrcrcEq6YaBlyUDl3MwPpVc pZ17ZQHUuDVJ6dk1VQNDZk/2PWD4dwH5MWQOsGGakKhf8EtT7hTk8KzhAGK9sywZt8Sl 4P4GLUI30/jd4SWayBz7nlw+RKyXiZ2yvtElz9LTnftz8Gs/7NUhAcJCHY1XQb8OjCx/ BLKV1iyLjAVY7nyw7tP+CQNUkTESvcO1zLydr/Z0FWydFdFexv9Op8vps4f6BVjQTeMN e4TQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=BwKhWXvi9uObifIA2caG7KxBnrbJ0SRY7Oj5Ow4g1sM=; b=tO2p5MCEvVIyx3h65hEPr16yU3sy0mZG0ExqB4Cy7XmO9pvE8h4eL3dpOwRkZHNuJ9 VuNeWoCzForg+rZdi2S0aYTdOtdtGl7CKj0FegbrUOn2CgcJA0nlxkD8HZJOILCtO9gw RsaZDwnKfBatw4pCZiRn6E/kFs+nP5/eRO/PrbWf+fdsV6h5humVcvJsqVM9tJ2JY67n kDJ2CYwbi3et/7fqfHzR2eFeUbhswU0O/kpVpMum17HAAhVs1hMVv4gyCamxk+TX10en HvXuaPWbc9Gx15Sunyfzl35xUJzWr/lfwksM4eBaqB9K8DcLh0RezslV77Q3riOiBp8x Trbg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=XZ4qXCA6; 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 y89-v6si3459435pfa.47.2018.10.12.21.57.00; Fri, 12 Oct 2018 21:57:14 -0700 (PDT) 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=XZ4qXCA6; 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 S1726970AbeJMMa5 (ORCPT + 99 others); Sat, 13 Oct 2018 08:30:57 -0400 Received: from mail-pl1-f194.google.com ([209.85.214.194]:39048 "EHLO mail-pl1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726758AbeJMMa4 (ORCPT ); Sat, 13 Oct 2018 08:30:56 -0400 Received: by mail-pl1-f194.google.com with SMTP id w14-v6so6817214plp.6; Fri, 12 Oct 2018 21:55:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=BwKhWXvi9uObifIA2caG7KxBnrbJ0SRY7Oj5Ow4g1sM=; b=XZ4qXCA6jBwzs4BJQJHCEF4+8gTh9fFr52BmTGEckHBTT9Nra/WMAJ32F3wyt0umZg jZ/jQJJx5dBAt/rhoUf98Vv9w6ypT/t1mMO5oZH2qxL61LON4yddsoR/uRFTw5yHXkKj J5ZsNLbBRQ1gpU/EHhZoxab8VZViK0hPgMy6DtQa2+JdFaaOlUyQZ7zGguVWI42m/hD1 ecgYiRoFLOlxQOSs+CS/d8KW3UttiD/brvms5FD/0Oq4jr9g6nlC+4bZKnBYM9xqHsLI TkdT4gIDUMvA0QLBxMnlyNgnLkhFjzy0FtV4Bm2stIZbhi08mQkJZOREl5RA9E9SFrMO 2epg== 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:in-reply-to :references; bh=BwKhWXvi9uObifIA2caG7KxBnrbJ0SRY7Oj5Ow4g1sM=; b=Nr2IiXgtkwwl5Y4iR0GLZO0Q6MkmTJy9Utw9t9XSKjP0+hukqrq8hI8MXilAmKsWjA EFR832dsFTPCp5SnlYN/UKOdhJbfifrJnZmDNcSHCOPr29kGKXIO/CiykBjignX9XW+t xhwthHCxlX+n5y6DsnXoSO5KI86BmiVVbkLlr70Jt02Uhg9FdKw/Ys112m8FMsmN0JKv 0L98/W7WU/TtMj6Ox20+ZeYyK/p67lQXOPUsrtuOIzcfttG6nbVlZ581V7B6pa1PXeMo cd5llRJENCOiTD6d7056hy5jHMZtSW/xivWrhtuYwoZeA2GcAigdq7wlaPvJcNxYYr8W VEnQ== X-Gm-Message-State: ABuFfogUfzFcDIibAv3Zvkgqp4bWHbh1eZc5ILmCqvQRCNGVj8Lpb7Y8 hyv5dDFuPNQ8WfBCetD2ZXg= X-Received: by 2002:a17:902:2:: with SMTP id 2-v6mr8743154pla.178.1539406516046; Fri, 12 Oct 2018 21:55:16 -0700 (PDT) Received: from localhost.localdomain (c-24-6-192-50.hsd1.ca.comcast.net. [24.6.192.50]) by smtp.gmail.com with ESMTPSA id h87-v6sm6959462pfj.78.2018.10.12.21.55.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 12 Oct 2018 21:55:15 -0700 (PDT) From: frowand.list@gmail.com To: Rob Herring , Pantelis Antoniou , Michael Ellerman , Benjamin Herrenschmidt , Paul Mackerras , Alan Tull , Moritz Fischer Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, devicetree@vger.kernel.org, linux-fpga@vger.kernel.org Subject: [PATCH v2 09/18] of: overlay: validate overlay properties #address-cells and #size-cells Date: Fri, 12 Oct 2018 21:53:29 -0700 Message-Id: <1539406418-18162-10-git-send-email-frowand.list@gmail.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1539406418-18162-1-git-send-email-frowand.list@gmail.com> References: <1539406418-18162-1-git-send-email-frowand.list@gmail.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Frank Rowand If overlay properties #address-cells or #size-cells are already in the live devicetree for any given node, then the values in the overlay must match the values in the live tree. If the properties are already in the live tree then there is no need to create a changeset entry to add them since they must have the same value. This reduces the memory used by the changeset and eliminates a possible memory leak. This is verified by 12 fewer warnings during the devicetree unittest, as the possible memory leak warnings about #address-cells and Signed-off-by: Frank Rowand --- drivers/of/overlay.c | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c index 272a0d1a5e18..ee66651db553 100644 --- a/drivers/of/overlay.c +++ b/drivers/of/overlay.c @@ -287,7 +287,12 @@ static struct property *dup_and_fixup_symbol_prop( * @target may be either in the live devicetree or in a new subtree that * is contained in the changeset. * - * Some special properties are not updated (no error returned). + * Some special properties are not added or updated (no error returned): + * "name", "phandle", "linux,phandle". + * + * Properties "#address-cells" and "#size-cells" are not updated if they + * are already in the live tree, but if present in the live tree, the values + * in the overlay must match the values in the live tree. * * Update of property in symbols node is not allowed. * @@ -300,6 +305,7 @@ 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 (!of_prop_cmp(overlay_prop->name, "name") || !of_prop_cmp(overlay_prop->name, "phandle") || @@ -322,13 +328,39 @@ static int add_changeset_property(struct overlay_changeset *ovcs, if (!new_prop) return -ENOMEM; - if (!prop) + if (!prop) { + + check_for_non_overlay_node = true; ret = of_changeset_add_property(&ovcs->cset, target->np, new_prop); - else + + } else if (!of_prop_cmp(prop->name, "#address-cells")) { + + if (prop->length != 4 || new_prop->length != 4 || + *(u32 *)prop->value != *(u32 *)new_prop->value) + pr_err("ERROR: overlay and/or live tree #address-cells invalid in node %pOF\n", + target->np); + + } else if (!of_prop_cmp(prop->name, "#size-cells")) { + + if (prop->length != 4 || new_prop->length != 4 || + *(u32 *)prop->value != *(u32 *)new_prop->value) + pr_err("ERROR: overlay and/or live tree #size-cells invalid in node %pOF\n", + target->np); + + } 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)) + pr_err("WARNING: %s(), memory leak will occur if overlay removed. Property: %pOF/%s\n", + __func__, target->np, new_prop->name); + if (ret) { kfree(new_prop->name); kfree(new_prop->value); -- Frank Rowand