diff -uNr vmci-only.orig/linux/driver.c vmci-only/linux/driver.c --- vmci-only.orig/linux/driver.c 2011-12-06 21:35:07.000000000 +0200 +++ vmci-only/linux/driver.c 2011-12-06 21:35:18.000000000 +0200 @@ -241,7 +241,24 @@ #define LinuxDriverUnlockIoctlPerFD(mutex) do {} while (0) #endif -static struct file_operations vmuser_fops; +/* + * Moved file operations initialize here because of incompatibilites + * with Gentoo hardened profile/hardend Linux 3. + */ +static struct file_operations vmuser_fops = { + .owner = THIS_MODULE, + .poll = LinuxDriverPoll, +#ifdef HAVE_UNLOCKED_IOCTL + .unlocked_ioctl = LinuxDriver_UnlockedIoctl, +#else + .ioctl = LinuxDriver_Ioctl, +#endif +#ifdef HAVE_COMPAT_IOCTL + .compat_ioctl = LinuxDriver_UnlockedIoctl, +#endif + .open = LinuxDriver_Open, + .release = LinuxDriver_Close +}; /* @@ -378,26 +395,6 @@ return -ENOMEM; } - /* - * Initialize the file_operations structure. Because this code is always - * compiled as a module, this is fine to do it here and not in a static - * initializer. - */ - - memset(&vmuser_fops, 0, sizeof vmuser_fops); - vmuser_fops.owner = THIS_MODULE; - vmuser_fops.poll = LinuxDriverPoll; -#ifdef HAVE_UNLOCKED_IOCTL - vmuser_fops.unlocked_ioctl = LinuxDriver_UnlockedIoctl; -#else - vmuser_fops.ioctl = LinuxDriver_Ioctl; -#endif -#ifdef HAVE_COMPAT_IOCTL - vmuser_fops.compat_ioctl = LinuxDriver_UnlockedIoctl; -#endif - vmuser_fops.open = LinuxDriver_Open; - vmuser_fops.release = LinuxDriver_Close; - sprintf(linuxState.deviceName, "vmci"); linuxState.major = 10; linuxState.misc.minor = MISC_DYNAMIC_MINOR;