From ae3c9ad4abe66784d7ee474455003d2745699286 Mon Sep 17 00:00:00 2001 From: Bjorn Helgaas Date: Thu, 16 Nov 2006 17:29:06 +0100 Subject: [PATCH] Bug 9041: Check the return code in xf86MapDomainMemory(). --- hw/xfree86/os-support/bus/linuxPci.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/hw/xfree86/os-support/bus/linuxPci.c b/hw/xfree86/os-support/bus/linuxPci.c index 15fc2b8c7..03388f1ff 100644 --- a/hw/xfree86/os-support/bus/linuxPci.c +++ b/hw/xfree86/os-support/bus/linuxPci.c @@ -683,28 +683,28 @@ xf86MapDomainMemory(int ScreenNum, int Flags, PCITAG Tag, ADDRESS Base, unsigned long Size) { int domain = xf86GetPciDomain(Tag); - int fd; + int fd = -1; pointer addr; /* * We use /proc/bus/pci on non-legacy addresses or if the Linux sysfs * legacy_mem interface is unavailable. */ - if (Base > 1024*1024) - return linuxMapPci(ScreenNum, Flags, Tag, Base, Size, + if (Base >= 1024*1024) + addr = linuxMapPci(ScreenNum, Flags, Tag, Base, Size, PCIIOC_MMAP_IS_MEM); - - if ((fd = linuxOpenLegacy(Tag, "legacy_mem")) < 0) - return linuxMapPci(ScreenNum, Flags, Tag, Base, Size, + else if ((fd = linuxOpenLegacy(Tag, "legacy_mem")) < 0) + addr = linuxMapPci(ScreenNum, Flags, Tag, Base, Size, PCIIOC_MMAP_IS_MEM); + else + addr = mmap(NULL, Size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, Base); - addr = mmap(NULL, Size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, Base); - if (addr == MAP_FAILED) { - close (fd); + if (fd >= 0) + close(fd); + if (addr == NULL || addr == MAP_FAILED) { perror("mmap failure"); FatalError("xf86MapDomainMem(): mmap() failure\n"); } - close(fd); return addr; }