Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp1422068iob; Thu, 5 May 2022 00:21:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzTpkknHV8xNWAmzEgHf9qUhRTJ1lT6tk1pksAqKt45T5SijAqhryEFjxxF0FJofSod5J/H X-Received: by 2002:a17:903:110c:b0:14d:8859:5c8 with SMTP id n12-20020a170903110c00b0014d885905c8mr25605855plh.156.1651735262509; Thu, 05 May 2022 00:21:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651735262; cv=none; d=google.com; s=arc-20160816; b=UToyt/CcCN+gl9h1rYKscT5CMeKriZC6P0687yYpIxoGmAxnMwBFcN1N1ceU20QMAV J32IPhbz9UsVz0csK12js00XbldYeaf7lFHZfzVBV+TsRX1YHvIGJXno3oDivG1nmY2p fImZdlP/7UVdKRqnhmt1LKtjQ1ouEvJG+9JHcLIiSseZ3hMANHjNhGXuW4nwXHZ8HQjC bdXvl9mMcBz3EoiHZAnEGj35N8NwJqFsRZOj/iaD9VrlZ/HJjXaobOfpDtEojj1jJeV4 7QLFop7LTKue8/sRGZ0EyEy4z4F7VldUG5umkKOiLx52I77J2zb0+lRvQp6Prp+g58nG sc8Q== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=d5E68EYuJS0cLv3NadyCR6Subawx0t/0D3XRnBIF5EA=; b=mztaJzUGvxkMUfXMNzJiy/KuY7zAx+amFj8HfsfuyDluBkdmxbi4KIpxLKQyWQWvRp EPa/pZwkP3XJETjP4cqT9nULXWBWmoui3W/O8fBKJraMWABogzKcIQQZqtsXBkUdw8FD x8YutMWJMC+jutx39pCZgbLr/jIZjT185kQES6t01g0rb9WTY0knJJ1rJvq0KtU6QxlH Ag6iam/ABJuyprRcOpFXM3fbHuVAC7x64homb0vEpuSLzDXuFHXsyOUg9aMkP7/6D/Ad kZPVJAeA4OTtXiOA4AUSkl96KJR0CInivWzPtbNydIgtlOb695EGZmaPKgXJnCtsqhR7 PXOg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=B1jkjqHL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id g1-20020a63be41000000b003ab018efbe3si728352pgo.433.2022.05.05.00.20.47; Thu, 05 May 2022 00:21:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=B1jkjqHL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1378919AbiEDWBO (ORCPT + 99 others); Wed, 4 May 2022 18:01:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54556 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352006AbiEDWBN (ORCPT ); Wed, 4 May 2022 18:01:13 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 9E54F4C7B5 for ; Wed, 4 May 2022 14:57:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1651701452; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=d5E68EYuJS0cLv3NadyCR6Subawx0t/0D3XRnBIF5EA=; b=B1jkjqHLDlL5FaW6/IJrxYQ63GM9qf0gCZ8pb/QKj+XOhRdUtJhLtZCF5n25AUrBfcB1v1 OoxlI6yp/6lXVc0OfwFdJ4m+6LaRh+d3pOYmgKEyv42F5F3ScOvsCOW3TnhnNehz2lvoZm H+JoVUJIrIMBQRT4J+UZ9XGzCYBoWnI= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-505-_hPZMhfzNM-lIc9casZmeA-1; Wed, 04 May 2022 17:57:31 -0400 X-MC-Unique: _hPZMhfzNM-lIc9casZmeA-1 Received: by mail-wr1-f69.google.com with SMTP id m8-20020adfc588000000b0020c4edd8a57so816145wrg.10 for ; Wed, 04 May 2022 14:57:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=d5E68EYuJS0cLv3NadyCR6Subawx0t/0D3XRnBIF5EA=; b=7pSeqw66I+DbIJdRbIzF636xUA2pzIx21vS6VWpWnKKZNeyzY3+yW4kWEl2XP3IytF jtabfON53256/vvNnpeyx630CZ6hVQDcerMdZyhKVq1Kj0Ud1n5QRuQyoDXQtf3CoQLP F1lRI9teJeimrHisL/wVKpHn7fwY90QdrVJkG4mS+mpHCgkSQZ8sFKd93LV1+hmcW3jl wpHVDRKdy/QTuFAO07IoT+VW1qH+ScKnug5tFyeqIluu5jZ62TSQs5j63LFIOpncXjN7 fR0g7RsauxolNAtdGLmKZy+ASu68V0gySfOpyo29zmsjXhqe713zpHXSuwBK2W8MFGwy JndA== X-Gm-Message-State: AOAM531reVLDu9CKpRC+dOhoSJE9MbtwhzTdyChZEKe4LleV7KkQT1Gv FKAVNSS9sN0uWwjAN/RKoOj9gN4kU1oIfc3HKsgk/Pi+E63ihibMXsPuT0x81PvkHOWkMqs2Ene GMwjaJGxP7o2fC5K1GoZwzVNLp4+K494Rr5aGbt2fZ1zU4MRlwVxHfmIy+m/pPdtTg6HmRTQ/6A w= X-Received: by 2002:a7b:c199:0:b0:394:26d0:a6a9 with SMTP id y25-20020a7bc199000000b0039426d0a6a9mr1363682wmi.116.1651701450128; Wed, 04 May 2022 14:57:30 -0700 (PDT) X-Received: by 2002:a7b:c199:0:b0:394:26d0:a6a9 with SMTP id y25-20020a7bc199000000b0039426d0a6a9mr1363665wmi.116.1651701449798; Wed, 04 May 2022 14:57:29 -0700 (PDT) Received: from minerva.home (205.pool92-176-231.dynamic.orange.es. [92.176.231.205]) by smtp.gmail.com with ESMTPSA id 11-20020a05600c264b00b0039444973258sm5213068wmy.0.2022.05.04.14.57.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 May 2022 14:57:29 -0700 (PDT) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org, Daniel Vetter , Helge Deller , Hans de Goede , Javier Martinez Canillas Subject: [PATCH 2/3] fbdev/simplefb: Cleanup fb_info in .fb_destroy rather than .remove Date: Wed, 4 May 2022 23:57:22 +0200 Message-Id: <20220504215722.56970-1-javierm@redhat.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220504215151.55082-1-javierm@redhat.com> References: <20220504215151.55082-1-javierm@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-3.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW, SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The driver is calling framebuffer_release() in its .remove callback, but this will cause the struct fb_info to be freed too early. Since it could be that a reference is still hold to it if user-space opened the fbdev. This would lead to a use-after-free error if the framebuffer device was unregistered but later a user-space process tries to close the fbdev fd. The correct thing to do is to only unregister the framebuffer in the driver's .remove callback, but do any cleanup in the fb_ops.fb_destroy. Suggested-by: Daniel Vetter Signed-off-by: Javier Martinez Canillas --- drivers/video/fbdev/simplefb.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/video/fbdev/simplefb.c b/drivers/video/fbdev/simplefb.c index 94fc9c6d0411..2c198561c338 100644 --- a/drivers/video/fbdev/simplefb.c +++ b/drivers/video/fbdev/simplefb.c @@ -84,6 +84,10 @@ struct simplefb_par { static void simplefb_clocks_destroy(struct simplefb_par *par); static void simplefb_regulators_destroy(struct simplefb_par *par); +/* + * fb_ops.fb_destroy is called by the last put_fb_info() call at the end + * of unregister_framebuffer() or fb_release(). Do any cleanup here. + */ static void simplefb_destroy(struct fb_info *info) { struct simplefb_par *par = info->par; @@ -94,6 +98,8 @@ static void simplefb_destroy(struct fb_info *info) if (info->screen_base) iounmap(info->screen_base); + framebuffer_release(info); + if (mem) release_mem_region(mem->start, resource_size(mem)); } @@ -545,8 +551,8 @@ static int simplefb_remove(struct platform_device *pdev) { struct fb_info *info = platform_get_drvdata(pdev); + /* simplefb_destroy takes care of info cleanup */ unregister_framebuffer(info); - framebuffer_release(info); return 0; } -- 2.35.1