Received: by 2002:a05:6a11:4021:0:0:0:0 with SMTP id ky33csp1557217pxb; Thu, 16 Sep 2021 09:51:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz6nyFnTWDEHzk8IeER8PxXJ7v++z80nWl1o+F1g3LhtkFQa1BOBJUh0Q9mdLPLiekXUcUI X-Received: by 2002:a50:c31c:: with SMTP id a28mr7687265edb.384.1631811111886; Thu, 16 Sep 2021 09:51:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631811111; cv=none; d=google.com; s=arc-20160816; b=uEe5/5VjsUfAW/DAXyUgBNG3KQuwJBykgbi04qGI1T4ckJIheyWtRtyms1a/erTpIh PymTFQSpoR7DYtpHNN7J765pj/aIbCvNV3YYpDuTaebgCAye+ZmbQgV01bsu6b6tywxZ mCiaLwpAJHHqoYxTfu34UXPvIu8PdyqZY8+dw3X+ZMaOMB8hhw+EF3MYSE4WxX354ahS 9LHZjOGEE1A8EqHXRomcX291cHXFZsROtveglyUEVJoNyM4rBZSHu+9dSimz+i1LmA9M Mr8A35SP/uMm1gNOA9UpveSk+vQEvLr87U0cUpO1zi0fNm4RAnfaX8YHQhFqmctqLpGe IVeQ== 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=rzFpaDPV5zP9X7cuAs6aULZhjhqtruE2hYxCXpvvp7U=; b=Qd5f81sI6Kn5e9nNw7IrgZiXj2tRM2Jry8ZvgIJeaLlgzlQJ0a6MlIgCR3KKCh6FJf LopgmZ1gqlTCUFfATSeHxJzGc2VcrS2j27OVrXVsAozoti1IKKuPdcdsU012VCttstl3 QwkCs+jT2CLszi+BCCYhOE7SDDZyAprnBW4RwsK1Y4uf3o8Eo/YSWA+a1uhu01JTLCF6 k4gZ78z0lDO7ZMzAktZVzmysoH/FMhJubV2eHxD6fAXgh8UH2vGqOBrPeVGUhOm8Q5c7 9YqMuTbE5mkykZ78aayBoMqRQZVpNVgUgFx33g9d7vy5ms3TSb8Ex9PRgdrLSUdTsfyA YLHA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="BL07/P+O"; 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 qa35si3938442ejc.32.2021.09.16.09.51.24; Thu, 16 Sep 2021 09:51:51 -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="BL07/P+O"; 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 S1345256AbhIPQuB (ORCPT + 99 others); Thu, 16 Sep 2021 12:50:01 -0400 Received: from mail.kernel.org ([198.145.29.99]:57856 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344227AbhIPQox (ORCPT ); Thu, 16 Sep 2021 12:44:53 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 90F1A6103B; Thu, 16 Sep 2021 16:25:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1631809556; bh=L6dGz8/J8+Yzbn3xmkmqNCDjXg+BWLDTee5jp1EzVqE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BL07/P+OOc/7/RLHlS+A7FMYJOUiG9uoKbwQhX9cIrV/z/3Ah26tohZzp6tXOUmA2 7B31PLrdRoZonHvc+Yzwt7gifsCr+Sft64rMuxGz689qSW6KF/nCAHwtClifbkpQGZ +MAJiPR26qaqA81ZT06fQPpNOJHXK/i2gVsJcEZE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Zheyu Ma , Sam Ravnborg , Sasha Levin Subject: [PATCH 5.13 197/380] video: fbdev: riva: Error out if pixclock equals zero Date: Thu, 16 Sep 2021 17:59:14 +0200 Message-Id: <20210916155810.778735305@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210916155803.966362085@linuxfoundation.org> References: <20210916155803.966362085@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: Zheyu Ma [ Upstream commit f92763cb0feba247e0939ed137b495601fd072a5 ] The userspace program could pass any values to the driver through ioctl() interface. If the driver doesn't check the value of 'pixclock', it may cause divide error. Fix this by checking whether 'pixclock' is zero first. The following log reveals it: [ 33.396850] divide error: 0000 [#1] PREEMPT SMP KASAN PTI [ 33.396864] CPU: 5 PID: 11754 Comm: i740 Not tainted 5.14.0-rc2-00513-gac532c9bbcfb-dirty #222 [ 33.396883] RIP: 0010:riva_load_video_mode+0x417/0xf70 [ 33.396969] Call Trace: [ 33.396973] ? debug_smp_processor_id+0x1c/0x20 [ 33.396984] ? tick_nohz_tick_stopped+0x1a/0x90 [ 33.396996] ? rivafb_copyarea+0x3c0/0x3c0 [ 33.397003] ? wake_up_klogd.part.0+0x99/0xd0 [ 33.397014] ? vprintk_emit+0x110/0x4b0 [ 33.397024] ? vprintk_default+0x26/0x30 [ 33.397033] ? vprintk+0x9c/0x1f0 [ 33.397041] ? printk+0xba/0xed [ 33.397054] ? record_print_text.cold+0x16/0x16 [ 33.397063] ? __kasan_check_read+0x11/0x20 [ 33.397074] ? profile_tick+0xc0/0x100 [ 33.397084] ? __sanitizer_cov_trace_const_cmp4+0x24/0x80 [ 33.397094] ? riva_set_rop_solid+0x2a0/0x2a0 [ 33.397102] rivafb_set_par+0xbe/0x610 [ 33.397111] ? riva_set_rop_solid+0x2a0/0x2a0 [ 33.397119] fb_set_var+0x5bf/0xeb0 [ 33.397127] ? fb_blank+0x1a0/0x1a0 [ 33.397134] ? lock_acquire+0x1ef/0x530 [ 33.397143] ? lock_release+0x810/0x810 [ 33.397151] ? lock_is_held_type+0x100/0x140 [ 33.397159] ? ___might_sleep+0x1ee/0x2d0 [ 33.397170] ? __mutex_lock+0x620/0x1190 [ 33.397180] ? trace_hardirqs_on+0x6a/0x1c0 [ 33.397190] do_fb_ioctl+0x31e/0x700 Signed-off-by: Zheyu Ma Signed-off-by: Sam Ravnborg Link: https://patchwork.freedesktop.org/patch/msgid/1627293835-17441-4-git-send-email-zheyuma97@gmail.com Signed-off-by: Sasha Levin --- drivers/video/fbdev/riva/fbdev.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/video/fbdev/riva/fbdev.c b/drivers/video/fbdev/riva/fbdev.c index 55554b0433cb..84d5e23ad7d3 100644 --- a/drivers/video/fbdev/riva/fbdev.c +++ b/drivers/video/fbdev/riva/fbdev.c @@ -1084,6 +1084,9 @@ static int rivafb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) int mode_valid = 0; NVTRACE_ENTER(); + if (!var->pixclock) + return -EINVAL; + switch (var->bits_per_pixel) { case 1 ... 8: var->red.offset = var->green.offset = var->blue.offset = 0; -- 2.30.2