diff --git a/Makefile.rhelver b/Makefile.rhelver index 8ceb9d970..e266cc0cd 100644 --- a/Makefile.rhelver +++ b/Makefile.rhelver @@ -12,7 +12,7 @@ RHEL_MINOR = 99 # # Use this spot to avoid future merge conflicts. # Do not trim this comment. -RHEL_RELEASE = 43 +RHEL_RELEASE = 44 # # RHEL_REBASE_NUM diff --git a/Patchlist.changelog b/Patchlist.changelog index 98ae4bda5..7dd1ff2d1 100644 --- a/Patchlist.changelog +++ b/Patchlist.changelog @@ -1,3 +1,21 @@ +"https://gitlab.com/cki-project/kernel-ark/-/commit"/31a8a6b4003446a250fa9f7ee97de71720331c1f + 31a8a6b4003446a250fa9f7ee97de71720331c1f [redhat] kernel/rh_messages.c: move hardware tables to rh_messages.h + +"https://gitlab.com/cki-project/kernel-ark/-/commit"/0f6fbe653a0a7943a1c36ee4f47395ea30b79c75 + 0f6fbe653a0a7943a1c36ee4f47395ea30b79c75 [redhat] kernel/rh_messages.c: Wire up new calls + +"https://gitlab.com/cki-project/kernel-ark/-/commit"/b73e031eb85ee3e0755203421a1b6ad153216568 + b73e031eb85ee3e0755203421a1b6ad153216568 [redhat] drivers/pci: Update rh_messages.c + +"https://gitlab.com/cki-project/kernel-ark/-/commit"/edb8831394cd8eddf069a09842f464bfc8a957a7 + edb8831394cd8eddf069a09842f464bfc8a957a7 [redhat] drivers/message/fusion/mptspi.c: Remove extra disabled warning + +"https://gitlab.com/cki-project/kernel-ark/-/commit"/635b364c987e7559bc20d3f22822a514b56ac33d + 635b364c987e7559bc20d3f22822a514b56ac33d [redhat] mptsas: Remove add_taint() + +"https://gitlab.com/cki-project/kernel-ark/-/commit"/b8cb66e488122646b260a080f683d8746a145ebb + b8cb66e488122646b260a080f683d8746a145ebb [redhat] drivers/pci: Remove RHEL-only pci_hw_*() functions + "https://gitlab.com/cki-project/kernel-ark/-/commit"/7ba2fc7e001181fe630e92a4633e76a6c71689e1 7ba2fc7e001181fe630e92a4633e76a6c71689e1 scsi: sd: Add "probe_type" module parameter to allow synchronous probing diff --git a/kernel.spec b/kernel.spec index 745c583fc..b10537924 100644 --- a/kernel.spec +++ b/kernel.spec @@ -162,13 +162,13 @@ Summary: The Linux kernel %define specrpmversion 6.5.0 %define specversion 6.5.0 %define patchversion 6.5 -%define pkgrelease 0.rc6.43 +%define pkgrelease 0.rc6.20230815git91aa6c412d7f.44 %define kversion 6 -%define tarfile_release 6.5-rc6 +%define tarfile_release 6.5-rc6-27-g91aa6c412d7f # This is needed to do merge window version magic %define patchlevel 5 # This allows pkg_release to have configurable %%{?dist} tag -%define specrelease 0.rc6.43%{?buildid}%{?dist} +%define specrelease 0.rc6.20230815git91aa6c412d7f.44%{?buildid}%{?dist} # This defines the kabi tarball version %define kabiversion 6.5.0 @@ -3713,6 +3713,15 @@ fi\ # # %changelog +* Tue Aug 15 2023 Fedora Kernel Team [6.5.0-0.rc6.91aa6c412d7f.44.el130] +- CI: rawhide_release: switch to using script to push (Don Zickus) +- redhat/self-test: Update self-test data (Prarit Bhargava) +- redhat/scripts/cross-compile: Update download_cross.sh (Prarit Bhargava) +- redhat/Makefile.cross: Remove ARCH selection code (Prarit Bhargava) +- redhat/Makefile.cross: Update script (Prarit Bhargava) +- Fix interruptible non MR jobs (Michael Hofmann) +- Linux v6.5.0-0.rc6.91aa6c412d7f + * Mon Aug 14 2023 Fedora Kernel Team [6.5.0-0.rc6.43.el127] - Linux v6.5.0-0.rc6 diff --git a/patch-6.5-redhat.patch b/patch-6.5-redhat.patch index f6a303695..1872340c3 100644 --- a/patch-6.5-redhat.patch +++ b/patch-6.5-redhat.patch @@ -22,13 +22,13 @@ drivers/hwtracing/coresight/coresight-etm4x-core.c | 19 + drivers/input/rmi4/rmi_driver.c | 124 +++-- drivers/iommu/iommu.c | 22 + - drivers/message/fusion/mptsas.c | 10 + - drivers/message/fusion/mptspi.c | 11 + + drivers/message/fusion/mptsas.c | 5 + + drivers/message/fusion/mptspi.c | 6 + drivers/net/wireguard/main.c | 6 + drivers/nvme/host/core.c | 22 +- drivers/nvme/host/multipath.c | 19 +- drivers/nvme/host/nvme.h | 4 + - drivers/pci/pci-driver.c | 78 ++++ + drivers/pci/pci-driver.c | 7 + drivers/pci/quirks.c | 24 + drivers/scsi/aacraid/linit.c | 2 + drivers/scsi/be2iscsi/be_main.c | 2 + @@ -42,27 +42,29 @@ drivers/usb/core/hub.c | 7 + fs/afs/main.c | 3 + include/linux/efi.h | 22 +- - include/linux/kernel.h | 21 + + include/linux/kernel.h | 14 + include/linux/lsm_hook_defs.h | 2 + - include/linux/module.h | 1 + + include/linux/module.h | 5 + include/linux/panic.h | 18 +- - include/linux/pci.h | 16 + + include/linux/pci.h | 5 + include/linux/rh_kabi.h | 515 +++++++++++++++++++++ include/linux/rmi.h | 1 + include/linux/security.h | 5 + + init/main.c | 3 + kernel/Makefile | 1 + kernel/bpf/syscall.c | 23 + - kernel/module/main.c | 2 + + kernel/module/main.c | 7 + kernel/module/signing.c | 9 +- kernel/panic.c | 13 + - kernel/rh_messages.c | 209 +++++++++ + kernel/rh_messages.c | 414 +++++++++++++++++ + kernel/rh_messages.h | 109 +++++ scripts/mod/modpost.c | 8 + scripts/tags.sh | 2 + security/integrity/platform_certs/load_uefi.c | 6 +- security/lockdown/Kconfig | 13 + security/lockdown/lockdown.c | 1 + security/security.c | 12 + - 64 files changed, 1552 insertions(+), 188 deletions(-) + 66 files changed, 1779 insertions(+), 188 deletions(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 722b6eca2e93..59a26ed5aa96 100644 @@ -1116,22 +1118,10 @@ index caaf563d38ae..d9c4d039c4e7 100644 * iommu_setup_default_domain - Set the default_domain for the group * @group: Group to change diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c -index 86f16f3ea478..0ad9759ab0c1 100644 +index 86f16f3ea478..499dc34a5e66 100644 --- a/drivers/message/fusion/mptsas.c +++ b/drivers/message/fusion/mptsas.c -@@ -5320,6 +5320,11 @@ mptsas_probe(struct pci_dev *pdev, const struct pci_device_id *id) - ioc, MPI_SAS_OP_CLEAR_ALL_PERSISTENT); - } - -+#ifdef CONFIG_RHEL_DIFFERENCES -+ add_taint(TAINT_SUPPORT_REMOVED, LOCKDEP_STILL_OK); -+ pr_warn("MPTSAS MODULE IS NOT SUPPORTED\n"); -+#endif -+ - error = scsi_add_host(sh, &ioc->pcidev->dev); - if (error) { - dprintk(ioc, printk(MYIOC_s_ERR_FMT -@@ -5383,6 +5388,10 @@ static void mptsas_remove(struct pci_dev *pdev) +@@ -5383,6 +5383,10 @@ static void mptsas_remove(struct pci_dev *pdev) } static struct pci_device_id mptsas_pci_table[] = { @@ -1142,7 +1132,7 @@ index 86f16f3ea478..0ad9759ab0c1 100644 { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_SAS1064, PCI_ANY_ID, PCI_ANY_ID }, { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_SAS1068, -@@ -5395,6 +5404,7 @@ static struct pci_device_id mptsas_pci_table[] = { +@@ -5395,6 +5399,7 @@ static struct pci_device_id mptsas_pci_table[] = { PCI_ANY_ID, PCI_ANY_ID }, { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_SAS1068_820XELP, PCI_ANY_ID, PCI_ANY_ID }, @@ -1151,7 +1141,7 @@ index 86f16f3ea478..0ad9759ab0c1 100644 }; MODULE_DEVICE_TABLE(pci, mptsas_pci_table); diff --git a/drivers/message/fusion/mptspi.c b/drivers/message/fusion/mptspi.c -index 6c5920db1e9d..c20e21e3d70a 100644 +index 6c5920db1e9d..dfbc97b68e6a 100644 --- a/drivers/message/fusion/mptspi.c +++ b/drivers/message/fusion/mptspi.c @@ -1238,12 +1238,17 @@ static struct spi_function_template mptspi_transport_functions = { @@ -1172,15 +1162,10 @@ index 6c5920db1e9d..c20e21e3d70a 100644 {0} /* Terminating entry */ }; MODULE_DEVICE_TABLE(pci, mptspi_pci_table); -@@ -1534,6 +1539,12 @@ mptspi_probe(struct pci_dev *pdev, const struct pci_device_id *id) +@@ -1534,6 +1539,7 @@ mptspi_probe(struct pci_dev *pdev, const struct pci_device_id *id) 0, 0, 0, 0, 5); scsi_scan_host(sh); -+ -+#ifdef CONFIG_RHEL_DIFFERENCES -+ add_taint(TAINT_SUPPORT_REMOVED, LOCKDEP_STILL_OK); -+ pr_warn("MPTSPI MODULE IS NOT SUPPORTED\n"); -+#endif + return 0; @@ -1346,7 +1331,7 @@ index f35647c470af..e57357f23306 100644 { } diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c -index ae9baf801681..4e01e6192f16 100644 +index ae9baf801681..55648c5fe49e 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c @@ -19,6 +19,7 @@ @@ -1357,90 +1342,19 @@ index ae9baf801681..4e01e6192f16 100644 #include #include #include "pci.h" -@@ -296,6 +297,83 @@ static struct attribute *pci_drv_attrs[] = { - }; - ATTRIBUTE_GROUPS(pci_drv); - +@@ -321,6 +322,12 @@ static long local_pci_probe(void *_ddi) + */ + pm_runtime_get_sync(dev); + pci_dev->driver = pci_drv; ++ +#ifdef CONFIG_RHEL_DIFFERENCES -+/** -+ * pci_hw_deprecated - Tell if a PCI device is deprecated -+ * @ids: array of PCI device id structures to search in -+ * @dev: the PCI device structure to match against -+ * -+ * Used by a driver to check whether this device is in its list of deprecated -+ * devices. Returns the matching pci_device_id structure or %NULL if there is -+ * no match. -+ * -+ * Reserved for Internal Red Hat use only. -+ */ -+const struct pci_device_id *pci_hw_deprecated(const struct pci_device_id *ids, -+ struct pci_dev *dev) -+{ -+ const struct pci_device_id *ret = pci_match_id(ids, dev); -+ -+ if (!ret) -+ return NULL; -+ -+ mark_hardware_deprecated(dev_driver_string(&dev->dev), "%04X:%04X @ %s", -+ dev->device, dev->vendor, pci_name(dev)); -+ return ret; -+} -+EXPORT_SYMBOL(pci_hw_deprecated); -+ -+/** -+ * pci_hw_unmaintained - Tell if a PCI device is unmaintained -+ * @ids: array of PCI device id structures to search in -+ * @dev: the PCI device structure to match against -+ * -+ * Used by a driver to check whether this device is in its list of unmaintained -+ * devices. Returns the matching pci_device_id structure or %NULL if there is -+ * no match. -+ * -+ * Reserved for Internal Red Hat use only. -+ */ -+const struct pci_device_id *pci_hw_unmaintained(const struct pci_device_id *ids, -+ struct pci_dev *dev) -+{ -+ const struct pci_device_id *ret = pci_match_id(ids, dev); -+ -+ if (!ret) -+ return NULL; -+ -+ mark_hardware_unmaintained(dev_driver_string(&dev->dev), "%04X:%04X @ %s", -+ dev->device, dev->vendor, pci_name(dev)); -+ return ret; -+} -+EXPORT_SYMBOL(pci_hw_unmaintained); -+ -+/** -+ * pci_hw_disabled - Tell if a PCI device is disabled -+ * @ids: array of PCI device id structures to search in -+ * @dev: the PCI device structure to match against -+ * -+ * Used by a driver to check whether this device is in its list of disabled -+ * devices. Returns the matching pci_device_id structure or %NULL if there is -+ * no match. -+ * -+ * Reserved for Internal Red Hat use only. -+ */ -+const struct pci_device_id *pci_hw_disabled(const struct pci_device_id *ids, -+ struct pci_dev *dev) -+{ -+ const struct pci_device_id *ret = pci_match_id(ids, dev); -+ -+ if (!ret) -+ return NULL; -+ -+ mark_hardware_disabled(dev_driver_string(&dev->dev), "%04X:%04X @ %s", -+ dev->device, dev->vendor, pci_name(dev)); -+ return ret; -+} -+EXPORT_SYMBOL(pci_hw_disabled); ++ if (pci_rh_check_status(pci_dev)) ++ return -EACCES; +#endif + - struct drv_dev_and_id { - struct pci_driver *drv; - struct pci_dev *dev; + rc = pci_drv->probe(pci_dev, ddi->id); + if (!rc) + return rc; diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 321156ca273d..fc399e56ec8f 100644 --- a/drivers/pci/quirks.c @@ -1859,10 +1773,10 @@ index ab088c662e88..f974f9d9a7c5 100644 enum efi_secureboot_mode efi_get_secureboot_mode(efi_get_variable_t *get_var) { diff --git a/include/linux/kernel.h b/include/linux/kernel.h -index 0d91e0af0125..d83e42ef8dd5 100644 +index 0d91e0af0125..9fbf61a303bc 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h -@@ -481,4 +481,25 @@ static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { } +@@ -481,4 +481,18 @@ static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { } /* OTHER_WRITABLE? Generally considered a bad idea. */ \ BUILD_BUG_ON_ZERO((perms) & 2) + \ (perms)) @@ -1871,18 +1785,11 @@ index 0d91e0af0125..d83e42ef8dd5 100644 + +#ifdef CONFIG_RHEL_DIFFERENCES +void mark_hardware_unmaintained(const char *driver_name, char *fmt, ...); -+void mark_driver_unmaintained(const char *driver_name); -+void mark_hardware_deprecated(const char *driver_name, char *fmt, ...); -+void mark_driver_deprecated(const char *driver_name); -+void mark_hardware_disabled(const char *driver_name, char *fmt, ...); +void mark_tech_preview(const char *msg, struct module *mod); +void mark_partner_supported(const char *msg, struct module *mod); ++void init_rh_check_status(char *fn_name); +#else +static inline void mark_hardware_unmaintained(const char *driver_name, char *fmt, ...) { } -+static inline void mark_driver_unmaintained(const char *driver_name) { } -+static inline void mark_hardware_deprecated(const char *driver_name, char *fmt, ...) { } -+static inline void mark_driver_deprecated(const char *driver_name) { } -+static inline void mark_hardware_disabled(const char *driver_name, char *fmt, ...) { } +static inline void mark_tech_preview(const char *msg, struct module *mod) { } +static inline void mark_partner_supported(const char *msg, struct module *mod) { } +#endif @@ -1902,7 +1809,7 @@ index 7308a1a7599b..a3aa26339b43 100644 #ifdef CONFIG_PERF_EVENTS LSM_HOOK(int, 0, perf_event_open, struct perf_event_attr *attr, int type) diff --git a/include/linux/module.h b/include/linux/module.h -index a98e188cf37b..2eef4246c2c9 100644 +index a98e188cf37b..059c2f633ef6 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -418,6 +418,7 @@ struct module { @@ -1913,6 +1820,15 @@ index a98e188cf37b..2eef4246c2c9 100644 struct kobject *holders_dir; /* Exported symbols */ +@@ -988,4 +989,8 @@ static inline unsigned long find_kallsyms_symbol_value(struct module *mod, + + #endif /* CONFIG_MODULES && CONFIG_KALLSYMS */ + ++#ifdef CONFIG_RHEL_DIFFERENCES ++void module_rh_check_status(const char * module_name); ++#endif ++ + #endif /* _LINUX_MODULE_H */ diff --git a/include/linux/panic.h b/include/linux/panic.h index 6717b15e798c..8e1d3eae1686 100644 --- a/include/linux/panic.h @@ -1943,32 +1859,28 @@ index 6717b15e798c..8e1d3eae1686 100644 struct taint_flag { diff --git a/include/linux/pci.h b/include/linux/pci.h -index c69a2cc1f412..27da72fdff38 100644 +index c69a2cc1f412..b9ae5eb4c66d 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h -@@ -1560,6 +1560,22 @@ int pci_add_dynid(struct pci_driver *drv, +@@ -1560,6 +1560,7 @@ int pci_add_dynid(struct pci_driver *drv, unsigned long driver_data); const struct pci_device_id *pci_match_id(const struct pci_device_id *ids, struct pci_dev *dev); + -+#ifdef CONFIG_RHEL_DIFFERENCES -+const struct pci_device_id *pci_hw_deprecated(const struct pci_device_id *ids, -+ struct pci_dev *dev); -+const struct pci_device_id *pci_hw_unmaintained(const struct pci_device_id *ids, -+ struct pci_dev *dev); -+const struct pci_device_id *pci_hw_disabled(const struct pci_device_id *ids, -+ struct pci_dev *dev); -+#else -+static inline const struct pci_device_id *pci_hw_deprecated(const struct pci_device_id *ids, -+ struct pci_dev *dev) { return NULL; } -+static inline const struct pci_device_id *pci_hw_unmaintained(const struct pci_device_id *ids, -+ struct pci_dev *dev) { return NULL; } -+static inline const struct pci_device_id *pci_hw_disabled(const struct pci_device_id *ids, -+ struct pci_dev *dev) {return NULL; } -+#endif int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, int pass); +@@ -2578,6 +2579,10 @@ static inline bool pci_is_thunderbolt_attached(struct pci_dev *pdev) + return false; + } + ++#ifdef CONFIG_RHEL_DIFFERENCES ++bool pci_rh_check_status(struct pci_dev *pci_dev); ++#endif ++ + #if defined(CONFIG_PCIEPORTBUS) || defined(CONFIG_EEH) + void pci_uevent_ers(struct pci_dev *pdev, enum pci_ers_result err_type); + #endif diff --git a/include/linux/rh_kabi.h b/include/linux/rh_kabi.h new file mode 100644 index 000000000000..c7b42c1f1681 @@ -2525,6 +2437,20 @@ index 32828502f09e..b5c27505fa16 100644 #endif /* CONFIG_SECURITY */ #if defined(CONFIG_SECURITY) && defined(CONFIG_WATCH_QUEUE) +diff --git a/init/main.c b/init/main.c +index ad920fac325c..5ff72cc9c7e3 100644 +--- a/init/main.c ++++ b/init/main.c +@@ -1147,6 +1147,9 @@ static bool __init_or_module initcall_blacklisted(initcall_t fn) + */ + strreplace(fn_name, ' ', '\0'); + ++#ifdef CONFIG_RHEL_DIFFERENCES ++ init_rh_check_status(fn_name); ++#endif + list_for_each_entry(entry, &blacklisted_initcalls, next) { + if (!strcmp(fn_name, entry->buf)) { + pr_debug("initcall %s blacklisted\n", fn_name); diff --git a/kernel/Makefile b/kernel/Makefile index 3947122d618b..5b9462a450a1 100644 --- a/kernel/Makefile @@ -2586,7 +2512,7 @@ index a2aef900519c..b872a64be8fd 100644 } diff --git a/kernel/module/main.c b/kernel/module/main.c -index 59b1d067e528..b49c20c89bed 100644 +index 59b1d067e528..0b1c207dcd4f 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -528,6 +528,7 @@ static struct module_attribute modinfo_##field = { \ @@ -2605,6 +2531,18 @@ index 59b1d067e528..b49c20c89bed 100644 &modinfo_initstate, &modinfo_coresize, #ifdef CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC +@@ -2794,6 +2796,11 @@ static int early_mod_check(struct load_info *info, int flags) + return -EPERM; + } + ++#ifdef CONFIG_RHEL_DIFFERENCES ++ if (get_modinfo(info, "intree")) ++ module_rh_check_status(info->name); ++#endif ++ + err = rewrite_section_headers(info, flags); + if (err) + return err; diff --git a/kernel/module/signing.c b/kernel/module/signing.c index a2ff4242e623..f0d2be1ee4f1 100644 --- a/kernel/module/signing.c @@ -2654,14 +2592,10 @@ index 10effe40a3fa..f49ce6660929 100644 /** diff --git a/kernel/rh_messages.c b/kernel/rh_messages.c new file mode 100644 -index 000000000000..018800f35ff2 +index 000000000000..48a6bb6c9b38 --- /dev/null +++ b/kernel/rh_messages.c -@@ -0,0 +1,209 @@ -+#include -+#include -+ -+#define DEV_DESC_LEN 256 +@@ -0,0 +1,414 @@ +/* + * The following functions are used by Red Hat to indicate to users that + * hardware and drivers are unsupported, or have limited support in RHEL major @@ -2679,6 +2613,11 @@ index 000000000000..018800f35ff2 + * related fixes until they are disabled. + */ + ++#include ++#include ++#include ++#include "rh_messages.h" ++ +/** + * mark_hardware_unmaintained() - Mark hardware as unmaintained. + * @driver_name: driver name @@ -2687,13 +2626,16 @@ index 000000000000..018800f35ff2 + * + * Called to notify users that the device will no longer be tested on a routine + * basis and driver code associated with this device is no longer being updated. -+ * Red Hat may fix security-related and critical issues. Support for this device -+ * will be disabled in a future major release and users deploying this device -+ * should plan to replace the device in production systems. ++ * Red Hat may, at their own discretion, fix security-related and critical ++ * issues. Support for this device will be disabled in a future major release ++ * and users deploying this device should plan to replace the device in ++ * production systems. + * + * This function should be used when the driver's usage can be tied to a + * specific hardware device. For example, a network device driver loading on a + * specific device that is no longer maintained by the manufacturer. ++ * ++ * Reserved for Internal Red Hat use only. + */ +void mark_hardware_unmaintained(const char *driver_name, char *fmt, ...) +{ @@ -2702,33 +2644,13 @@ index 000000000000..018800f35ff2 + + va_start(args, fmt); + vsnprintf(device_description, DEV_DESC_LEN, fmt, args); -+ pr_crit("Warning: Unmaintained hardware is detected: %s:%s\n", driver_name, -+ device_description); ++ pr_crit(RH_UNMAINT_HW, ++ driver_name, device_description); + va_end(args); +} +EXPORT_SYMBOL(mark_hardware_unmaintained); + +/** -+ * mark_driver_unmaintained() - Mark a driver as unmaintained. -+ * @driver_name: driver name -+ * -+ * Called to notify users that a driver will no longer be tested on a routine -+ * basis and the driver code is no longer being updated. Red Hat may fix -+ * security-related and critical issues. Support for this driver will be -+ * disabled in a future major release, and users should replace any affected -+ * devices in production systems. -+ * -+ * This function should be used when a driver's usage cannot be tied to a -+ * specific hardware device. For example, a network bonding driver or a higher -+ * level storage layer driver that is no longer maintained upstream. -+ */ -+void mark_driver_unmaintained(const char *driver_name) -+{ -+ pr_crit("Warning: Unmaintained driver is detected: %s\n", driver_name); -+} -+EXPORT_SYMBOL(mark_driver_unmaintained); -+ -+/** + * mark_hardware_deprecated() - Mark hardware as deprecated. + * @driver_name: driver name + * @fmt: format for device description @@ -2742,6 +2664,8 @@ index 000000000000..018800f35ff2 + * This function should be used when the driver's usage can be tied to a + * specific hardware device. For example, a network device driver loading on a + * specific device that is no longer maintained by the manufacturer. ++ * ++ * Reserved for Internal Red Hat use only. + */ +void mark_hardware_deprecated(const char *driver_name, char *fmt, ...) +{ @@ -2750,32 +2674,10 @@ index 000000000000..018800f35ff2 + + va_start(args, fmt); + vsnprintf(device_description, DEV_DESC_LEN, fmt, args); -+ pr_crit("Warning: Deprecated Hardware is detected: %s:%s will not be maintained in a future major release and may be disabled\n", ++ pr_crit(RH_DEPRECATED_HW, + driver_name, device_description); + va_end(args); +} -+EXPORT_SYMBOL(mark_hardware_deprecated); -+ -+/** -+ * mark_driver_deprecated() - Mark a driver as deprecated. -+ * @driver_name: driver name -+ * -+ * Called to notify users that support for this driver is planned to be -+ * unmaintained in a future major release, and will eventually be disabled in a -+ * future major release. This driver should not be used in new production -+ * environments and users should replace any affected devices in production -+ * systems. -+ * -+ * This function should be used when a driver's usage cannot be tied to a -+ * specific hardware device. For example, a network bonding driver or a higher -+ * level storage layer driver that is no longer maintained upstream. -+ */ -+void mark_driver_deprecated(const char *driver_name) -+{ -+ pr_crit("Warning: Deprecated Driver is detected: %s will not be maintained in a future major release and may be disabled\n", -+ driver_name); -+} -+EXPORT_SYMBOL(mark_driver_deprecated); + +/** + * mark_hardware_disabled() - Mark a driver as removed. @@ -2791,19 +2693,199 @@ index 000000000000..018800f35ff2 + * This function should be used when the driver's usage can be tied to a + * specific hardware device. For example, a network device driver loading on a + * specific device that is no longer maintained by the manufacturer. ++ * ++ * Reserved for Internal Red Hat use only. + */ -+void mark_hardware_disabled(const char *driver_name, char *fmt, ...) ++static void mark_hardware_disabled(const char *driver_name, char *fmt, ...) +{ + char device_description[DEV_DESC_LEN]; + va_list args; + + va_start(args, fmt); + vsnprintf(device_description, DEV_DESC_LEN, fmt, args); -+ pr_crit("Warning: Disabled Hardware is detected: %s:%s is no longer enabled in this release.\n", ++ pr_crit(RH_DISABLED_HW, + driver_name, device_description); + va_end(args); +} -+EXPORT_SYMBOL(mark_hardware_disabled); ++ ++#ifdef CONFIG_PCI ++/** ++ * pci_hw_deprecated() - Mark a PCI device deprecated. ++ * @dev: the PCI device structure to match against ++ * ++ * Called to check if this @dev is in the list of deprecated devices. ++ * ++ * Reserved for Internal Red Hat use only. ++ */ ++static void pci_hw_deprecated(struct pci_dev *dev) ++{ ++ const struct pci_device_id *ret = pci_match_id(rh_deprecated_pci_devices, dev); ++ ++ if (!ret) ++ return; ++ ++ mark_hardware_deprecated(dev_driver_string(&dev->dev), "%04X:%04X @ %s", ++ dev->device, dev->vendor, pci_name(dev)); ++} ++ ++/** ++ * pci_hw_unmaintained() - Mark a PCI device unmaintained. ++ * @dev: the PCI device structure to match against ++ * ++ * Called to check if this @dev is in the list of unmaintained devices. ++ * ++ * Reserved for Internal Red Hat use only. ++ */ ++static void pci_hw_unmaintained(struct pci_dev *dev) ++{ ++ const struct pci_device_id *ret = pci_match_id(rh_unmaintained_pci_devices, dev); ++ ++ if (!ret) ++ return; ++ ++ mark_hardware_unmaintained(dev_driver_string(&dev->dev), "%04X:%04X @ %s", ++ dev->device, dev->vendor, pci_name(dev)); ++} ++ ++/** ++ * pci_hw_disabled() - Mark a PCI device disabled. ++ * @dev: the PCI device structure to match against ++ * ++ * Called to check if this @dev is in the list of disabled devices. ++ * ++ * Reserved for Internal Red Hat use only. ++ */ ++static bool pci_hw_disabled(struct pci_dev *dev) ++{ ++ const struct pci_device_id *ret = pci_match_id(rh_disabled_pci_devices, dev); ++ ++ if (!ret) ++ return false; ++ ++ mark_hardware_disabled(dev_driver_string(&dev->dev), "%04X:%04X @ %s", ++ dev->device, dev->vendor, pci_name(dev)); ++ return true; ++} ++#endif ++ ++/** ++ * driver_unmaintained() - check to see if a driver is unmaintained ++ * @module_name: module name ++ * ++ * Called to notify users that a driver will no longer be tested on a routine ++ * basis and the driver code is no longer being updated. Red Hat may fix ++ * security-related and critical issues. Support for this driver will be ++ * disabled in a future major release, and users should replace any affected ++ * devices in production systems. ++ * ++ * This function should be used when a driver's usage cannot be tied to a ++ * specific hardware device. For example, a network bonding driver or a higher ++ * level storage layer driver that is no longer maintained upstream. ++ * ++ * Reserved for Internal Red Hat use only. ++ */ ++static void driver_unmaintained(const char* module_name) ++{ ++ int i = 0; ++ ++ while (rh_unmaintained_drivers[i]) { ++ if (strcmp(rh_unmaintained_drivers[i], module_name) == 0) { ++ pr_crit(RH_UNMAINT_DR, module_name); ++ return; ++ } ++ i++; ++ } ++} ++ ++/** ++ * driver_deprecated() - check to see if a driver is deprecated ++ * @driver_name: module name ++ * ++ * Called to notify users that support for this driver is planned to be ++ * unmaintained in a future major release, and will eventually be disabled in a ++ * future major release. This driver should not be used in new production ++ * environments and users should replace any affected devices in production ++ * systems. ++ * ++ * This function should be used when a driver's usage cannot be tied to a ++ * specific hardware device. For example, a network bonding driver or a higher ++ * level storage layer driver that is no longer maintained upstream. ++ * ++ * Reserved for Internal Red Hat use only. ++ */ ++static void driver_deprecated(const char* module_name) ++{ ++ int i = 0; ++ ++ while (rh_deprecated_drivers[i]) { ++ if (strcmp(rh_deprecated_drivers[i], module_name) == 0) { ++ pr_crit(RH_DEPRECATED_DR, module_name); ++ return; ++ } ++ i++; ++ } ++} ++ ++/* There is no driver_disabled() function. Disabled drivers are configured off ;). */ ++ ++/** ++ * init_fn_unmaintained - check to see if a built-in driver is unmaintained. ++ * @fn_name: module's module_init function name ++ * ++ * Called to notify users that a built-in driver will no longer be tested on a routine ++ * basis and the built-in driver code is no longer being updated. Red Hat may fix ++ * security-related and critical issues. Support for this built-in driver will be ++ * disabled in a future major release, and users should replace any affected ++ * devices in production systems. ++ * ++ * This function should be used when a built-in driver's usage cannot be tied to a ++ * specific hardware device. For example, a network bonding driver or a higher ++ * level storage layer driver that is no longer maintained upstream. ++ * ++ * Reserved for Internal Red Hat use only. ++ */ ++ ++static void init_fn_unmaintained(char* fn_name) ++{ ++ int i = 0; ++ ++ while (rh_unmaintained_init_fns[i]) { ++ if (strcmp(rh_unmaintained_init_fns[i], fn_name) == 0) { ++ pr_crit(RH_UNMAINT_DR, fn_name); ++ return; ++ } ++ i++; ++ } ++} ++ ++/** ++ * init_fn_deprecated() - check to see if a built-in driver is deprecated ++ * @fn_name: module's module_init function name ++ * ++ * Called to notify users that support for this built-in driver is planned to be ++ * unmaintained in a future major release, and will eventually be disabled in a ++ * future major release. This driver should not be used in new production ++ * environments and users should replace any affected devices in production ++ * systems. ++ * ++ * This function should be used when a built-in driver's usage cannot be tied to a ++ * specific hardware device. For example, a network bonding driver or a higher ++ * level storage layer driver that is no longer maintained upstream. ++ * ++ * Reserved for Internal Red Hat use only. ++ */ ++static void init_fn_deprecated(char* fn_name) ++{ ++ int i = 0; ++ ++ while (rh_deprecated_init_fns[i]) { ++ if (strcmp(rh_deprecated_init_fns[i], fn_name) == 0) { ++ pr_crit(RH_DEPRECATED_DR, fn_name); ++ return; ++ } ++ i++; ++ } ++} + +/** + * mark_tech_preview() - Mark driver or kernel subsystem as 'Tech Preview' @@ -2815,6 +2897,8 @@ index 000000000000..018800f35ff2 + * minor release. The next RHEL minor release may contain full support for + * this driver. Red Hat does not guarantee that bugs reported against this + * driver or subsystem will be resolved. ++ * ++ * Reserved for Internal Red Hat use only. + */ +void mark_tech_preview(const char *msg, struct module *mod) +{ @@ -2827,9 +2911,7 @@ index 000000000000..018800f35ff2 + str = mod->name; +#endif + -+ pr_warn("TECH PREVIEW: %s may not be fully supported.\n" -+ "Please review provided documentation for limitations.\n", -+ (str ? str : "kernel")); ++ pr_warn(RH_TECH_PREVIEW, (str ? str : "kernel")); + add_taint(TAINT_AUX, LOCKDEP_STILL_OK); +#ifdef CONFIG_MODULES + if (mod) @@ -2842,31 +2924,207 @@ index 000000000000..018800f35ff2 + * mark_partner_supported() - Mark driver or kernel subsystem as 'Partner Supported' + * @msg: Driver or kernel subsystem name + * -+ * Called to clarify the support status of a driver. This does TAINT the -+ * kernel. Calling this function indicates that the driver or subsystem is -+ * supported by one of our partners and not by Red Hat directly. ++ * Called to minimize the support status of a new driver. This does TAINT the ++ * kernel. Calling this function indicates that the driver or subsystem ++ * is not supported directly by Red Hat but by a partner engineer. ++ * ++ * Reserved for Internal Red Hat use only. + */ +void mark_partner_supported(const char *msg, struct module *mod) +{ -+ const char *str = NULL; ++ const char *str = NULL; + -+ if (msg) -+ str = msg; ++ if (msg) ++ str = msg; +#ifdef CONFIG_MODULES + else if (mod) + str = mod->name; +#endif + -+ pr_warn("Notice: %s is a Partner Supported GPL module and not supported directly by Red Hat.\n" -+ "Please contact your provider for support.\n", -+ (str ? str : "kernel")); -+ add_taint(TAINT_PARTNER_SUPPORTED, LOCKDEP_STILL_OK); ++ pr_warn(RH_PARTNER_SUPPORTED, (str ? str : "kernel")); ++ add_taint(TAINT_PARTNER_SUPPORTED, LOCKDEP_STILL_OK); +#ifdef CONFIG_MODULES -+ if (mod) -+ mod->taints |= (1U << TAINT_PARTNER_SUPPORTED); ++ if (mod) ++ mod->taints |= (1U << TAINT_PARTNER_SUPPORTED); +#endif +} +EXPORT_SYMBOL(mark_partner_supported); ++ ++/* ++ * ++ * Functions called by 'main' kernel code. ++ * ++ */ ++ ++#ifdef CONFIG_PCI ++/** ++ * pci_rh_check_status - checks the status of a PCI device. ++ * @pci_dev: PCI device to be examined ++ * ++ * This function is called by the PCI driver subsystem to check the status of a ++ * PCI device. ++ * ++ * This function returns true if the PCI device is disabled, and false otherwise. ++ * ++ * Reserved for Internal Red Hat use only. ++ */ ++bool pci_rh_check_status(struct pci_dev *pci_dev) ++{ ++ if (pci_dev->driver->driver.owner != NULL) { ++ if (!test_bit(TAINT_OOT_MODULE, &pci_dev->driver->driver.owner->taints)) { ++ pci_hw_unmaintained(pci_dev); ++ pci_hw_deprecated(pci_dev); ++ return pci_hw_disabled(pci_dev); ++ } ++ } ++ return false; ++} ++#endif ++ ++/** module_rh_check_status - checks the status of a module. ++ * @module_name: Name of module to be examined ++ * ++ * This function is called by the module loading code to check the status of a ++ * module. ++ * ++ * Reserved for Internal Red Hat use only. ++ */ ++void module_rh_check_status(const char * module_name) ++{ ++ driver_unmaintained(module_name); ++ driver_deprecated(module_name); ++} ++ ++/** ++ * init_rh_check_status - checks the status of a built-in module. ++ * @fn_name: init function of module to be examined ++ * ++ * This function is called by the init code to check the status of a built-in module. ++ * When a module is built-in, the module_init() function is converted into an initcall. ++ * The initcall is the called during boot with the other system initcalls. ++ * ++ * Reserved for Internal Red Hat use only. ++ */ ++void init_rh_check_status(char *fn_name) ++{ ++ init_fn_deprecated(fn_name); ++ init_fn_unmaintained(fn_name); ++} +diff --git a/kernel/rh_messages.h b/kernel/rh_messages.h +new file mode 100644 +index 000000000000..616692b1ac11 +--- /dev/null ++++ b/kernel/rh_messages.h +@@ -0,0 +1,109 @@ ++/* ++ * WARNING: This file is auto-generated by an internal Red Hat script and, ++ * in general, should not be modified by hand. ++ */ ++ ++/* ++ * The following tables are used by Red Hat to define what hardware and drivers ++ * are unsupported, or have limited support in RHEL major and minor releases. ++ * ++ * Generally, the process of disabling a driver or device in RHEL requires the ++ * driver or device to be marked as 'deprecated' in all existing releases, and ++ * then either 'unmaintained' or 'disabled' in a future release. ++ * ++ * In general, deprecated and unmaintained drivers continue to receive security ++ * related fixes until they are disabled. ++ */ ++ ++#ifndef __RH_MESSAGES_H ++#define __RH_MESSAGES_H ++ ++#include ++#include ++ ++#define DEV_DESC_LEN 256 ++ ++#define RH_UNMAINT_HW "Warning: Unmaintained Hardware is detected: %s:%s\n" ++ ++#define RH_UNMAINT_DR "Warning: Unmaintained driver is detected: %s\n" ++ ++#define RH_DEPRECATED_HW "Warning: Deprecated Hardware is detected: %s:%s " \ ++ "will not be maintained in a future major release " \ ++ "and may be disabled\n" ++ ++#define RH_DEPRECATED_DR "Warning: Deprecated Driver is detected: %s will " \ ++ "not be maintained in a future major release and " \ ++ "may be disabled\n" ++ ++#define RH_DISABLED_HW "Warning: Disabled Hardware is detected: %s:%s is " \ ++ "no longer enabled in this release.\n" ++ ++#define RH_TECH_PREVIEW "TECH PREVIEW: %s may not be fully supported.\n" \ ++ "Please review provided documentation for " \ ++ "limitations.\n" ++ ++#define RH_PARTNER_SUPPORTED "Warning: %s is a Partner supported GPL " \ ++ "module and not supported directly by Red Hat.\n" ++ ++#if RHEL_MAJOR == 9 ++ ++static const char *rh_deprecated_drivers[] = { ++ 0 /* Terminating entry */ ++}; ++ ++static const char *rh_deprecated_init_fns[] = { ++ 0 /* Terminating entry */ ++}; ++ ++static const char *rh_unmaintained_drivers[] = { ++ 0 /* Terminating entry */ ++}; ++ ++static const char *rh_unmaintained_init_fns[] = { ++ 0 /* Terminating entry */ ++}; ++ ++static const struct pci_device_id rh_deprecated_pci_devices[] = { ++ {0} /* Terminating entry */ ++}; ++ ++static const struct pci_device_id rh_disabled_pci_devices[] = { ++ {0} /* Terminating entry */ ++}; ++ ++static const struct pci_device_id rh_unmaintained_pci_devices[] = { ++ {0} /* Terminating entry */ ++}; ++ ++#else /* RHEL-10 */ ++ ++static const char *rh_deprecated_drivers[] = { ++ 0 /* Terminating entry */ ++}; ++ ++static const char *rh_deprecated_init_fns[] = { ++ 0 /* Terminating entry */ ++}; ++ ++static const char *rh_unmaintained_drivers[] = { ++ 0 /* Terminating entry */ ++}; ++ ++static const char *rh_unmaintained_init_fns[] = { ++ 0 /* Terminating entry */ ++}; ++ ++static const struct pci_device_id rh_deprecated_pci_devices[] = { ++ {0} /* Terminating entry */ ++}; ++ ++static const struct pci_device_id rh_disabled_pci_devices[] = { ++ {0} /* Terminating entry */ ++}; ++ ++static const struct pci_device_id rh_unmaintained_pci_devices[] = { ++ {0} /* Terminating entry */ ++}; ++#endif /* RHEL_MAJOR */ ++ ++#endif /* __RH_MESSAGES_H */ diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index b29b29707f10..e176487ebf1f 100644 --- a/scripts/mod/modpost.c diff --git a/sources b/sources index 9b28a0196..1a0f9d9ca 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (linux-6.5-rc6.tar.xz) = e5ac3513eb366e10cbf27c1b7994fa830626aa20c5fd6ec261b6aee7267c22000ecc31b0ec94d154c864bc361eca5539cad08006f96d6312fd3038dd9727323a -SHA512 (kernel-abi-stablelists-6.5.0.tar.bz2) = 6107f982f8ee7bb003c3338f39f7be48ea12e7d14fcc99fc193b4ca7e100409de12320451fab7b806b24d661a1937dd53e6a36093563bd3b8405b0834d627add -SHA512 (kernel-kabi-dw-6.5.0.tar.bz2) = 2705fa93054d143dce4ee74cfe2e3906c19b97ec7118ad1a95dd18c999929dd66aab267dbdfcf5be71988de0eb5073ce52169d62dd30e491475fab6bddc48a5a +SHA512 (linux-6.5-rc6-27-g91aa6c412d7f.tar.xz) = 0b12eafe62eac159bad74bebcf3e9201bf6a6a3376a69bf508a293c622ac9f5cb1a9bc32430a7fb551d4f9a2bb0b96f0ae0923856b1f919b1021c22b5a95d212 +SHA512 (kernel-abi-stablelists-6.5.0.tar.bz2) = 4237bd59883c06ceb29d3f119260ceff32a22402da3e0e90b181584bbee56af585cd8a1ae9f27937dbb51afd895b507cbe2bf4887812fe64fb1823b5b3ea6d4f +SHA512 (kernel-kabi-dw-6.5.0.tar.bz2) = 3c9b4444bf1fe89cb4a08cfc05999e2b6c4233c254caad3f737e93b7dcfb0b5e6634a284ac368f5c0155564865d36f06d55575c419c03745fbe221ab6a942b3b