From patchwork Tue Dec 19 08:33:29 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 122342 Delivered-To: patch@linaro.org Received: by 10.140.22.227 with SMTP id 90csp3863291qgn; Tue, 19 Dec 2017 00:33:55 -0800 (PST) X-Google-Smtp-Source: ACJfBos1UIjssHf5rG/0+2RBcugBgWh7ofRMWkL9XHvmxhNkOqQXVW15+LdC/NuaJFr/n3KJl74E X-Received: by 10.101.72.76 with SMTP id i12mr2260223pgs.436.1513672434913; Tue, 19 Dec 2017 00:33:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1513672434; cv=none; d=google.com; s=arc-20160816; b=cdVDfgRt6yAnT1gro1iba+KkFrXuULxVY0fMPgav+Vvst9LLPA3NCdu58gEyRs/RnB w+bGpneR6GOcfPJqqINFuW7YwUhGDekMU7xEpiibTV0NVKNVsgeFNV+m3T/dS6zOJ/7M uKaDwerNCzRgvMJtBK2rmZ4YsvHRz7LdkkZKHOUK9FcXB+lSTDSyiQtW2O2jebNOIW2L lE3y1oBkjJcyzHYYTmNhj/cVwlYBwSVtu1U5oASckkRuw5WeXERNfRUogFTWX7XQvofh MoG5oXbOQ7Ng9QetLayXif3vZ4hIcnus2fWLatPgwKjPAcUeqzD8gqv1qYACffqOYYem nXEQ== 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:arc-authentication-results; bh=FdTfzTpj+07IVS0FMxw9fdsNVortVYwNtRZ+vjmwc9Y=; b=ZSXIAmgu42cMpr/yRIwfiChkWP4IdbUi8xU3vYGBjlTAYhtoNnGNsKLAQwrzbpzNnu 04gPhQb5rTGi2AA87JKiqx4fcUVQWhv1ANT8LtFkevdT6JzO7FGnh8HT6dRlDpMScFa/ yZVlsXvECWTU2R11VZW4tLpTwg9POJ10FNSHdjEGastgZ/QWN1mvItRMQ62a+1vPrYBF g3PkHf6xScF/YA3jS4+ueHs/qIvSsGLX9RegEzw1jbY3rrPMHSuI20GPOZd6NQbCB0AH mUGihJpiHEM1jeauzuhroJruJn6hpimyz7OvjYLJECiyOEEwASrRxX9ljlka61Dfc+tr fVGw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=OvnE8Vsh; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f10si9752874pgn.623.2017.12.19.00.33.54; Tue, 19 Dec 2017 00:33:54 -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=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=OvnE8Vsh; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1761428AbdLSIdv (ORCPT + 28 others); Tue, 19 Dec 2017 03:33:51 -0500 Received: from mail-wr0-f196.google.com ([209.85.128.196]:43530 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758444AbdLSIds (ORCPT ); Tue, 19 Dec 2017 03:33:48 -0500 Received: by mail-wr0-f196.google.com with SMTP id w68so5424886wrc.10 for ; Tue, 19 Dec 2017 00:33:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=FdTfzTpj+07IVS0FMxw9fdsNVortVYwNtRZ+vjmwc9Y=; b=OvnE8VshGD+8pqOZtLF7UI/yJN8114aqr0TLvXUtMu+9clUiOdj2QNN95ljU5CN7rs gkBaz372f6txx4kP1mhDC2G90+ZsXc9cVtDo+Q+zqlYvPeUU5i5cn0mNQw7jcxWRbqnN pW5kE+nUTOmo5kRH4zysRaKTKDyVlLikToUgNuTIbBMJ1ZYr0AAOEFG32h0HGFH7UR6S bNGcv5gjCLSjRTKCPLkIYp3TcWrJBewBUgicUVOpCcXXSwR8p6T44eSgdxeIQAbybGzS /HqL08ry7Hb2UkzOXusxvJ1fP1X6yqa5BIRM0gL8cfoULX05u8Fpm012xlYlmGVjsU41 sgow== 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=FdTfzTpj+07IVS0FMxw9fdsNVortVYwNtRZ+vjmwc9Y=; b=OZRZJL81pgq+TNQ9BE8aqoFmLeGz2wnqzA0n81iR2nrMr3ELzaMQuFAAT6HbRenNFo ArcPZ8sqc31ALU8RS32b4mP8Tm4ZKQCy7S6HVEq0VOGi+IU361FhriNAx6tjiY2ITOct Ba445WoUE2ofOQ0/edR6GBp+c8S0U0QTHXgCVb81/M9cDn0f7KXkTBXqw7FoNiW6ikML lL93Wu22Fje2IVjiouvlLXAps8V6pVqwag64VXw+gZjf9NF6VkWgVJtFytqVJKqHvrAt Ev4M//IhkkWNUPifgKQXERhpkgtRk23hayMRx9eFKX+JwUzw6P/Fdjs0jFVXAQgmrm8/ ejZw== X-Gm-Message-State: AKGB3mJGCyBqK7OLbyWvKB8vv3hzQiubiYLM17yfhZX3wFe1HfvpRSSf awkGsss5WaABFPAJwtlm3p+8sA== X-Received: by 10.223.154.112 with SMTP id z103mr4119412wrb.210.1513672427232; Tue, 19 Dec 2017 00:33:47 -0800 (PST) Received: from localhost.localdomain (cag06-3-82-243-161-21.fbx.proxad.net. [82.243.161.21]) by smtp.googlemail.com with ESMTPSA id g54sm6543590wrg.43.2017.12.19.00.33.46 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 19 Dec 2017 00:33:46 -0800 (PST) From: Jerome Brunet To: Michael Turquette , Stephen Boyd Cc: Jerome Brunet , linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2] clk: check ops pointer on clock register Date: Tue, 19 Dec 2017 09:33:29 +0100 Message-Id: <20171219083329.24746-1-jbrunet@baylibre.com> X-Mailer: git-send-email 2.14.3 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Nothing really prevents a provider from (trying to) register a clock without providing the clock ops structure. We do check the individual fields before using them, but not the structure pointer itself. This may have the usual nasty consequences when the pointer is dereferenced, most likely when checking one the field during the initialization. This is fixed by returning an error on clock register if the ops pointer is NULL. Signed-off-by: Jerome Brunet --- Changes since v1: * Add WARN_ON so the error cannot be silently ignored * Remove fixes tag drivers/clk/clk.c | 7 +++++++ 1 file changed, 7 insertions(+) -- 2.14.3 diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 8a1860a36c77..211f97e8dc65 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -2683,7 +2683,13 @@ struct clk *clk_register(struct device *dev, struct clk_hw *hw) ret = -ENOMEM; goto fail_name; } + + if (WARN_ON(!hw->init->ops)) { + ret = -EINVAL; + goto fail_ops; + } core->ops = hw->init->ops; + if (dev && pm_runtime_enabled(dev)) core->dev = dev; if (dev && dev->driver) @@ -2745,6 +2751,7 @@ struct clk *clk_register(struct device *dev, struct clk_hw *hw) kfree_const(core->parent_names[i]); kfree(core->parent_names); fail_parent_names: +fail_ops: kfree_const(core->name); fail_name: kfree(core);