Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp4621590pxt; Wed, 11 Aug 2021 10:02:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwhBTznXHkh1Zi1htboef/tBbr5AQ+gDMq5mYwlkqfGQUKEII2A41Dtgs6g3zu656R12XP+ X-Received: by 2002:aa7:db13:: with SMTP id t19mr12439357eds.72.1628701322953; Wed, 11 Aug 2021 10:02:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628701322; cv=none; d=google.com; s=arc-20160816; b=AkwjaLz4URHPkYZqIRv5WEiIW/N9Yq9u5AbAvnoqtH47UmPCXLB5JQ4E2yMpH/L5E8 ISK5oE6hb9ruY3Yzg8an7Yp0FYcbnntOf52KT9X697etXSL74m7Kw07gWStCYEZen9sH rpRbjFHM8HGOtmuDmsxsKn9mRiYxeY5RnTJZ/DWilzK6yqUSYMprU3NIcOHpep/gHAxV bVIaI5pBLIdNJbsAIjFVmE6qoX6aXbdhZEIcR5hfmUfqTtyEUm85ExqIKcHD8GbAHLI1 a7IWipI/A9WYlK+DG6j9XDfqHLG2WeJ3GHbkZWEJPHsAta0RX+9DCE/C3Qe0CVKqzpML cAuQ== 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 :message-id:date:subject:cc:to:from; bh=A3dtf2KSJ9PXxQSUpfJdZSXRk/j/APmjxbxhdcqkBSI=; b=vTB3ILRzQf0dLZQ6B9va3XwrzjubOQJmLaiebjt5wKqGU9RyKBvWL3NxrUA6fa/cwH XVwYQ//yOsvaNVfU9oecf205lq/my4SRdJ6BtF+oxBXAklOlqhu2xqIqHpn54HlV6YcL QAl9oDH2bJ3+0oXi+KORmLm1qjLpDwwwMtfYlSYBpaTdtP3CBO/Czj5EszCFmtP0I18T jyn+JYonMjsD6Kvv3tE9HN0fDkZIFZhEFB/yRqKoo3fO60K9XdBVI4CqNfyilf+yOjaf iEYNct1rW87upXdmaWbLj5mA5pSxJkeQxO2evCH7PG9H7h3l3nK79lGcLQfka+L9FEaE Qpzg== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=ispras.ru Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dn3si24682496edb.75.2021.08.11.10.01.35; Wed, 11 Aug 2021 10:02: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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=ispras.ru Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229600AbhHKQ6w (ORCPT + 99 others); Wed, 11 Aug 2021 12:58:52 -0400 Received: from mail.ispras.ru ([83.149.199.84]:37606 "EHLO mail.ispras.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229484AbhHKQ6v (ORCPT ); Wed, 11 Aug 2021 12:58:51 -0400 Received: from hellwig.intra.ispras.ru (unknown [10.10.2.182]) by mail.ispras.ru (Postfix) with ESMTPS id DA74440A2BD8; Wed, 11 Aug 2021 16:58:26 +0000 (UTC) From: Evgeny Novikov To: dri-devel@lists.freedesktop.org Cc: Evgeny Novikov , linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org, Kirill Shilimanov Subject: [PATCH] video: fbdev: w100fb: Reset global state Date: Wed, 11 Aug 2021 19:58:26 +0300 Message-Id: <20210811165826.23752-1-novikov@ispras.ru> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org w100fb_probe() did not reset the global state to its initial state. This can result in invocation of iounmap() even when there was not the appropriate successful call of ioremap(). For instance, this may be the case if first probe fails after two successful ioremap() while second probe fails when first ioremap() fails. The similar issue is with w100fb_remove(). The patch fixes both bugs. Found by Linux Driver Verification project (linuxtesting.org). Signed-off-by: Evgeny Novikov Co-developed-by: Kirill Shilimanov Signed-off-by: Kirill Shilimanov --- drivers/video/fbdev/w100fb.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/video/fbdev/w100fb.c b/drivers/video/fbdev/w100fb.c index d96ab28f8ce4..4e641a780726 100644 --- a/drivers/video/fbdev/w100fb.c +++ b/drivers/video/fbdev/w100fb.c @@ -770,12 +770,18 @@ static int w100fb_probe(struct platform_device *pdev) fb_dealloc_cmap(&info->cmap); kfree(info->pseudo_palette); } - if (remapped_fbuf != NULL) + if (remapped_fbuf != NULL) { iounmap(remapped_fbuf); - if (remapped_regs != NULL) + remapped_fbuf = NULL; + } + if (remapped_regs != NULL) { iounmap(remapped_regs); - if (remapped_base != NULL) + remapped_regs = NULL; + } + if (remapped_base != NULL) { iounmap(remapped_base); + remapped_base = NULL; + } if (info) framebuffer_release(info); return err; @@ -795,8 +801,11 @@ static int w100fb_remove(struct platform_device *pdev) fb_dealloc_cmap(&info->cmap); iounmap(remapped_base); + remapped_base = NULL; iounmap(remapped_regs); + remapped_regs = NULL; iounmap(remapped_fbuf); + remapped_fbuf = NULL; framebuffer_release(info); -- 2.26.2