diff -ru ./2.6.x/Makefile ../../../../../../fglrx-install.uZLF8t/common/lib/modules/fglrx/build_mod//2.6.x/Makefile --- ./2.6.x/Makefile 2010-09-01 16:05:31.000000000 +0200 +++ ../../../../../../fglrx-install.uZLF8t/common/lib/modules/fglrx/build_mod//2.6.x/Makefile 2010-09-23 08:47:24.000000000 +0200 @@ -66,6 +66,8 @@ -DFGL_GART_RESERVED_SLOT \ -DFGL_LINUX253P1_VMA_API \ -DPAGE_ATTR_FIX=$(PAGE_ATTR_FIX) \ + -DARCH_COMPAT_ALLOC_USER_SPACE=$(ARCH_COMPAT_ALLOC_USER_SPACE) \ + ifeq ($(KERNELRELEASE),) # on first call from remote location we get into this path diff -ru ./kcl_ioctl.c ../../../../../../fglrx-install.uZLF8t/common/lib/modules/fglrx/build_mod//kcl_ioctl.c --- ./kcl_ioctl.c 2010-09-01 16:05:31.000000000 +0200 +++ ../../../../../../fglrx-install.uZLF8t/common/lib/modules/fglrx/build_mod//kcl_ioctl.c 2010-09-23 08:41:30.000000000 +0200 @@ -193,7 +193,20 @@ */ void* ATI_API_CALL KCL_IOCTL_AllocUserSpace32(long size) { - return compat_alloc_user_space(size); + void __user *space; + +#if ARCH_COMPAT_ALLOC_USER_SPACE + space = arch_compat_alloc_user_space(size); +#else + space = compat_alloc_user_space(size); +#endif + + /* Avoid CVE-2010-3081 by checking access_ok ourselves */ + if (!access_ok(VERIFY_WRITE, space, size)) { + return NULL; + } + + return space; } #endif // __x86_64__ diff -ru ./make.sh ../../../../../../fglrx-install.uZLF8t/common/lib/modules/fglrx/build_mod//make.sh --- ./make.sh 2010-09-01 16:05:31.000000000 +0200 +++ ../../../../../../fglrx-install.uZLF8t/common/lib/modules/fglrx/build_mod//make.sh 2010-09-23 08:46:14.000000000 +0200 @@ -391,6 +391,26 @@ fi # ============================================================== +# resolve if we have compat_alloc_user_space is in linux/compat.h + +ARCH_COMPAT_ALLOC_USER_SPACE=0 + +src_file=$linuxincludes/linux/compat.h +if [ ! -e $src_file ]; +then + echo "Warning:" >> $logfile + echo "kernel includes at $linuxincludes not found or incomplete" >> $logfile + echo "file: $src_file" >> $logfile + echo "" >> $logfile +else + if grep -q compat_alloc_user_space $src_file; + then + ARCH_COMPAT_ALLOC_USER_SPACE=1 + echo "file $src_file says: ARCH_COMPAT_ALLOC_USER_SPACE=$ARCH_COMPAT_ALLOC_USER_SPACE" >> $logfile + fi +fi + +# ============================================================== # break down OsRelease string into its components major=`echo $OsRelease | sed -n -e s/"^\([[:digit:]]*\)\.\([[:digit:]]*\)\.\([[:digit:]]*\)\(.*\)"/"\\1"/p` @@ -429,6 +449,7 @@ MODFLAGS="-DMODULE -DATI -DFGL -DPAGE_ATTR_FIX=$PAGE_ATTR_FIX $def_smp $def_modversions" \ KVER=${uname_r} \ PAGE_ATTR_FIX=$PAGE_ATTR_FIX \ + ARCH_COMPAT_ALLOC_USER_SPACE=$ARCH_COMPAT_ALLOC_USER_SPACE \ > tlog 2>&1 res=$?