Received: by 2002:a05:6358:45e:b0:b5:b6eb:e1f9 with SMTP id 30csp1969705rwe; Fri, 2 Sep 2022 06:46:37 -0700 (PDT) X-Google-Smtp-Source: AA6agR7Cs2UimCsfSwEatJncjXWu46DxhrdQVYwVDe/3gv2d6eL4Atp6m31YmyoCvy74sL/UDLcx X-Received: by 2002:a17:90b:4a09:b0:1fd:d4be:fed4 with SMTP id kk9-20020a17090b4a0900b001fdd4befed4mr5108311pjb.6.1662126396689; Fri, 02 Sep 2022 06:46:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662126396; cv=none; d=google.com; s=arc-20160816; b=WZcD4YRGvBKgZfJfrKU3ASpSUU6R788V1ztgxSzpe85TR77FpnA8dnmcD6EiPRK8OC TIhkRc8b+Z6LYzZ/GaWZjLsYKH3+A6IxSayyxDmylKNkWZrIv2unJi+6lJEL6xPQnHyX UlU2XXibb3ksfDnSahtD1J7Pau5Gmz2xEtlHj1d0tgaUCFQLqyoj4tdjP08Nm9aL0iHl +HXWoT00seYquhmMDmyjBYsCtDi6oWO0di4J+RsAtbIl640iYWZ1smetwlcF3rJmr8dL AGDkLcqXM+d8Co9PvdiWAMEn/fJ26Ledzc8tR/9oU5YAlblSu0P3WDk8lgOvYmZPT7KZ QBqQ== 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=a5uzfOk60WFFY0fh+xCHCkfyFtUwkMdOiTI3xISOpbc=; b=CjIaRAYCMAwAYduJ8kq/tHoyYHPNWdICK57QZWXgL9Hpj0qOF6p4pq3q2R7q5rz7oH jNR4hfgxqMqnNgpF6c364tzSVADSGUCiY3bVGa5QhlwGjd8F8YzPG9QoZbWXhKgAaZPJ XamRufBUiRiX1r3n/QpTXjXvu2P0aFcJ4eEMH9BaeC14HM32GsYzcfVuFArraQ7R62Cl eMPY0A8X80SR8KNf9UtkwAGkjn97lEfgl1VUm5gmy4G9EuJQvmLEZv47I0P1EwvXRHBN JQM21wGV9/jnL/HN/ClrtqYq1JBsTP88w+e/PhI2PfiUEFM+2K4N2q+42FqvawfvsMaQ BhzQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=ZQ9kEfMu; 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=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id iz2-20020a170902ef8200b0016cd74e550fsi1996750plb.351.2022.09.02.06.46.24; Fri, 02 Sep 2022 06:46:36 -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=@linuxfoundation.org header.s=korg header.b=ZQ9kEfMu; 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=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236413AbiIBM2M (ORCPT + 99 others); Fri, 2 Sep 2022 08:28:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36980 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235829AbiIBM1d (ORCPT ); Fri, 2 Sep 2022 08:27:33 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A5539DD743; Fri, 2 Sep 2022 05:24:09 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 5CE8AB82A91; Fri, 2 Sep 2022 12:23:18 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8B22EC433D7; Fri, 2 Sep 2022 12:23:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1662121397; bh=X2kyHRGmPFA4IG7DMX7lJ498RS9kJ6XcbHqpncdeLrk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZQ9kEfMu7pUEKUbPr2XJr+iLy9uJHs9jsMiC5kbi3ZLTuTYgZz40jnfhWDZxsEXai LlIwKpcPz5EfF7CEX9lOcJBQvqKh+x1Vp1AAr9zhamQBbDmCCtEZ4t30FOAAnFJkQn ATDFMOGwO2DB02SYN8ibchlMMSHMxHvfx5eXqNpU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Zheyu Ma , Letu Ren , Helge Deller Subject: [PATCH 4.14 35/42] fbdev: fb_pm2fb: Avoid potential divide by zero error Date: Fri, 2 Sep 2022 14:18:59 +0200 Message-Id: <20220902121359.998704160@linuxfoundation.org> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20220902121358.773776406@linuxfoundation.org> References: <20220902121358.773776406@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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 From: Letu Ren commit 19f953e7435644b81332dd632ba1b2d80b1e37af upstream. In `do_fb_ioctl()` of fbmem.c, if cmd is FBIOPUT_VSCREENINFO, var will be copied from user, then go through `fb_set_var()` and `info->fbops->fb_check_var()` which could may be `pm2fb_check_var()`. Along the path, `var->pixclock` won't be modified. This function checks whether reciprocal of `var->pixclock` is too high. If `var->pixclock` is zero, there will be a divide by zero error. So, it is necessary to check whether denominator is zero to avoid crash. As this bug is found by Syzkaller, logs are listed below. divide error in pm2fb_check_var Call Trace: fb_set_var+0x367/0xeb0 drivers/video/fbdev/core/fbmem.c:1015 do_fb_ioctl+0x234/0x670 drivers/video/fbdev/core/fbmem.c:1110 fb_ioctl+0xdd/0x130 drivers/video/fbdev/core/fbmem.c:1189 Reported-by: Zheyu Ma Signed-off-by: Letu Ren Signed-off-by: Helge Deller Signed-off-by: Greg Kroah-Hartman --- drivers/video/fbdev/pm2fb.c | 5 +++++ 1 file changed, 5 insertions(+) --- a/drivers/video/fbdev/pm2fb.c +++ b/drivers/video/fbdev/pm2fb.c @@ -614,6 +614,11 @@ static int pm2fb_check_var(struct fb_var return -EINVAL; } + if (!var->pixclock) { + DPRINTK("pixclock is zero\n"); + return -EINVAL; + } + if (PICOS2KHZ(var->pixclock) > PM2_MAX_PIXCLOCK) { DPRINTK("pixclock too high (%ldKHz)\n", PICOS2KHZ(var->pixclock));