From 983f37f233c2922ef17620c6386d6d5275f0c7f0 Mon Sep 17 00:00:00 2001 From: Aaro Koskinen Date: Wed, 12 Sep 2012 00:44:37 +0300 Subject: [PATCH] --- yaml --- r: 325225 b: refs/heads/master c: a09f347c6cc0b2821557d1346c4733cc78a79ffa h: refs/heads/master i: 325223: 442dcce97329e8fd3bc6d40fdeac4cfb262cf799 v: v3 --- [refs] | 2 +- trunk/drivers/staging/xgifb/XGI_main_26.c | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index b60688ab3a3f..5b1339677713 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f325129ae9006298cfbeffb669b30f57ba0cc3c4 +refs/heads/master: a09f347c6cc0b2821557d1346c4733cc78a79ffa diff --git a/trunk/drivers/staging/xgifb/XGI_main_26.c b/trunk/drivers/staging/xgifb/XGI_main_26.c index 7fc3049a709c..ba6c3475a517 100644 --- a/trunk/drivers/staging/xgifb/XGI_main_26.c +++ b/trunk/drivers/staging/xgifb/XGI_main_26.c @@ -329,6 +329,7 @@ static int XGIfb_validate_mode(struct xgifb_video_info *xgifb_info, int myindex) { u16 xres, yres; struct xgi_hw_device_info *hw_info = &xgifb_info->hw_info; + unsigned long required_mem; if (xgifb_info->chip == XG21) { if (xgifb_info->display2 == XGIFB_DISP_LCD) { @@ -345,13 +346,13 @@ static int XGIfb_validate_mode(struct xgifb_video_info *xgifb_info, int myindex) } } - return myindex; + goto check_memory; } /* FIXME: for now, all is valid on XG27 */ if (xgifb_info->chip == XG27) - return myindex; + goto check_memory; if (!(XGIbios_mode[myindex].chipset & MD_XGI315)) return -1; @@ -539,6 +540,12 @@ static int XGIfb_validate_mode(struct xgifb_video_info *xgifb_info, int myindex) case XGIFB_DISP_NONE: break; } + +check_memory: + required_mem = XGIbios_mode[myindex].xres * XGIbios_mode[myindex].yres * + XGIbios_mode[myindex].bpp / 8; + if (required_mem > xgifb_info->video_size) + return -1; return myindex; }