]> Git Repo - linux.git/commitdiff
Merge tag 'drm-misc-fixes-2020-10-01' of git://anongit.freedesktop.org/drm/drm-misc...
authorDave Airlie <[email protected]>
Tue, 6 Oct 2020 02:34:58 +0000 (12:34 +1000)
committerDave Airlie <[email protected]>
Tue, 6 Oct 2020 02:38:28 +0000 (12:38 +1000)
drm-misc-fixes for v5.9:
- Small doc fix.
- Re-add FB_ARMCLCD for android.
- Fix global-out-of-bounds read in fbcon_get_font().

Signed-off-by: Dave Airlie <[email protected]>
From: Maarten Lankhorst <[email protected]>
Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1  2 
MAINTAINERS
drivers/video/fbdev/core/fbcon.c
drivers/video/fbdev/core/fbcon.h
drivers/video/fbdev/core/tileblit.c

diff --combined MAINTAINERS
index 33b27e62ce199f6dd5c0d985cfb25659b30a9012,35cda788edd2ad91d1a6f0b7eab479d33caccf20..ec6fa6e49933c0ef18689c6d9420dea04229753e
@@@ -1460,6 -1460,11 +1460,11 @@@ S:    Odd Fixe
  F:    drivers/amba/
  F:    include/linux/amba/bus.h
  
+ ARM PRIMECELL CLCD PL110 DRIVER
+ M:    Russell King <[email protected]>
+ S:    Odd Fixes
+ F:    drivers/video/fbdev/amba-clcd.*
  ARM PRIMECELL KMI PL050 DRIVER
  M:    Russell King <[email protected]>
  S:    Odd Fixes
@@@ -1694,6 -1699,7 +1699,6 @@@ F:      arch/arm/mach-cns3xxx
  
  ARM/CAVIUM THUNDER NETWORK DRIVER
  M:    Sunil Goutham <[email protected]>
 -M:    Robert Richter <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
  S:    Supported
  F:    drivers/net/ethernet/cavium/thunder/
@@@ -3204,7 -3210,6 +3209,7 @@@ S:      Maintaine
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git
  F:    block/
  F:    drivers/block/
 +F:    include/linux/blk*
  F:    kernel/trace/blktrace.c
  F:    lib/sbitmap.c
  
@@@ -3388,7 -3393,6 +3393,7 @@@ M:      Florian Fainelli <[email protected]
  L:    [email protected]
  L:    [email protected] (subscribers-only)
  S:    Supported
 +F:    Documentation/devicetree/bindings/net/dsa/b53.txt
  F:    drivers/net/dsa/b53/*
  F:    include/linux/platform_data/b53.h
  
  S:    Maintained
  F:    drivers/phy/broadcom/phy-brcm-usb*
  
 +BROADCOM ETHERNET PHY DRIVERS
 +M:    Florian Fainelli <[email protected]>
 +L:    [email protected]
 +L:    [email protected]
 +S:    Supported
 +F:    Documentation/devicetree/bindings/net/broadcom-bcm87xx.txt
 +F:    drivers/net/phy/bcm*.[ch]
 +F:    drivers/net/phy/broadcom.c
 +F:    include/linux/brcmphy.h
 +
  BROADCOM GENET ETHERNET DRIVER
  M:    Doug Berger <[email protected]>
  M:    Florian Fainelli <[email protected]>
  L:    [email protected]
  L:    [email protected]
  S:    Supported
 +F:    Documentation/devicetree/bindings/net/brcm,bcmgenet.txt
 +F:    Documentation/devicetree/bindings/net/brcm,unimac-mdio.txt
  F:    drivers/net/ethernet/broadcom/genet/
 +F:    drivers/net/mdio/mdio-bcm-unimac.c
 +F:    include/linux/platform_data/bcmgenet.h
 +F:    include/linux/platform_data/mdio-bcm-unimac.h
  
  BROADCOM IPROC ARM ARCHITECTURE
  M:    Ray Jui <[email protected]>
@@@ -3947,8 -3936,8 +3952,8 @@@ W:      https://wireless.wiki.kernel.org/en/
  F:    drivers/net/wireless/ath/carl9170/
  
  CAVIUM I2C DRIVER
 -M:    Robert Richter <rric[email protected]>
 -S:    Supported
 +M:    Robert Richter <rric@kernel.org>
 +S:    Odd Fixes
  W:    http://www.marvell.com
  F:    drivers/i2c/busses/i2c-octeon*
  F:    drivers/i2c/busses/i2c-thunderx*
@@@ -3963,8 -3952,8 +3968,8 @@@ W:      http://www.marvell.co
  F:    drivers/net/ethernet/cavium/liquidio/
  
  CAVIUM MMC DRIVER
 -M:    Robert Richter <rric[email protected]>
 -S:    Supported
 +M:    Robert Richter <rric@kernel.org>
 +S:    Odd Fixes
  W:    http://www.marvell.com
  F:    drivers/mmc/host/cavium*
  
@@@ -3976,9 -3965,9 +3981,9 @@@ W:      http://www.marvell.co
  F:    drivers/crypto/cavium/cpt/
  
  CAVIUM THUNDERX2 ARM64 SOC
 -M:    Robert Richter <rric[email protected]>
 +M:    Robert Richter <rric@kernel.org>
  L:    [email protected] (moderated for non-subscribers)
 -S:    Maintained
 +S:    Odd Fixes
  F:    Documentation/devicetree/bindings/arm/cavium-thunder2.txt
  F:    arch/arm64/boot/dts/cavium/thunder2-99xx*
  
@@@ -4257,8 -4246,6 +4262,8 @@@ S:      Maintaine
  F:    .clang-format
  
  CLANG/LLVM BUILD SUPPORT
 +M:    Nathan Chancellor <[email protected]>
 +M:    Nick Desaulniers <[email protected]>
  L:    [email protected]
  S:    Supported
  W:    https://clangbuiltlinux.github.io/
@@@ -4408,6 -4395,12 +4413,6 @@@ T:     git git://git.infradead.org/users/hc
  F:    fs/configfs/
  F:    include/linux/configfs.h
  
 -CONNECTOR
 -M:    Evgeniy Polyakov <[email protected]>
 -L:    [email protected]
 -S:    Maintained
 -F:    drivers/connector/
 -
  CONSOLE SUBSYSTEM
  M:    Greg Kroah-Hartman <[email protected]>
  S:    Supported
@@@ -5251,7 -5244,6 +5256,7 @@@ DOCUMENTATIO
  M:    Jonathan Corbet <[email protected]>
  L:    [email protected]
  S:    Maintained
 +P:    Documentation/doc-guide/maintainer-profile.rst
  T:    git git://git.lwn.net/linux.git docs-next
  F:    Documentation/
  F:    scripts/documentation-file-ref-check
@@@ -6174,7 -6166,7 +6179,7 @@@ F:      Documentation/devicetree/bindings/ed
  F:    drivers/edac/aspeed_edac.c
  
  EDAC-BLUEFIELD
 -M:    Shravan Kumar Ramani <sramani@nvidia.com>
 +M:    Shravan Kumar Ramani <shravankr@nvidia.com>
  S:    Supported
  F:    drivers/edac/bluefield_edac.c
  
@@@ -6186,15 -6178,16 +6191,15 @@@ F:   drivers/edac/highbank
  
  EDAC-CAVIUM OCTEON
  M:    Ralf Baechle <[email protected]>
 -M:    Robert Richter <[email protected]>
  L:    [email protected]
  L:    [email protected]
  S:    Supported
  F:    drivers/edac/octeon_edac*
  
  EDAC-CAVIUM THUNDERX
 -M:    Robert Richter <rric[email protected]>
 +M:    Robert Richter <rric@kernel.org>
  L:    [email protected]
 -S:    Supported
 +S:    Odd Fixes
  F:    drivers/edac/thunderx_edac*
  
  EDAC-CORE
@@@ -6202,7 -6195,7 +6207,7 @@@ M:      Borislav Petkov <[email protected]
  M:    Mauro Carvalho Chehab <[email protected]>
  M:    Tony Luck <[email protected]>
  R:    James Morse <[email protected]>
 -R:    Robert Richter <rric[email protected]>
 +R:    Robert Richter <rric@kernel.org>
  L:    [email protected]
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ras/ras.git edac-for-next
@@@ -6506,6 -6499,7 +6511,6 @@@ F:      net/bridge
  
  ETHERNET PHY LIBRARY
  M:    Andrew Lunn <[email protected]>
 -M:    Florian Fainelli <[email protected]>
  M:    Heiner Kallweit <[email protected]>
  R:    Russell King <[email protected]>
  L:    [email protected]
  S:    Maintained
  F:    drivers/dma/fsldma.*
  
 +FREESCALE DSPI DRIVER
 +M:    Vladimir Oltean <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/spi/spi-fsl-dspi.txt
 +F:    drivers/spi/spi-fsl-dspi.c
 +F:    include/linux/spi/spi-fsl-dspi.h
 +
  FREESCALE ENETC ETHERNET DRIVERS
  M:    Claudiu Manoil <[email protected]>
  L:    [email protected]
@@@ -8274,7 -8260,7 +8279,7 @@@ IA64 (Itanium) PLATFOR
  M:    Tony Luck <[email protected]>
  M:    Fenghua Yu <[email protected]>
  L:    [email protected]
 -S:    Maintained
 +S:    Odd Fixes
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux.git
  F:    Documentation/ia64/
  F:    arch/ia64/
@@@ -8323,9 -8309,8 +8328,9 @@@ S:      Supporte
  F:    drivers/pci/hotplug/rpaphp*
  
  IBM Power SRIOV Virtual NIC Device Driver
 -M:    Thomas Falcon <[email protected]>
 -M:    John Allen <[email protected]>
 +M:    Dany Madden <[email protected]>
 +M:    Lijun Pan <[email protected]>
 +M:    Sukadev Bhattiprolu <[email protected]>
  L:    [email protected]
  S:    Supported
  F:    drivers/net/ethernet/ibm/ibmvnic.*
@@@ -8339,7 -8324,7 +8344,7 @@@ F:      arch/powerpc/platforms/powernv/copy-
  F:    arch/powerpc/platforms/powernv/vas*
  
  IBM Power Virtual Ethernet Device Driver
 -M:    Thomas Falcon <tlfalcon@linux.ibm.com>
 +M:    Cristobal Forno <cforno12@linux.ibm.com>
  L:    [email protected]
  S:    Supported
  F:    drivers/net/ethernet/ibm/ibmveth.*
@@@ -9246,7 -9231,7 +9251,7 @@@ F:      drivers/firmware/iscsi_ibft
  
  ISCSI EXTENSIONS FOR RDMA (ISER) INITIATOR
  M:    Sagi Grimberg <[email protected]>
 -M:    Max Gurtovoy <maxg@nvidia.com>
 +M:    Max Gurtovoy <mgurtovoy@nvidia.com>
  L:    [email protected]
  S:    Supported
  W:    http://www.openfabrics.org
@@@ -9795,7 -9780,7 +9800,7 @@@ F:      drivers/scsi/53c700
  
  LEAKING_ADDRESSES
  M:    Tobin C. Harding <[email protected]>
 -M:    Tycho Andersen <tycho@tycho.ws>
 +M:    Tycho Andersen <tycho@tycho.pizza>
  L:    [email protected]
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tobin/leaks.git
@@@ -11037,7 -11022,6 +11042,7 @@@ F:   drivers/char/hw_random/mtk-rng.
  
  MEDIATEK SWITCH DRIVER
  M:    Sean Wang <[email protected]>
 +M:    Landen Chao <[email protected]>
  L:    [email protected]
  S:    Maintained
  F:    drivers/net/dsa/mt7530.*
@@@ -12051,7 -12035,6 +12056,7 @@@ Q:   http://patchwork.ozlabs.org/project/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git
  F:    Documentation/devicetree/bindings/net/
 +F:    drivers/connector/
  F:    drivers/net/
  F:    include/linux/etherdevice.h
  F:    include/linux/fcdevice.h
@@@ -13182,7 -13165,6 +13187,7 @@@ F:   drivers/firmware/pcdp.
  
  PCI DRIVER FOR AARDVARK (Marvell Armada 3700)
  M:    Thomas Petazzoni <[email protected]>
 +M:    Pali Rohár <[email protected]>
  L:    [email protected]
  L:    [email protected] (moderated for non-subscribers)
  S:    Maintained
@@@ -13452,10 -13434,10 +13457,10 @@@ F:        Documentation/devicetree/bindings/pc
  F:    drivers/pci/controller/dwc/*artpec*
  
  PCIE DRIVER FOR CAVIUM THUNDERX
 -M:    Robert Richter <rric[email protected]>
 +M:    Robert Richter <rric@kernel.org>
  L:    [email protected]
  L:    [email protected] (moderated for non-subscribers)
 -S:    Supported
 +S:    Odd Fixes
  F:    drivers/pci/controller/pci-thunder-*
  
  PCIE DRIVER FOR HISILICON
@@@ -13592,18 -13574,12 +13597,18 @@@ F:        kernel/events/
  F:    tools/lib/perf/
  F:    tools/perf/
  
 -PERFORMANCE EVENTS SUBSYSTEM ARM64 PMU EVENTS
 +PERFORMANCE EVENTS TOOLING ARM64
  R:    John Garry <[email protected]>
  R:    Will Deacon <[email protected]>
 +R:    Mathieu Poirier <[email protected]>
 +R:    Leo Yan <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
  S:    Supported
 +F:    tools/build/feature/test-libopencsd.c
 +F:    tools/perf/arch/arm*/
  F:    tools/perf/pmu-events/arch/arm64/
 +F:    tools/perf/util/arm-spe*
 +F:    tools/perf/util/cs-etm*
  
  PERSONALITY HANDLING
  M:    Christoph Hellwig <[email protected]>
@@@ -14394,7 -14370,7 +14399,7 @@@ M:   Rob Clark <[email protected]
  L:    [email protected]
  L:    [email protected]
  S:    Maintained
 -F:    drivers/iommu/qcom_iommu.c
 +F:    drivers/iommu/arm/arm-smmu/qcom_iommu.c
  
  QUALCOMM IPCC MAILBOX DRIVER
  M:    Manivannan Sadhasivam <[email protected]>
@@@ -15575,7 -15551,6 +15580,7 @@@ F:   include/uapi/linux/sed
  SECURITY CONTACT
  M:    Security Officers <[email protected]>
  S:    Supported
 +F:    Documentation/admin-guide/security-bugs.rst
  
  SECURITY SUBSYSTEM
  M:    James Morris <[email protected]>
@@@ -16155,7 -16130,7 +16160,7 @@@ M:   Leon Luo <[email protected]
  L:    [email protected]
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
 -F:    Documentation/devicetree/bindings/media/i2c/imx274.txt
 +F:    Documentation/devicetree/bindings/media/i2c/sony,imx274.yaml
  F:    drivers/media/i2c/imx274.c
  
  SONY IMX290 SENSOR DRIVER
@@@ -17146,8 -17121,8 +17151,8 @@@ S:   Maintaine
  F:    Documentation/devicetree/bindings/arm/keystone/ti,k3-sci-common.yaml
  F:    Documentation/devicetree/bindings/arm/keystone/ti,sci.txt
  F:    Documentation/devicetree/bindings/clock/ti,sci-clk.txt
 -F:    Documentation/devicetree/bindings/interrupt-controller/ti,sci-inta.txt
 -F:    Documentation/devicetree/bindings/interrupt-controller/ti,sci-intr.txt
 +F:    Documentation/devicetree/bindings/interrupt-controller/ti,sci-inta.yaml
 +F:    Documentation/devicetree/bindings/interrupt-controller/ti,sci-intr.yaml
  F:    Documentation/devicetree/bindings/reset/ti,sci-reset.txt
  F:    Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
  F:    drivers/clk/keystone/sci-clk.c
@@@ -17244,8 -17219,8 +17249,8 @@@ S:   Maintaine
  F:    drivers/net/thunderbolt.c
  
  THUNDERX GPIO DRIVER
 -M:    Robert Richter <rric[email protected]>
 -S:    Maintained
 +M:    Robert Richter <rric@kernel.org>
 +S:    Odd Fixes
  F:    drivers/gpio/gpio-thunderx.c
  
  TI AM437X VPFE DRIVER
@@@ -18904,15 -18879,6 +18909,15 @@@ S: Maintaine
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/core
  F:    arch/x86/platform
  
 +X86 PLATFORM UV HPE SUPERDOME FLEX
 +M:    Steve Wahl <[email protected]>
 +R:    Dimitri Sivanich <[email protected]>
 +R:    Russ Anderson <[email protected]>
 +S:    Supported
 +F:    arch/x86/include/asm/uv/
 +F:    arch/x86/kernel/apic/x2apic_uv_x.c
 +F:    arch/x86/platform/uv/
 +
  X86 VDSO
  M:    Andy Lutomirski <[email protected]>
  L:    [email protected]
index 41f3fa3db6d4ca8c6e156a1bf0f046f69b29ac75,e432c9f09c13972bc1815b238f118d1679588bef..8c7bd0a29eaa033e05e0f3c70c027114a15dd119
@@@ -122,6 -122,12 +122,6 @@@ static int logo_lines
  /* logo_shown is an index to vc_cons when >= 0; otherwise follows FBCON_LOGO
     enums.  */
  static int logo_shown = FBCON_LOGO_CANSHOW;
 -/* Software scrollback */
 -static int fbcon_softback_size = 32768;
 -static unsigned long softback_buf, softback_curr;
 -static unsigned long softback_in;
 -static unsigned long softback_top, softback_end;
 -static int softback_lines;
  /* console mappings */
  static int first_fb_vc;
  static int last_fb_vc = MAX_NR_CONSOLES - 1;
@@@ -161,6 -167,8 +161,6 @@@ static int margin_color
  
  static const struct consw fb_con;
  
 -#define CM_SOFTBACK   (8)
 -
  #define advance_row(p, delta) (unsigned short *)((unsigned long)(p) + (delta) * vc->vc_size_row)
  
  static int fbcon_set_origin(struct vc_data *);
@@@ -365,6 -373,18 +365,6 @@@ static int get_color(struct vc_data *vc
        return color;
  }
  
 -static void fbcon_update_softback(struct vc_data *vc)
 -{
 -      int l = fbcon_softback_size / vc->vc_size_row;
 -
 -      if (l > 5)
 -              softback_end = softback_buf + l * vc->vc_size_row;
 -      else
 -              /* Smaller scrollback makes no sense, and 0 would screw
 -                 the operation totally */
 -              softback_top = 0;
 -}
 -
  static void fb_flashcursor(struct work_struct *work)
  {
        struct fb_info *info = container_of(work, struct fb_info, queue);
        c = scr_readw((u16 *) vc->vc_pos);
        mode = (!ops->cursor_flash || ops->cursor_state.enable) ?
                CM_ERASE : CM_DRAW;
 -      ops->cursor(vc, info, mode, softback_lines, get_color(vc, info, c, 1),
 +      ops->cursor(vc, info, mode, get_color(vc, info, c, 1),
                    get_color(vc, info, c, 0));
        console_unlock();
  }
@@@ -451,7 -471,13 +451,7 @@@ static int __init fb_console_setup(cha
                }
                
                if (!strncmp(options, "scrollback:", 11)) {
 -                      options += 11;
 -                      if (*options) {
 -                              fbcon_softback_size = simple_strtoul(options, &options, 0);
 -                              if (*options == 'k' || *options == 'K') {
 -                                      fbcon_softback_size *= 1024;
 -                              }
 -                      }
 +                      pr_warn("Ignoring scrollback size option\n");
                        continue;
                }
                
@@@ -996,6 -1022,31 +996,6 @@@ static const char *fbcon_startup(void
  
        set_blitting_type(vc, info);
  
 -      if (info->fix.type != FB_TYPE_TEXT) {
 -              if (fbcon_softback_size) {
 -                      if (!softback_buf) {
 -                              softback_buf =
 -                                  (unsigned long)
 -                                  kvmalloc(fbcon_softback_size,
 -                                          GFP_KERNEL);
 -                              if (!softback_buf) {
 -                                      fbcon_softback_size = 0;
 -                                      softback_top = 0;
 -                              }
 -                      }
 -              } else {
 -                      if (softback_buf) {
 -                              kvfree((void *) softback_buf);
 -                              softback_buf = 0;
 -                              softback_top = 0;
 -                      }
 -              }
 -              if (softback_buf)
 -                      softback_in = softback_top = softback_curr =
 -                          softback_buf;
 -              softback_lines = 0;
 -      }
 -
        /* Setup default font */
        if (!p->fontdata && !vc->vc_font.data) {
                if (!fontname[0] || !(font = find_font(fontname)))
@@@ -1169,6 -1220,9 +1169,6 @@@ static void fbcon_init(struct vc_data *
        if (logo)
                fbcon_prepare_logo(vc, info, cols, rows, new_cols, new_rows);
  
 -      if (vc == svc && softback_buf)
 -              fbcon_update_softback(vc);
 -
        if (ops->rotate_font && ops->rotate_font(info, vc)) {
                ops->rotate = FB_ROTATE_UR;
                set_blitting_type(vc, info);
@@@ -1331,6 -1385,7 +1331,6 @@@ static void fbcon_cursor(struct vc_dat
  {
        struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
        struct fbcon_ops *ops = info->fbcon_par;
 -      int y;
        int c = scr_readw((u16 *) vc->vc_pos);
  
        ops->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms);
                fbcon_add_cursor_timer(info);
  
        ops->cursor_flash = (mode == CM_ERASE) ? 0 : 1;
 -      if (mode & CM_SOFTBACK) {
 -              mode &= ~CM_SOFTBACK;
 -              y = softback_lines;
 -      } else {
 -              if (softback_lines)
 -                      fbcon_set_origin(vc);
 -              y = 0;
 -      }
  
 -      ops->cursor(vc, info, mode, y, get_color(vc, info, c, 1),
 +      ops->cursor(vc, info, mode, get_color(vc, info, c, 1),
                    get_color(vc, info, c, 0));
  }
  
@@@ -1416,6 -1479,8 +1416,6 @@@ static void fbcon_set_disp(struct fb_in
  
        if (con_is_visible(vc)) {
                update_screen(vc);
 -              if (softback_buf)
 -                      fbcon_update_softback(vc);
        }
  }
  
@@@ -1553,6 -1618,99 +1553,6 @@@ static __inline__ void ypan_down_redraw
        scrollback_current = 0;
  }
  
 -static void fbcon_redraw_softback(struct vc_data *vc, struct fbcon_display *p,
 -                                long delta)
 -{
 -      int count = vc->vc_rows;
 -      unsigned short *d, *s;
 -      unsigned long n;
 -      int line = 0;
 -
 -      d = (u16 *) softback_curr;
 -      if (d == (u16 *) softback_in)
 -              d = (u16 *) vc->vc_origin;
 -      n = softback_curr + delta * vc->vc_size_row;
 -      softback_lines -= delta;
 -      if (delta < 0) {
 -              if (softback_curr < softback_top && n < softback_buf) {
 -                      n += softback_end - softback_buf;
 -                      if (n < softback_top) {
 -                              softback_lines -=
 -                                  (softback_top - n) / vc->vc_size_row;
 -                              n = softback_top;
 -                      }
 -              } else if (softback_curr >= softback_top
 -                         && n < softback_top) {
 -                      softback_lines -=
 -                          (softback_top - n) / vc->vc_size_row;
 -                      n = softback_top;
 -              }
 -      } else {
 -              if (softback_curr > softback_in && n >= softback_end) {
 -                      n += softback_buf - softback_end;
 -                      if (n > softback_in) {
 -                              n = softback_in;
 -                              softback_lines = 0;
 -                      }
 -              } else if (softback_curr <= softback_in && n > softback_in) {
 -                      n = softback_in;
 -                      softback_lines = 0;
 -              }
 -      }
 -      if (n == softback_curr)
 -              return;
 -      softback_curr = n;
 -      s = (u16 *) softback_curr;
 -      if (s == (u16 *) softback_in)
 -              s = (u16 *) vc->vc_origin;
 -      while (count--) {
 -              unsigned short *start;
 -              unsigned short *le;
 -              unsigned short c;
 -              int x = 0;
 -              unsigned short attr = 1;
 -
 -              start = s;
 -              le = advance_row(s, 1);
 -              do {
 -                      c = scr_readw(s);
 -                      if (attr != (c & 0xff00)) {
 -                              attr = c & 0xff00;
 -                              if (s > start) {
 -                                      fbcon_putcs(vc, start, s - start,
 -                                                  line, x);
 -                                      x += s - start;
 -                                      start = s;
 -                              }
 -                      }
 -                      if (c == scr_readw(d)) {
 -                              if (s > start) {
 -                                      fbcon_putcs(vc, start, s - start,
 -                                                  line, x);
 -                                      x += s - start + 1;
 -                                      start = s + 1;
 -                              } else {
 -                                      x++;
 -                                      start++;
 -                              }
 -                      }
 -                      s++;
 -                      d++;
 -              } while (s < le);
 -              if (s > start)
 -                      fbcon_putcs(vc, start, s - start, line, x);
 -              line++;
 -              if (d == (u16 *) softback_end)
 -                      d = (u16 *) softback_buf;
 -              if (d == (u16 *) softback_in)
 -                      d = (u16 *) vc->vc_origin;
 -              if (s == (u16 *) softback_end)
 -                      s = (u16 *) softback_buf;
 -              if (s == (u16 *) softback_in)
 -                      s = (u16 *) vc->vc_origin;
 -      }
 -}
 -
  static void fbcon_redraw_move(struct vc_data *vc, struct fbcon_display *p,
                              int line, int count, int dy)
  {
@@@ -1692,6 -1850,31 +1692,6 @@@ static void fbcon_redraw(struct vc_dat
        }
  }
  
 -static inline void fbcon_softback_note(struct vc_data *vc, int t,
 -                                     int count)
 -{
 -      unsigned short *p;
 -
 -      if (vc->vc_num != fg_console)
 -              return;
 -      p = (unsigned short *) (vc->vc_origin + t * vc->vc_size_row);
 -
 -      while (count) {
 -              scr_memcpyw((u16 *) softback_in, p, vc->vc_size_row);
 -              count--;
 -              p = advance_row(p, 1);
 -              softback_in += vc->vc_size_row;
 -              if (softback_in == softback_end)
 -                      softback_in = softback_buf;
 -              if (softback_in == softback_top) {
 -                      softback_top += vc->vc_size_row;
 -                      if (softback_top == softback_end)
 -                              softback_top = softback_buf;
 -              }
 -      }
 -      softback_curr = softback_in;
 -}
 -
  static bool fbcon_scroll(struct vc_data *vc, unsigned int t, unsigned int b,
                enum con_scroll dir, unsigned int count)
  {
        case SM_UP:
                if (count > vc->vc_rows)        /* Maximum realistic size */
                        count = vc->vc_rows;
 -              if (softback_top)
 -                      fbcon_softback_note(vc, t, count);
                if (logo_shown >= 0)
                        goto redraw_up;
                switch (p->scrollmode) {
@@@ -2006,9 -2191,6 +2006,9 @@@ static void updatescrollmode(struct fbc
        }
  }
  
 +#define PITCH(w) (((w) + 7) >> 3)
 +#define CALC_FONTSZ(h, p, c) ((h) * (p) * (c)) /* size = height * pitch * charcount */
 +
  static int fbcon_resize(struct vc_data *vc, unsigned int width, 
                        unsigned int height, unsigned int user)
  {
        struct fb_var_screeninfo var = info->var;
        int x_diff, y_diff, virt_w, virt_h, virt_fw, virt_fh;
  
 +      if (p->userfont && FNTSIZE(vc->vc_font.data)) {
 +              int size;
 +              int pitch = PITCH(vc->vc_font.width);
 +
 +              /*
 +               * If user font, ensure that a possible change to user font
 +               * height or width will not allow a font data out-of-bounds access.
 +               * NOTE: must use original charcount in calculation as font
 +               * charcount can change and cannot be used to determine the
 +               * font data allocated size.
 +               */
 +              if (pitch <= 0)
 +                      return -EINVAL;
 +              size = CALC_FONTSZ(vc->vc_font.height, pitch, FNTCHARCNT(vc->vc_font.data));
 +              if (size > FNTSIZE(vc->vc_font.data))
 +                      return -EINVAL;
 +      }
 +
        virt_w = FBCON_SWAP(ops->rotate, width, height);
        virt_h = FBCON_SWAP(ops->rotate, height, width);
        virt_fw = FBCON_SWAP(ops->rotate, vc->vc_font.width,
@@@ -2084,6 -2248,14 +2084,6 @@@ static int fbcon_switch(struct vc_data 
        info = registered_fb[con2fb_map[vc->vc_num]];
        ops = info->fbcon_par;
  
 -      if (softback_top) {
 -              if (softback_lines)
 -                      fbcon_set_origin(vc);
 -              softback_top = softback_curr = softback_in = softback_buf;
 -              softback_lines = 0;
 -              fbcon_update_softback(vc);
 -      }
 -
        if (logo_shown >= 0) {
                struct vc_data *conp2 = vc_cons[logo_shown].d;
  
@@@ -2299,6 -2471,9 +2299,9 @@@ static int fbcon_get_font(struct vc_dat
  
        if (font->width <= 8) {
                j = vc->vc_font.height;
+               if (font->charcount * j > FNTSIZE(fontdata))
+                       return -EINVAL;
                for (i = 0; i < font->charcount; i++) {
                        memcpy(data, fontdata, j);
                        memset(data + j, 0, 32 - j);
                }
        } else if (font->width <= 16) {
                j = vc->vc_font.height * 2;
+               if (font->charcount * j > FNTSIZE(fontdata))
+                       return -EINVAL;
                for (i = 0; i < font->charcount; i++) {
                        memcpy(data, fontdata, j);
                        memset(data + j, 0, 64 - j);
                        fontdata += j;
                }
        } else if (font->width <= 24) {
+               if (font->charcount * (vc->vc_font.height * sizeof(u32)) > FNTSIZE(fontdata))
+                       return -EINVAL;
                for (i = 0; i < font->charcount; i++) {
                        for (j = 0; j < vc->vc_font.height; j++) {
                                *data++ = fontdata[0];
                }
        } else {
                j = vc->vc_font.height * 4;
+               if (font->charcount * j > FNTSIZE(fontdata))
+                       return -EINVAL;
                for (i = 0; i < font->charcount; i++) {
                        memcpy(data, fontdata, j);
                        memset(data + j, 0, 128 - j);
@@@ -2407,6 -2591,9 +2419,6 @@@ static int fbcon_do_set_font(struct vc_
        int cnt;
        char *old_data = NULL;
  
 -      if (con_is_visible(vc) && softback_lines)
 -              fbcon_set_origin(vc);
 -
        resize = (w != vc->vc_font.width) || (h != vc->vc_font.height);
        if (p->userfont)
                old_data = vc->vc_font.data;
                cols /= w;
                rows /= h;
                vc_resize(vc, cols, rows);
 -              if (con_is_visible(vc) && softback_buf)
 -                      fbcon_update_softback(vc);
        } else if (con_is_visible(vc)
                   && vc->vc_mode == KD_TEXT) {
                fbcon_clear_margins(vc, 0);
@@@ -2475,7 -2664,7 +2487,7 @@@ static int fbcon_set_font(struct vc_dat
        int size;
        int i, csum;
        u8 *new_data, *data = font->data;
 -      int pitch = (font->width+7) >> 3;
 +      int pitch = PITCH(font->width);
  
        /* Is there a reason why fbconsole couldn't handle any charcount >256?
         * If not this check should be changed to charcount < 256 */
        if (fbcon_invalid_charcount(info, charcount))
                return -EINVAL;
  
 -      size = h * pitch * charcount;
 +      size = CALC_FONTSZ(h, pitch, charcount);
  
        new_data = kmalloc(FONT_EXTRA_WORDS * sizeof(int) + size, GFP_USER);
  
@@@ -2590,7 -2779,19 +2602,7 @@@ static void fbcon_set_palette(struct vc
  
  static u16 *fbcon_screen_pos(struct vc_data *vc, int offset)
  {
 -      unsigned long p;
 -      int line;
 -      
 -      if (vc->vc_num != fg_console || !softback_lines)
 -              return (u16 *) (vc->vc_origin + offset);
 -      line = offset / vc->vc_size_row;
 -      if (line >= softback_lines)
 -              return (u16 *) (vc->vc_origin + offset -
 -                              softback_lines * vc->vc_size_row);
 -      p = softback_curr + offset;
 -      if (p >= softback_end)
 -              p += softback_buf - softback_end;
 -      return (u16 *) p;
 +      return (u16 *) (vc->vc_origin + offset);
  }
  
  static unsigned long fbcon_getxy(struct vc_data *vc, unsigned long pos,
  
                x = offset % vc->vc_cols;
                y = offset / vc->vc_cols;
 -              if (vc->vc_num == fg_console)
 -                      y += softback_lines;
                ret = pos + (vc->vc_cols - x) * 2;
 -      } else if (vc->vc_num == fg_console && softback_lines) {
 -              unsigned long offset = pos - softback_curr;
 -
 -              if (pos < softback_curr)
 -                      offset += softback_end - softback_buf;
 -              offset /= 2;
 -              x = offset % vc->vc_cols;
 -              y = offset / vc->vc_cols;
 -              ret = pos + (vc->vc_cols - x) * 2;
 -              if (ret == softback_end)
 -                      ret = softback_buf;
 -              if (ret == softback_in)
 -                      ret = vc->vc_origin;
        } else {
                /* Should not happen */
                x = y = 0;
@@@ -2632,11 -2848,106 +2644,11 @@@ static void fbcon_invert_region(struct 
                        a = ((a) & 0x88ff) | (((a) & 0x7000) >> 4) |
                            (((a) & 0x0700) << 4);
                scr_writew(a, p++);
 -              if (p == (u16 *) softback_end)
 -                      p = (u16 *) softback_buf;
 -              if (p == (u16 *) softback_in)
 -                      p = (u16 *) vc->vc_origin;
 -      }
 -}
 -
 -static void fbcon_scrolldelta(struct vc_data *vc, int lines)
 -{
 -      struct fb_info *info = registered_fb[con2fb_map[fg_console]];
 -      struct fbcon_ops *ops = info->fbcon_par;
 -      struct fbcon_display *disp = &fb_display[fg_console];
 -      int offset, limit, scrollback_old;
 -
 -      if (softback_top) {
 -              if (vc->vc_num != fg_console)
 -                      return;
 -              if (vc->vc_mode != KD_TEXT || !lines)
 -                      return;
 -              if (logo_shown >= 0) {
 -                      struct vc_data *conp2 = vc_cons[logo_shown].d;
 -
 -                      if (conp2->vc_top == logo_lines
 -                          && conp2->vc_bottom == conp2->vc_rows)
 -                              conp2->vc_top = 0;
 -                      if (logo_shown == vc->vc_num) {
 -                              unsigned long p, q;
 -                              int i;
 -
 -                              p = softback_in;
 -                              q = vc->vc_origin +
 -                                  logo_lines * vc->vc_size_row;
 -                              for (i = 0; i < logo_lines; i++) {
 -                                      if (p == softback_top)
 -                                              break;
 -                                      if (p == softback_buf)
 -                                              p = softback_end;
 -                                      p -= vc->vc_size_row;
 -                                      q -= vc->vc_size_row;
 -                                      scr_memcpyw((u16 *) q, (u16 *) p,
 -                                                  vc->vc_size_row);
 -                              }
 -                              softback_in = softback_curr = p;
 -                              update_region(vc, vc->vc_origin,
 -                                            logo_lines * vc->vc_cols);
 -                      }
 -                      logo_shown = FBCON_LOGO_CANSHOW;
 -              }
 -              fbcon_cursor(vc, CM_ERASE | CM_SOFTBACK);
 -              fbcon_redraw_softback(vc, disp, lines);
 -              fbcon_cursor(vc, CM_DRAW | CM_SOFTBACK);
 -              return;
        }
 -
 -      if (!scrollback_phys_max)
 -              return;
 -
 -      scrollback_old = scrollback_current;
 -      scrollback_current -= lines;
 -      if (scrollback_current < 0)
 -              scrollback_current = 0;
 -      else if (scrollback_current > scrollback_max)
 -              scrollback_current = scrollback_max;
 -      if (scrollback_current == scrollback_old)
 -              return;
 -
 -      if (fbcon_is_inactive(vc, info))
 -              return;
 -
 -      fbcon_cursor(vc, CM_ERASE);
 -
 -      offset = disp->yscroll - scrollback_current;
 -      limit = disp->vrows;
 -      switch (disp->scrollmode) {
 -      case SCROLL_WRAP_MOVE:
 -              info->var.vmode |= FB_VMODE_YWRAP;
 -              break;
 -      case SCROLL_PAN_MOVE:
 -      case SCROLL_PAN_REDRAW:
 -              limit -= vc->vc_rows;
 -              info->var.vmode &= ~FB_VMODE_YWRAP;
 -              break;
 -      }
 -      if (offset < 0)
 -              offset += limit;
 -      else if (offset >= limit)
 -              offset -= limit;
 -
 -      ops->var.xoffset = 0;
 -      ops->var.yoffset = offset * vc->vc_font.height;
 -      ops->update_start(info);
 -
 -      if (!scrollback_current)
 -              fbcon_cursor(vc, CM_DRAW);
  }
  
  static int fbcon_set_origin(struct vc_data *vc)
  {
 -      if (softback_lines)
 -              fbcon_scrolldelta(vc, softback_lines);
        return 0;
  }
  
@@@ -2700,6 -3011,8 +2712,6 @@@ static void fbcon_modechanged(struct fb
  
                fbcon_set_palette(vc, color_table);
                update_screen(vc);
 -              if (softback_buf)
 -                      fbcon_update_softback(vc);
        }
  }
  
@@@ -3110,6 -3423,7 +3122,6 @@@ static const struct consw fb_con = 
        .con_font_default       = fbcon_set_def_font,
        .con_font_copy          = fbcon_copy_font,
        .con_set_palette        = fbcon_set_palette,
 -      .con_scrolldelta        = fbcon_scrolldelta,
        .con_set_origin         = fbcon_set_origin,
        .con_invert_region      = fbcon_invert_region,
        .con_screen_pos         = fbcon_screen_pos,
@@@ -3344,6 -3658,9 +3356,6 @@@ static void fbcon_exit(void
        }
  #endif
  
 -      kvfree((void *)softback_buf);
 -      softback_buf = 0UL;
 -
        for_each_registered_fb(i) {
                int pending = 0;
  
index 78bb14c03643ee96fbdf05c0670f502888005cb8,5ee153ba977e4a6c65013994e7ffd32fe5159068..9315b360c898136bb2a65bd348aa16f57dcbecea
@@@ -62,7 -62,7 +62,7 @@@ struct fbcon_ops 
        void (*clear_margins)(struct vc_data *vc, struct fb_info *info,
                              int color, int bottom_only);
        void (*cursor)(struct vc_data *vc, struct fb_info *info, int mode,
 -                     int softback_lines, int fg, int bg);
 +                     int fg, int bg);
        int  (*update_start)(struct fb_info *info);
        int  (*rotate_font)(struct fb_info *info, struct vc_data *vc);
        struct fb_var_screeninfo var;  /* copy of the current fb_var_screeninfo */
@@@ -152,13 -152,6 +152,6 @@@ static inline int attr_col_ec(int shift
  #define attr_bgcol_ec(bgshift, vc, info) attr_col_ec(bgshift, vc, info, 0)
  #define attr_fgcol_ec(fgshift, vc, info) attr_col_ec(fgshift, vc, info, 1)
  
- /* Font */
- #define REFCOUNT(fd)  (((int *)(fd))[-1])
- #define FNTSIZE(fd)   (((int *)(fd))[-2])
- #define FNTCHARCNT(fd)        (((int *)(fd))[-3])
- #define FNTSUM(fd)    (((int *)(fd))[-4])
- #define FONT_EXTRA_WORDS 4
      /*
       *  Scroll Method
       */
index 31b85b71cc377699829de6c1ed99841e74942576,257e94feeeb6d89cac29ddb0c5add22ea7f2024f..628fe5e010c08264af89ce6157a46901eb969dda
@@@ -13,6 -13,7 +13,7 @@@
  #include <linux/fb.h>
  #include <linux/vt_kern.h>
  #include <linux/console.h>
+ #include <linux/font.h>
  #include <asm/types.h>
  #include "fbcon.h"
  
@@@ -80,7 -81,7 +81,7 @@@ static void tile_clear_margins(struct v
  }
  
  static void tile_cursor(struct vc_data *vc, struct fb_info *info, int mode,
 -                      int softback_lines, int fg, int bg)
 +                      int fg, int bg)
  {
        struct fb_tilecursor cursor;
        int use_sw = vc->vc_cursor_type & CUR_SW;
This page took 0.137186 seconds and 4 git commands to generate.