Skip to contentSkip to conversation

video/sis/: fix negative array index

PATCH In review Adrian Bunk 2 participants 3 messages Oct 27, 2007 – Nov 1, 2007 Framebuffer layer

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 video/sis/: fix negative array index

This patch fixes the possible usage of a negative value as an array index spotted by the Coverity checker.

---

 drivers/video/sis/sis_main.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

9f63bf8c543710521e885b09d88271d1a308b158

drivers/video/sis/sis_main.c +2 -1
index bc7d236..37bd24b 100644
@@ -1245,24 +1245,25 @@ sisfb_do_set_var(struct fb_var_screeninfo *var, int isactive, struct fb_info *in
 		ivideo->sisfb_mode_idx++;
 	}
 
 	if(found_mode) {
 		ivideo->sisfb_mode_idx = sisfb_validate_mode(ivideo,
 				ivideo->sisfb_mode_idx, ivideo->currentvbflags);
-		ivideo->mode_no = sisbios_mode[ivideo->sisfb_mode_idx].mode_no[ivideo->mni];
 	} else {
 		ivideo->sisfb_mode_idx = -1;
 	}
 
        	if(ivideo->sisfb_mode_idx < 0) {
 		printk(KERN_ERR "sisfb: Mode %dx%dx%d not supported\n", var->xres,
 		       var->yres, var->bits_per_pixel);
 		ivideo->sisfb_mode_idx = old_mode;
 		return -EINVAL;
 	}
 
+	ivideo->mode_no = sisbios_mode[ivideo->sisfb_mode_idx].mode_no[ivideo->mni];
+
 	if(sisfb_search_refresh_rate(ivideo, ivideo->refresh_rate, ivideo->sisfb_mode_idx) == 0) {
 		ivideo->rate_idx = sisbios_mode[ivideo->sisfb_mode_idx].rate_idx;
 		ivideo->refresh_rate = 60;
 	}
 
 	if(isactive) {
#1 lore raw
Quoted 30 lines · On Sat, 27 Oct 2007 16:19:46 +0200 Adrian Bunk <[email protected]> wrote:

This patch fixes the possible usage of a negative value as an array index spotted by the Coverity checker.

---

 drivers/video/sis/sis_main.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

9f63bf8c543710521e885b09d88271d1a308b158

drivers/video/sis/sis_main.c +0 -1
index bc7d236..37bd24b 100644
@@ -1245,24 +1245,25 @@ sisfb_do_set_var(struct fb_var_screeninfo *var, int isactive, struct fb_info *in
 		ivideo->sisfb_mode_idx++;
 	}
 
 	if(found_mode) {
 		ivideo->sisfb_mode_idx = sisfb_validate_mode(ivideo,
 				ivideo->sisfb_mode_idx, ivideo->currentvbflags);
-		ivideo->mode_no = sisbios_mode[ivideo->sisfb_mode_idx].mode_no[ivideo->mni];
 	} else {
 		ivideo->sisfb_mode_idx = -1;
 	}
 
        	if(ivideo->sisfb_mode_idx < 0) {
 		printk(KERN_ERR "sisfb: Mode %dx%dx%d not supported\n", var->xres,
 		       var->yres, var->bits_per_pixel);

drivers/video/sis/sis_main.c sisfb_do_set_var(struct fb_var_screeninfo *var, int isactive, struct fb_info *in · line 1267

Quoted 10 lines
drivers/video/sis/sis_main.c +2 -0
 		ivideo->sisfb_mode_idx = old_mode;
 		return -EINVAL;
 	}
 
+	ivideo->mode_no = sisbios_mode[ivideo->sisfb_mode_idx].mode_no[ivideo->mni];
+
 	if(sisfb_search_refresh_rate(ivideo, ivideo->refresh_rate, ivideo->sisfb_mode_idx) == 0) {
 		ivideo->rate_idx = sisbios_mode[ivideo->sisfb_mode_idx].rate_idx;
 		ivideo->refresh_rate = 60;
 	}

Well I spent a little time trying to work out what the actual bug is and gave up. There doesn't appear to be any error in sisfb_do_set_var().

Better changelogs, please.

#2 lore raw
In reply to Adrian Bunk
Quoted 12 lines · On Sat, 27 Oct 2007 16:19:46 +0200 Adrian Bunk <[email protected]> wrote:
drivers/video/sis/sis_main.c +0 -1
@@ -1245,24 +1245,25 @@ sisfb_do_set_var(struct fb_var_screeninfo *var, int isactive, struct fb_info *in
 		ivideo->sisfb_mode_idx++;
 	}
 
 	if(found_mode) {
 		ivideo->sisfb_mode_idx = sisfb_validate_mode(ivideo,
 				ivideo->sisfb_mode_idx, ivideo->currentvbflags);
-		ivideo->mode_no = sisbios_mode[ivideo->sisfb_mode_idx].mode_no[ivideo->mni];
 	} else {
 		ivideo->sisfb_mode_idx = -1;

drivers/video/sis/sis_main.c sisfb_do_set_var(struct fb_var_screeninfo *var, int isactive, struct fb_info *in · line 1262

Quoted 10 lines
drivers/video/sis/sis_main.c +1 -0
 	}
 
        	if(ivideo->sisfb_mode_idx < 0) {
 		printk(KERN_ERR "sisfb: Mode %dx%dx%d not supported\n", var->xres,
 		       var->yres, var->bits_per_pixel);
 		ivideo->sisfb_mode_idx = old_mode;
 		return -EINVAL;
 	}
 
+	ivideo->mode_no = sisbios_mode[ivideo->sisfb_mode_idx].mode_no[ivideo->mni];

oic, sisfb_validate_mode() could have returned a -ve error code.

Please use the changelog to fully explain your patches.