diff options
-rw-r--r-- | DRIVER_VERSION | 2 | ||||
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | command-list.c | 6 | ||||
-rw-r--r-- | install-from-cwd.c | 3 | ||||
-rw-r--r-- | misc.c | 27 | ||||
-rw-r--r-- | nvidia-installer.h | 2 | ||||
-rw-r--r-- | option_table.h | 10 | ||||
-rwxr-xr-x | rtld_test_Linux-x86 | bin | 3056 -> 3136 bytes | |||
-rwxr-xr-x | rtld_test_Linux-x86_64 | bin | 4688 -> 4536 bytes |
9 files changed, 41 insertions, 11 deletions
diff --git a/DRIVER_VERSION b/DRIVER_VERSION index 54929a2..2d04672 100644 --- a/DRIVER_VERSION +++ b/DRIVER_VERSION @@ -1 +1 @@ -100.14.23 +169.04 @@ -278,7 +278,7 @@ tls_test: tls_test.c # nvidia-installer to simplify x86-64 builds. rebuild_rtld_test: rtld_test.c - gcc -Wall -O2 -fomit-frame-pointer -o $(RTLD_TEST) -lGL $< + gcc -Wall -O2 -fomit-frame-pointer -o $(RTLD_TEST) -lGL -lcuda -lpthread -lstdc++ $< strip $(RTLD_TEST) # dummy rule to override implicit rule that builds dls_test from diff --git a/command-list.c b/command-list.c index 21e4cb6..e02b018 100644 --- a/command-list.c +++ b/command-list.c @@ -239,6 +239,12 @@ CommandList *build_command_list(Options *op, Package *p) " ", p->entries[i].dst, NULL); add_command(c, RUN_CMD, tmp); nvfree(tmp); + if (op->utils[EXECSTACK] != NULL) { + tmp = nvstrcat(op->utils[EXECSTACK], " -c ", p->entries[i].dst, + NULL); + add_command(c, RUN_CMD, tmp); + nvfree(tmp); + } } } diff --git a/install-from-cwd.c b/install-from-cwd.c index f32efcc..2d28b89 100644 --- a/install-from-cwd.c +++ b/install-from-cwd.c @@ -237,7 +237,8 @@ int install_from_cwd(Options *op) /* done */ - if (op->kernel_module_only) { + if (op->kernel_module_only || op->no_nvidia_xconfig_question) { + ui_message(op, "Installation of the kernel module for the %s " "(version %s) is now complete.", p->description, p->version); @@ -42,6 +42,10 @@ #include <libgen.h> #include <pci/pci.h> +#ifndef PCI_CLASS_DISPLAY_3D +#define PCI_CLASS_DISPLAY_3D 0x302 +#endif + #include "nvidia-installer.h" #include "user-interface.h" #include "kernel.h" @@ -704,6 +708,7 @@ int find_system_utils(Options *op) { "chcon", "selinux" }, { "selinuxenabled", "selinux" }, { "getenforce", "selinux" }, + { "execstack", "selinux" }, { "pkg-config", "pkg-config" }, { "X", "xserver" } }; @@ -2179,6 +2184,7 @@ int check_for_nvidia_graphics_devices(Options *op, Package *p) struct pci_access *pacc; struct pci_dev *dev; int i, found_supported_device = FALSE; + int found_vga_device = FALSE; uint16 class; pacc = pci_alloc(); @@ -2192,8 +2198,12 @@ int check_for_nvidia_graphics_devices(Options *op, Package *p) pci_scan_bus(pacc); for (dev = pacc->devices; dev != NULL; dev = dev->next) { - if ((pci_fill_info(dev, PCI_FILL_IDENT) & PCI_FILL_IDENT) && - ((class = pci_read_word(dev, PCI_CLASS_DEVICE)) == PCI_CLASS_DISPLAY_VGA) && + if ((pci_fill_info(dev, PCI_FILL_IDENT) & PCI_FILL_IDENT) == 0) + continue; + + class = pci_read_word(dev, PCI_CLASS_DEVICE); + + if ((class == PCI_CLASS_DISPLAY_VGA || class == PCI_CLASS_DISPLAY_3D) && (dev->vendor_id == 0x10de) /* NVIDIA */ && (dev->device_id >= 0x0020) /* TNT or later */) { /* @@ -2213,7 +2223,7 @@ int check_for_nvidia_graphics_devices(Options *op, Package *p) break; } } - + ui_warn(op, "The NVIDIA %s GPU installed in this system is supported " "through the NVIDIA %s legacy Linux graphics drivers. Please " "visit http://www.nvidia.com/object/unix.html for more " @@ -2225,7 +2235,13 @@ int check_for_nvidia_graphics_devices(Options *op, Package *p) found_legacy_device = TRUE; } } - if (!found_legacy_device) found_supported_device = TRUE; + + if (!found_legacy_device) { + found_supported_device = TRUE; + + if (class == PCI_CLASS_DISPLAY_VGA) + found_vga_device = TRUE; + } } } @@ -2241,6 +2257,9 @@ int check_for_nvidia_graphics_devices(Options *op, Package *p) return FALSE; } + if (!found_vga_device) + op->no_nvidia_xconfig_question = TRUE; + return TRUE; } /* check_for_nvidia_graphics_devices() */ diff --git a/nvidia-installer.h b/nvidia-installer.h index f2a8569..023b739 100644 --- a/nvidia-installer.h +++ b/nvidia-installer.h @@ -53,6 +53,7 @@ typedef enum { CHCON = MAX_SYSTEM_UTILS, SELINUX_ENABLED, GETENFORCE, + EXECSTACK, PKG_CONFIG, XSERVER, MAX_SYSTEM_OPTIONAL_UTILS @@ -135,6 +136,7 @@ typedef struct __options { int selinux_enabled; int sigwinch_workaround; int no_x_check; + int no_nvidia_xconfig_question; char *opengl_prefix; char *opengl_libdir; diff --git a/option_table.h b/option_table.h index 313ade6..2398fee 100644 --- a/option_table.h +++ b/option_table.h @@ -394,10 +394,12 @@ static const NVOption __options[] = { "Linux installations using SELinux (Security-Enhanced Linux) " "require that the security type of all shared libraries be set " "to 'shlib_t' or 'textrel_shlib_t', depending on the distribution. " - "nvidia-installer will detect when to set " - "the security type, and set it using chcon(1) on the shared " - "libraries it installs. Use this option to override " - "nvidia-installer's detection of when to set the security type. " + "nvidia-installer will detect when to set the security type, " + "and set it using chcon(1) on the shared libraries it installs. " + "If the execstack(8) system utility is present, nvidia-installer will " + "use it to also clear the executable stack flag of the libraries. " + "Use this option to override nvidia-installer's detection of when " + "to set the security type. " "Valid values for [FORCE-SELINUX] are 'yes' (force setting of the " "security type), " "'no' (prevent setting of the security type), and 'default' " diff --git a/rtld_test_Linux-x86 b/rtld_test_Linux-x86 Binary files differindex b60ea47..8b4087f 100755 --- a/rtld_test_Linux-x86 +++ b/rtld_test_Linux-x86 diff --git a/rtld_test_Linux-x86_64 b/rtld_test_Linux-x86_64 Binary files differindex be5e874..3995dd2 100755 --- a/rtld_test_Linux-x86_64 +++ b/rtld_test_Linux-x86_64 |