···530530 /* check if font is already used by other console */531531 for (i = 0; i < MAX_NR_CONSOLES; i++) {532532 if (font_data[i] != FONT_DATA533533- && FNTSIZE(font_data[i]) == size533533+ && font_data_size(font_data[i]) == size534534 && !memcmp(font_data[i], new_data, size)) {535535 kfree(new_data - FONT_EXTRA_WORDS * sizeof(int));536536 /* current font is the same as the new one */
+7-7
drivers/video/fbdev/core/fbcon.c
···20532053 struct fb_var_screeninfo var = info->var;20542054 int x_diff, y_diff, virt_w, virt_h, virt_fw, virt_fh;2055205520562056- if (p->userfont && FNTSIZE(p->fontdata)) {20562056+ if (p->userfont && font_data_size(p->fontdata)) {20572057 unsigned int size = vc_font_size(&vc->vc_font);2058205820592059 /*···20632063 * charcount can change and cannot be used to determine the20642064 * font data allocated size.20652065 */20662066- if (!size || size > FNTSIZE(p->fontdata))20662066+ if (!size || size > font_data_size(p->fontdata))20672067 return -EINVAL;20682068 }20692069···2302230223032303 if (font->width <= 8) {23042304 j = vc->vc_font.height;23052305- if (font->charcount * j > FNTSIZE(fontdata))23052305+ if (font->charcount * j > font_data_size(fontdata))23062306 return -EINVAL;2307230723082308 for (i = 0; i < font->charcount; i++) {···23132313 }23142314 } else if (font->width <= 16) {23152315 j = vc->vc_font.height * 2;23162316- if (font->charcount * j > FNTSIZE(fontdata))23162316+ if (font->charcount * j > font_data_size(fontdata))23172317 return -EINVAL;2318231823192319 for (i = 0; i < font->charcount; i++) {···23232323 fontdata += j;23242324 }23252325 } else if (font->width <= 24) {23262326- if (font->charcount * (vc->vc_font.height * sizeof(u32)) > FNTSIZE(fontdata))23262326+ if (font->charcount * (vc->vc_font.height * sizeof(u32)) > font_data_size(fontdata))23272327 return -EINVAL;2328232823292329 for (i = 0; i < font->charcount; i++) {···23382338 }23392339 } else {23402340 j = vc->vc_font.height * 4;23412341- if (font->charcount * j > FNTSIZE(fontdata))23412341+ if (font->charcount * j > font_data_size(fontdata))23422342 return -EINVAL;2343234323442344 for (i = 0; i < font->charcount; i++) {···25532553 if (fb_display[i].userfont &&25542554 fb_display[i].fontdata &&25552555 FNTSUM(fb_display[i].fontdata) == csum &&25562556- FNTSIZE(fb_display[i].fontdata) == size &&25562556+ font_data_size(fb_display[i].fontdata) == size &&25572557 tmp->vc_font.width == w &&25582558 !memcmp(fb_display[i].fontdata, new_data, size)) {25592559 kfree(new_data - FONT_EXTRA_WORDS * sizeof(int));
+2
include/linux/font.h
···5454 return (const unsigned char *)fd;5555}56565757+unsigned int font_data_size(font_data_t *fd);5858+5759/*5860 * Font description5961 */
+21
lib/fonts/fonts.c
···2020#endif2121#include <linux/font.h>22222323+/*2424+ * Helpers for font_data_t2525+ */2626+2727+/**2828+ * font_data_size - Return size of the font data in bytes2929+ * @fd: Font data3030+ *3131+ * Returns:3232+ * The number of bytes in the given font data.3333+ */3434+unsigned int font_data_size(font_data_t *fd)3535+{3636+ return FNTSIZE(fd);3737+}3838+EXPORT_SYMBOL_GPL(font_data_size);3939+4040+/*4141+ * Font lookup4242+ */4343+2344static const struct font_desc *fonts[] = {2445#ifdef CONFIG_FONT_8x82546 &font_vga_8x8,