Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1173443imu; Thu, 13 Dec 2018 10:30:37 -0800 (PST) X-Google-Smtp-Source: AFSGD/UZEg6zIY1NF+ZDHtydCoVMmYCsDFydB39ScnYatiXwmoj35pFVj6Y1KXQsIpRoRQTLGS2M X-Received: by 2002:a63:d547:: with SMTP id v7mr22459658pgi.339.1544725837314; Thu, 13 Dec 2018 10:30:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544725837; cv=none; d=google.com; s=arc-20160816; b=B3WxBDcl9q5j+NSJwY0r0jw6VQAbW9kSbTx9tUw9Mj/Vv581e/neVQSprA0fD9riMa NgK8JVebzzc5b98f6BaQzG+a/kKd5mdvCB6x1hIlXQ3y+srdNmQR0mMzyB1IFC854nr5 xWkT9VKA43sIoGR7H7fkq8XgHb9MMML+eb6Pzp3OpyYnLgbV6Va+0dUxArwaFRY0osQb vXFMjiIo2FruyBkflnwUvW88wKvGOyrd7Ag7iK/9mfoHGSYtqFytmMyVcrAd/A3w/MHl eZufWr8Hz1ajCBpoOJJrdDWTsNy/yfXIFdsNSwNA5tjzWSNFklriRBd+T/cG7Jn4nMO2 rrxg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=0CxhiPJbXWk/qQWrCv6KB+7xUGeGfCndKXppDuCbBBw=; b=W/Ntn85/9oScnp0tUnvK9PIAyiNjgAPddbdhxNX2hwGZMh53TzmUaRMMHSaXssAduo TfuHTYDu2KPeL5hicXvMlpqUyDidkbd9Rvp5QyCypFaCq9qlkgUCddFvH1rJOLWLLqvB E/9/Fj+txcj5gyIb1685Xh2878+XG85A/0JL5BqTz0UQwl8KuM+dRZHzgCnkuY1/a5Hy lfFcWhfdgvgxQ12FMq1PcssbJQHcLj5d1c6s6dvMSESdZ3LRRxStNapDJePlP7OURwQl YWFjlosQSeX/XL1esXKWH90m5tGFpXGOYkKJFb4/iDuSUPjU05uWrFWMi0EF+QyZg8G/ QatQ== ARC-Authentication-Results: i=1; mx.google.com; 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 l33si2078720pld.142.2018.12.13.10.30.21; Thu, 13 Dec 2018 10:30:37 -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; 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 S1728755AbeLMS2J (ORCPT + 99 others); Thu, 13 Dec 2018 13:28:09 -0500 Received: from cloudserver094114.home.pl ([79.96.170.134]:57956 "EHLO cloudserver094114.home.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727340AbeLMS2J (ORCPT ); Thu, 13 Dec 2018 13:28:09 -0500 Received: from 79.184.252.35.ipv4.supernova.orange.pl (79.184.252.35) (HELO aspire.rjw.lan) by serwer1319399.home.pl (79.96.170.134) with SMTP (IdeaSmtpServer 0.83.183) id ef3a5b3589861782; Thu, 13 Dec 2018 19:28:07 +0100 From: "Rafael J. Wysocki" To: Greg Kroah-Hartman Cc: Martin Liu , Alan Stern , LKML , Linux PM , Daniel Vetter Subject: [PATCH] driver core: Add missing dev->bus->need_parent_lock checks Date: Thu, 13 Dec 2018 19:27:47 +0100 Message-ID: <7586985.G9YL5ver76@aspire.rjw.lan> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Rafael J. Wysocki __device_release_driver() has to check dev->bus->need_parent_lock before dropping the parent lock and acquiring it again as it may attempt to drop a lock that hasn't been acquired or lock a device that shouldn't be locked and create a lock imbalance. Fixes: 8c97a46af04b (driver core: hold dev's parent lock when needed) Signed-off-by: Rafael J. Wysocki --- This should go into -stable for everything over 4.18 methinks. --- drivers/base/dd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) Index: linux-pm/drivers/base/dd.c =================================================================== --- linux-pm.orig/drivers/base/dd.c +++ linux-pm/drivers/base/dd.c @@ -933,11 +933,11 @@ static void __device_release_driver(stru while (device_links_busy(dev)) { device_unlock(dev); - if (parent) + if (parent && dev->bus->need_parent_lock) device_unlock(parent); device_links_unbind_consumers(dev); - if (parent) + if (parent && dev->bus->need_parent_lock) device_lock(parent); device_lock(dev);