@@ -2471,6 +2471,9 @@ static int fbcon_get_font(struct vc_data *vc, struct console_font *font)
2471
2471
2472
2472
if (font -> width <= 8 ) {
2473
2473
j = vc -> vc_font .height ;
2474
+ if (font -> charcount * j > FNTSIZE (fontdata ))
2475
+ return - EINVAL ;
2476
+
2474
2477
for (i = 0 ; i < font -> charcount ; i ++ ) {
2475
2478
memcpy (data , fontdata , j );
2476
2479
memset (data + j , 0 , 32 - j );
@@ -2479,13 +2482,19 @@ static int fbcon_get_font(struct vc_data *vc, struct console_font *font)
2479
2482
}
2480
2483
} else if (font -> width <= 16 ) {
2481
2484
j = vc -> vc_font .height * 2 ;
2485
+ if (font -> charcount * j > FNTSIZE (fontdata ))
2486
+ return - EINVAL ;
2487
+
2482
2488
for (i = 0 ; i < font -> charcount ; i ++ ) {
2483
2489
memcpy (data , fontdata , j );
2484
2490
memset (data + j , 0 , 64 - j );
2485
2491
data += 64 ;
2486
2492
fontdata += j ;
2487
2493
}
2488
2494
} else if (font -> width <= 24 ) {
2495
+ if (font -> charcount * (vc -> vc_font .height * sizeof (u32 )) > FNTSIZE (fontdata ))
2496
+ return - EINVAL ;
2497
+
2489
2498
for (i = 0 ; i < font -> charcount ; i ++ ) {
2490
2499
for (j = 0 ; j < vc -> vc_font .height ; j ++ ) {
2491
2500
* data ++ = fontdata [0 ];
@@ -2498,6 +2507,9 @@ static int fbcon_get_font(struct vc_data *vc, struct console_font *font)
2498
2507
}
2499
2508
} else {
2500
2509
j = vc -> vc_font .height * 4 ;
2510
+ if (font -> charcount * j > FNTSIZE (fontdata ))
2511
+ return - EINVAL ;
2512
+
2501
2513
for (i = 0 ; i < font -> charcount ; i ++ ) {
2502
2514
memcpy (data , fontdata , j );
2503
2515
memset (data + j , 0 , 128 - j );
0 commit comments