linux-efi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
  • * [added to the 4.1 stable tree] x86/sysfb_efi: Fix valid BAR address range check
           [not found] <1463631606-32540-1-git-send-email-sasha.levin@oracle.com>
           [not found] ` <1463631606-32540-1-git-send-email-sasha.levin-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
    @ 2016-05-19  4:19 ` Sasha Levin
      1 sibling, 0 replies; 2+ messages in thread
    From: Sasha Levin @ 2016-05-19  4:19 UTC (permalink / raw)
      To: stable, stable-commits
      Cc: Wang YanQing, Matt Fleming, Ard Biesheuvel, David Herrmann,
    	Linus Torvalds, Peter Zijlstra, Thomas Gleixner, Tomi Valkeinen,
    	linux-efi, Ingo Molnar, Sasha Levin
    
    From: Wang YanQing <udknight@gmail.com>
    
    This patch has been added to the 4.1 stable tree. If you have any
    objections, please let us know.
    
    ===============
    
    [ Upstream commit c10fcb14c7afd6688c7b197a814358fecf244222 ]
    
    The code for checking whether a BAR address range is valid will break
    out of the loop when a start address of 0x0 is encountered.
    
    This behaviour is wrong since by breaking out of the loop we may miss
    the BAR that describes the EFI frame buffer in a later iteration.
    
    Because of this bug I can't use video=efifb: boot parameter to get
    efifb on my new ThinkPad E550 for my old linux system hard disk with
    3.10 kernel. In 3.10, efifb is the only choice due to DRM/I915 not
    supporting the GPU.
    
    This patch also add a trivial optimization to break out after we find
    the frame buffer address range without testing later BARs.
    
    Signed-off-by: Wang YanQing <udknight@gmail.com>
    [ Rewrote changelog. ]
    Signed-off-by: Matt Fleming <matt@codeblueprint.co.uk>
    Reviewed-by: Peter Jones <pjones@redhat.com>
    Cc: <stable@vger.kernel.org>
    Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: David Herrmann <dh.herrmann@gmail.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
    Cc: linux-efi@vger.kernel.org
    Link: http://lkml.kernel.org/r/1462454061-21561-2-git-send-email-matt@codeblueprint.co.uk
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    
    Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
    ---
     arch/x86/kernel/sysfb_efi.c | 14 ++++++++++++--
     1 file changed, 12 insertions(+), 2 deletions(-)
    
    diff --git a/arch/x86/kernel/sysfb_efi.c b/arch/x86/kernel/sysfb_efi.c
    index b285d4e..5da924b 100644
    --- a/arch/x86/kernel/sysfb_efi.c
    +++ b/arch/x86/kernel/sysfb_efi.c
    @@ -106,14 +106,24 @@ static int __init efifb_set_system(const struct dmi_system_id *id)
     					continue;
     				for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
     					resource_size_t start, end;
    +					unsigned long flags;
    +
    +					flags = pci_resource_flags(dev, i);
    +					if (!(flags & IORESOURCE_MEM))
    +						continue;
    +
    +					if (flags & IORESOURCE_UNSET)
    +						continue;
    +
    +					if (pci_resource_len(dev, i) == 0)
    +						continue;
     
     					start = pci_resource_start(dev, i);
    -					if (start == 0)
    -						break;
     					end = pci_resource_end(dev, i);
     					if (screen_info.lfb_base >= start &&
     					    screen_info.lfb_base < end) {
     						found_bar = 1;
    +						break;
     					}
     				}
     			}
    -- 
    2.5.0
    
    ^ permalink raw reply related	[flat|nested] 2+ messages in thread

  • end of thread, other threads:[~2016-05-19  4:19 UTC | newest]
    
    Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
    -- links below jump to the message on this page --
         [not found] <1463631606-32540-1-git-send-email-sasha.levin@oracle.com>
         [not found] ` <1463631606-32540-1-git-send-email-sasha.levin-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
    2016-05-19  4:19   ` [added to the 4.1 stable tree] MAINTAINERS: Remove asterisk from EFI directory names Sasha Levin
    2016-05-19  4:19 ` [added to the 4.1 stable tree] x86/sysfb_efi: Fix valid BAR address range check Sasha Levin
    

    This is a public inbox, see mirroring instructions
    for how to clone and mirror all data and code used for this inbox;
    as well as URLs for NNTP newsgroup(s).