Bug 9041: Check the return code in xf86MapDomainMemory().

This commit is contained in:
Bjorn Helgaas 2006-11-16 17:29:06 +01:00 committed by Matthias Hopf
parent 2eab230d9b
commit ae3c9ad4ab

View File

@ -683,28 +683,28 @@ xf86MapDomainMemory(int ScreenNum, int Flags, PCITAG Tag,
ADDRESS Base, unsigned long Size) ADDRESS Base, unsigned long Size)
{ {
int domain = xf86GetPciDomain(Tag); int domain = xf86GetPciDomain(Tag);
int fd; int fd = -1;
pointer addr; pointer addr;
/* /*
* We use /proc/bus/pci on non-legacy addresses or if the Linux sysfs * We use /proc/bus/pci on non-legacy addresses or if the Linux sysfs
* legacy_mem interface is unavailable. * legacy_mem interface is unavailable.
*/ */
if (Base > 1024*1024) if (Base >= 1024*1024)
return linuxMapPci(ScreenNum, Flags, Tag, Base, Size, addr = linuxMapPci(ScreenNum, Flags, Tag, Base, Size,
PCIIOC_MMAP_IS_MEM); PCIIOC_MMAP_IS_MEM);
else if ((fd = linuxOpenLegacy(Tag, "legacy_mem")) < 0)
if ((fd = linuxOpenLegacy(Tag, "legacy_mem")) < 0) addr = linuxMapPci(ScreenNum, Flags, Tag, Base, Size,
return linuxMapPci(ScreenNum, Flags, Tag, Base, Size,
PCIIOC_MMAP_IS_MEM); 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 (fd >= 0)
if (addr == MAP_FAILED) { close(fd);
close (fd); if (addr == NULL || addr == MAP_FAILED) {
perror("mmap failure"); perror("mmap failure");
FatalError("xf86MapDomainMem(): mmap() failure\n"); FatalError("xf86MapDomainMem(): mmap() failure\n");
} }
close(fd);
return addr; return addr;
} }