Sophie

Sophie

distrib > Mageia > 1 > x86_64 > media > nonfree-updates-src > by-pkgid > c480b0b4fbed30fb090f3419933200ca > files > 3

nvidia173-173.14.31-1.1.mga1.nonfree.src.rpm

diff -ur usr/src/nv/nv.c usr/src/nv/nv.c
--- usr/src/nv/nv.c	2012-04-05 14:45:07.000000000 -0500
+++ usr/src/nv/nv.c	2012-04-05 14:45:07.000000000 -0500
@@ -2548,6 +2548,12 @@
     /* NV reg space */
     if (IS_REG_OFFSET(nv, NV_VMA_OFFSET(vma), NV_VMA_SIZE(vma)))
     {
+        if (IS_BLACKLISTED_REG_OFFSET(nv, NV_VMA_OFFSET(vma), NV_VMA_SIZE(vma)))
+        {
+            status = -EINVAL;
+            goto done;
+        }
+
         if (nv_encode_caching(&vma->vm_page_prot,
                               NV_MEMORY_UNCACHED,
                               NV_MEMORY_TYPE_REGISTERS))
diff -ur kernel/nv.h kernel/nv.h
--- usr/src/nv/nv.h	2012-04-05 14:45:07.000000000 -0500
+++ usr/src/nv/nv.h	2012-04-05 14:45:07.000000000 -0500
@@ -430,6 +430,14 @@
              ((offset) >= (nv)->agp.address) &&                                \
              (((offset) + ((length)-1)) <= (nv)->agp.address + ((nv)->agp.size-1)))
 
+#define IS_REG_RANGE_WITHIN_MAPPING(nv, roffset, rlength, moffset, mlength)    \
+             (((moffset) <= ((nv)->regs->address + ((roffset) + (rlength)-1))) &&\
+             (((moffset) + (mlength)-1) >= ((nv)->regs->address + (roffset))))
+
+#define IS_BLACKLISTED_REG_OFFSET(nv, offset, length)                          \
+             ((IS_REG_RANGE_WITHIN_MAPPING(nv, 0x1000, 0x1000, offset, length)) ||\
+             (IS_REG_RANGE_WITHIN_MAPPING(nv, 0x700000, 0x100000, offset, length)))
+
 /* duplicated from nvos.h for external builds */
 #ifndef NVOS_AGP_CONFIG_DISABLE_AGP
 #  define NVOS_AGP_CONFIG_DISABLE_AGP (0x00000000)