lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Mon, 26 Jul 2021 11:32:37 +0000 From: tcs_kernel(腾讯云内核开发者) <tcs_kernel@...cent.com> To: "gregkh@...uxfoundation.org" <gregkh@...uxfoundation.org>, "daniel.vetter@...ll.ch" <daniel.vetter@...ll.ch>, "yepeilin.cs@...il.com" <yepeilin.cs@...il.com>, "penguin-kernel@...ove.SAKURA.ne.jp" <penguin-kernel@...ove.SAKURA.ne.jp>, "tzimmermann@...e.de" <tzimmermann@...e.de>, "george.kennedy@...cle.com" <george.kennedy@...cle.com>, "ducheng2@...il.com" <ducheng2@...il.com>, "sam@...nborg.org" <sam@...nborg.org> CC: "dri-devel@...ts.freedesktop.org" <dri-devel@...ts.freedesktop.org>, "linux-fbdev@...r.kernel.org" <linux-fbdev@...r.kernel.org>, "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org> Subject: [PATCH] fbcon: Out-Of-Bounds write in sys_imageblit, add range check yres and vyres can be controlled by user mode paramaters, and cause p->vrows to become a negative value. While this value be passed to real_y function, the ypos will be out of screen range. This is an out-of-bounds write bug. diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c index 22bb3892f6bd..0970de46782f 100644 --- a/drivers/video/fbdev/core/fbcon.c +++ b/drivers/video/fbdev/core/fbcon.c @@ -1956,11 +1956,12 @@ static void updatescrollmode(struct fbcon_display *p, int yres = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); int vyres = FBCON_SWAP(ops->rotate, info->var.yres_virtual, info->var.xres_virtual); + int rows = vc->vc_rows; p->vrows = vyres/fh; - if (yres > (fh * (vc->vc_rows + 1))) - p->vrows -= (yres - (fh * vc->vc_rows)) / fh; - if ((yres % fh) && (vyres % fh < yres % fh)) + if ((yres > (fh * (rows + 1))) && (vyres >= (yres - (fh * rows))) && p->vrows) + p->vrows -= (yres - (fh * rows)) / fh; + if ((yres % fh) && (vyres % fh < yres % fh) && p->vrows) p->vrows--; }
Powered by blists - more mailing lists