Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp3850090pxv; Mon, 19 Jul 2021 10:13:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx0hrZ1StQuGFZYM35QPryEN0BH4b2bleKX6Rbt8dkp2Aaxiklcyku5s/LB20wJzid1cPO6 X-Received: by 2002:a92:bf0b:: with SMTP id z11mr18603002ilh.60.1626714782505; Mon, 19 Jul 2021 10:13:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626714782; cv=none; d=google.com; s=arc-20160816; b=oc6eZEQLtwScew2LYU3la2720bM2QPmkmactKwj6lYA66AIoEV2j6TMbxqVCyBhyk0 +9TQ6vanO/bkGUM5c+OLds/nqOGXKDKWMi/bDRUz7qyiv0KWhQe7Izmv5neK7XmBeEP/ TVeCemUN4GejAwxQxA51UbSyWMWxuVg7B6taHJTztqxtRAfPwx7HVZyvyAg06jSnKL8w wpuCi7/7g8LS39hFKQXHUBCvvJhfaV9/hkdToBCO2kY/RP5XhpXy/YGmneeJTccyrrwT CR3wf7FTV2D+a37T01delywSsTItpXGIGALwRJzJ+JIJfcpFa9gi5Tfs4NqB9TqhQP1v uoHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=tf1XuVCsD+CKZA9m/1dONBc4+UYXHixqSLlB77m/3dA=; b=zSzVeQMkVPHevEIoMquZjQAe7HgdqaW8wXBgCvhi73jv+o9GTKYgJR1omQAXpp5nH5 WQfIZOisIIcszX/eKWQLR2LpOEhs2suq3ck/c3jEOYCBiwSI8azC2yh9f9MVfS9fl9zi fW29qx+/o3KIw4uVPWF/0i6s68ifxWLG9iDjH1qPj3X9UQoh3MIXOo5MiqriVZRhlqam FAxqZ5xy+rnglj5zpr+4Cel1EfqL8P5WbbqGNciXcvmM/krIRV0iPFt6kxhhrX9/PlWk z1U2XE88IwtEZuUmiY1/L2/b370SMBWxzvBjKdNEXdW0cWWRA6BSxcQTIgvGM4dw+/p3 43Uw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=hdEjEs94; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u2si21281403ilq.111.2021.07.19.10.12.49; Mon, 19 Jul 2021 10:13:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=hdEjEs94; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347116AbhGSQbi (ORCPT + 99 others); Mon, 19 Jul 2021 12:31:38 -0400 Received: from mail.kernel.org ([198.145.29.99]:56906 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347438AbhGSPQV (ORCPT ); Mon, 19 Jul 2021 11:16:21 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 23708611C1; Mon, 19 Jul 2021 15:56:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626710216; bh=4l/AoMsvGwjk7Lsth8aoRoQQpUwOUt4rTVkI0sOT9vM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hdEjEs94FYfIakBWR0n+tM4VlrHf6i7t/yBmd8CSfy9sjrBCjrxsDdqJ6pMRMx5VO 4NCyuQwql4Pw4FaR2/1O3fImwpYbV1PNBlBGV4iIgmJ8y6hf5I5q3IxC4o17w06wV4 Igwye1wqN2Yxj69fjCWDjGgJ/5ptT+hJPJpQgVOY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Hulk Robot , Zou Wei , Guenter Roeck , Vladimir Zapolskiy , Wim Van Sebroeck , Sasha Levin Subject: [PATCH 5.10 125/243] watchdog: Fix possible use-after-free by calling del_timer_sync() Date: Mon, 19 Jul 2021 16:52:34 +0200 Message-Id: <20210719144944.942445469@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210719144940.904087935@linuxfoundation.org> References: <20210719144940.904087935@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Zou Wei [ Upstream commit d0212f095ab56672f6f36aabc605bda205e1e0bf ] This driver's remove path calls del_timer(). However, that function does not wait until the timer handler finishes. This means that the timer handler may still be running after the driver's remove function has finished, which would result in a use-after-free. Fix by calling del_timer_sync(), which makes sure the timer handler has finished, and unable to re-schedule itself. Reported-by: Hulk Robot Signed-off-by: Zou Wei Reviewed-by: Guenter Roeck Acked-by: Vladimir Zapolskiy Link: https://lore.kernel.org/r/1620802676-19701-1-git-send-email-zou_wei@huawei.com Signed-off-by: Guenter Roeck Signed-off-by: Wim Van Sebroeck Signed-off-by: Sasha Levin --- drivers/watchdog/lpc18xx_wdt.c | 2 +- drivers/watchdog/w83877f_wdt.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/watchdog/lpc18xx_wdt.c b/drivers/watchdog/lpc18xx_wdt.c index 78cf11c94941..60b6d74f267d 100644 --- a/drivers/watchdog/lpc18xx_wdt.c +++ b/drivers/watchdog/lpc18xx_wdt.c @@ -292,7 +292,7 @@ static int lpc18xx_wdt_remove(struct platform_device *pdev) struct lpc18xx_wdt_dev *lpc18xx_wdt = platform_get_drvdata(pdev); dev_warn(&pdev->dev, "I quit now, hardware will probably reboot!\n"); - del_timer(&lpc18xx_wdt->timer); + del_timer_sync(&lpc18xx_wdt->timer); return 0; } diff --git a/drivers/watchdog/w83877f_wdt.c b/drivers/watchdog/w83877f_wdt.c index 5772cc5d3780..f2650863fd02 100644 --- a/drivers/watchdog/w83877f_wdt.c +++ b/drivers/watchdog/w83877f_wdt.c @@ -166,7 +166,7 @@ static void wdt_startup(void) static void wdt_turnoff(void) { /* Stop the timer */ - del_timer(&timer); + del_timer_sync(&timer); wdt_change(WDT_DISABLE); -- 2.30.2