From: Greg Kroah-Hartman Date: Wed, 14 Dec 2022 16:03:00 +0000 (+0100) Subject: 6.0-stable patches X-Git-Tag: v5.4.228~39 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=af37f7d431c146d4f726ce9548fba439015ca2c6;p=thirdparty%2Fkernel%2Fstable-queue.git 6.0-stable patches added patches: rtc-cmos-fix-event-handler-registration-ordering-issue.patch rtc-cmos-fix-wake-alarm-breakage.patch x86-vdso-conditionally-export-__vdso_sgx_enter_enclave.patch --- diff --git a/queue-6.0/rtc-cmos-fix-event-handler-registration-ordering-issue.patch b/queue-6.0/rtc-cmos-fix-event-handler-registration-ordering-issue.patch new file mode 100644 index 00000000000..c76c79b61cd --- /dev/null +++ b/queue-6.0/rtc-cmos-fix-event-handler-registration-ordering-issue.patch @@ -0,0 +1,118 @@ +From 4919d3eb2ec0ee364f7e3cf2d99646c1b224fae8 Mon Sep 17 00:00:00 2001 +From: "Rafael J. Wysocki" +Date: Wed, 12 Oct 2022 20:07:01 +0200 +Subject: rtc: cmos: Fix event handler registration ordering issue + +From: Rafael J. Wysocki + +commit 4919d3eb2ec0ee364f7e3cf2d99646c1b224fae8 upstream. + +Because acpi_install_fixed_event_handler() enables the event +automatically on success, it is incorrect to call it before the +handler routine passed to it is ready to handle events. + +Unfortunately, the rtc-cmos driver does exactly the incorrect thing +by calling cmos_wake_setup(), which passes rtc_handler() to +acpi_install_fixed_event_handler(), before cmos_do_probe(), because +rtc_handler() uses dev_get_drvdata() to get to the cmos object +pointer and the driver data pointer is only populated in +cmos_do_probe(). + +This leads to a NULL pointer dereference in rtc_handler() on boot +if the RTC fixed event happens to be active at the init time. + +To address this issue, change the initialization ordering of the +driver so that cmos_wake_setup() is always called after a successful +cmos_do_probe() call. + +While at it, change cmos_pnp_probe() to call cmos_do_probe() after +the initial if () statement used for computing the IRQ argument to +be passed to cmos_do_probe() which is cleaner than calling it in +each branch of that if () (local variable "irq" can be of type int, +because it is passed to that function as an argument of type int). + +Note that commit 6492fed7d8c9 ("rtc: rtc-cmos: Do not check +ACPI_FADT_LOW_POWER_S0") caused this issue to affect a larger number +of systems, because previously it only affected systems with +ACPI_FADT_LOW_POWER_S0 set, but it is present regardless of that +commit. + +Fixes: 6492fed7d8c9 ("rtc: rtc-cmos: Do not check ACPI_FADT_LOW_POWER_S0") +Fixes: a474aaedac99 ("rtc-cmos: move wake setup from ACPI glue into RTC driver") +Link: https://lore.kernel.org/linux-acpi/20221010141630.zfzi7mk7zvnmclzy@techsingularity.net/ +Reported-by: Mel Gorman +Signed-off-by: Rafael J. Wysocki +Reviewed-by: Bjorn Helgaas +Tested-by: Mel Gorman +Link: https://lore.kernel.org/r/5629262.DvuYhMxLoT@kreacher +Signed-off-by: Alexandre Belloni +Signed-off-by: Greg Kroah-Hartman +--- + drivers/rtc/rtc-cmos.c | 29 +++++++++++++++++++---------- + 1 file changed, 19 insertions(+), 10 deletions(-) + +--- a/drivers/rtc/rtc-cmos.c ++++ b/drivers/rtc/rtc-cmos.c +@@ -1352,10 +1352,10 @@ static void cmos_check_acpi_rtc_status(s + + static int cmos_pnp_probe(struct pnp_dev *pnp, const struct pnp_device_id *id) + { +- cmos_wake_setup(&pnp->dev); ++ int irq, ret; + + if (pnp_port_start(pnp, 0) == 0x70 && !pnp_irq_valid(pnp, 0)) { +- unsigned int irq = 0; ++ irq = 0; + #ifdef CONFIG_X86 + /* Some machines contain a PNP entry for the RTC, but + * don't define the IRQ. It should always be safe to +@@ -1364,13 +1364,17 @@ static int cmos_pnp_probe(struct pnp_dev + if (nr_legacy_irqs()) + irq = RTC_IRQ; + #endif +- return cmos_do_probe(&pnp->dev, +- pnp_get_resource(pnp, IORESOURCE_IO, 0), irq); + } else { +- return cmos_do_probe(&pnp->dev, +- pnp_get_resource(pnp, IORESOURCE_IO, 0), +- pnp_irq(pnp, 0)); ++ irq = pnp_irq(pnp, 0); + } ++ ++ ret = cmos_do_probe(&pnp->dev, pnp_get_resource(pnp, IORESOURCE_IO, 0), irq); ++ if (ret) ++ return ret; ++ ++ cmos_wake_setup(&pnp->dev); ++ ++ return 0; + } + + static void cmos_pnp_remove(struct pnp_dev *pnp) +@@ -1454,10 +1458,9 @@ static inline void cmos_of_init(struct p + static int __init cmos_platform_probe(struct platform_device *pdev) + { + struct resource *resource; +- int irq; ++ int irq, ret; + + cmos_of_init(pdev); +- cmos_wake_setup(&pdev->dev); + + if (RTC_IOMAPPED) + resource = platform_get_resource(pdev, IORESOURCE_IO, 0); +@@ -1467,7 +1470,13 @@ static int __init cmos_platform_probe(st + if (irq < 0) + irq = -1; + +- return cmos_do_probe(&pdev->dev, resource, irq); ++ ret = cmos_do_probe(&pdev->dev, resource, irq); ++ if (ret) ++ return ret; ++ ++ cmos_wake_setup(&pdev->dev); ++ ++ return 0; + } + + static int cmos_platform_remove(struct platform_device *pdev) diff --git a/queue-6.0/rtc-cmos-fix-wake-alarm-breakage.patch b/queue-6.0/rtc-cmos-fix-wake-alarm-breakage.patch new file mode 100644 index 00000000000..d7a7c018fca --- /dev/null +++ b/queue-6.0/rtc-cmos-fix-wake-alarm-breakage.patch @@ -0,0 +1,86 @@ +From 0782b66ed2fbb035dda76111df0954515e417b24 Mon Sep 17 00:00:00 2001 +From: "Rafael J. Wysocki" +Date: Tue, 18 Oct 2022 18:09:31 +0200 +Subject: rtc: cmos: Fix wake alarm breakage + +From: Rafael J. Wysocki + +commit 0782b66ed2fbb035dda76111df0954515e417b24 upstream. + +Commit 4919d3eb2ec0 ("rtc: cmos: Fix event handler registration +ordering issue") overlooked the fact that cmos_do_probe() depended +on the preparations carried out by cmos_wake_setup() and the wake +alarm stopped working after the ordering of them had been changed. + +Address this by partially reverting commit 4919d3eb2ec0 so that +cmos_wake_setup() is called before cmos_do_probe() again and moving +the rtc_wake_setup() invocation from cmos_wake_setup() directly to the +callers of cmos_do_probe() where it will happen after a successful +completion of the latter. + +Fixes: 4919d3eb2ec0 ("rtc: cmos: Fix event handler registration ordering issue") +Reported-by: Zhang Rui +Reported-by: Todd Brandt +Signed-off-by: Rafael J. Wysocki +Link: https://lore.kernel.org/r/5887691.lOV4Wx5bFT@kreacher +Signed-off-by: Alexandre Belloni +Signed-off-by: Greg Kroah-Hartman +--- + drivers/rtc/rtc-cmos.c | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +--- a/drivers/rtc/rtc-cmos.c ++++ b/drivers/rtc/rtc-cmos.c +@@ -1233,6 +1233,9 @@ static u32 rtc_handler(void *context) + + static inline void rtc_wake_setup(struct device *dev) + { ++ if (acpi_disabled) ++ return; ++ + acpi_install_fixed_event_handler(ACPI_EVENT_RTC, rtc_handler, dev); + /* + * After the RTC handler is installed, the Fixed_RTC event should +@@ -1286,7 +1289,6 @@ static void cmos_wake_setup(struct devic + + use_acpi_alarm_quirks(); + +- rtc_wake_setup(dev); + acpi_rtc_info.wake_on = rtc_wake_on; + acpi_rtc_info.wake_off = rtc_wake_off; + +@@ -1354,6 +1356,8 @@ static int cmos_pnp_probe(struct pnp_dev + { + int irq, ret; + ++ cmos_wake_setup(&pnp->dev); ++ + if (pnp_port_start(pnp, 0) == 0x70 && !pnp_irq_valid(pnp, 0)) { + irq = 0; + #ifdef CONFIG_X86 +@@ -1372,7 +1376,7 @@ static int cmos_pnp_probe(struct pnp_dev + if (ret) + return ret; + +- cmos_wake_setup(&pnp->dev); ++ rtc_wake_setup(&pnp->dev); + + return 0; + } +@@ -1461,6 +1465,7 @@ static int __init cmos_platform_probe(st + int irq, ret; + + cmos_of_init(pdev); ++ cmos_wake_setup(&pdev->dev); + + if (RTC_IOMAPPED) + resource = platform_get_resource(pdev, IORESOURCE_IO, 0); +@@ -1474,7 +1479,7 @@ static int __init cmos_platform_probe(st + if (ret) + return ret; + +- cmos_wake_setup(&pdev->dev); ++ rtc_wake_setup(&pdev->dev); + + return 0; + } diff --git a/queue-6.0/x86-vdso-conditionally-export-__vdso_sgx_enter_enclave.patch b/queue-6.0/x86-vdso-conditionally-export-__vdso_sgx_enter_enclave.patch new file mode 100644 index 00000000000..6b36feee5bc --- /dev/null +++ b/queue-6.0/x86-vdso-conditionally-export-__vdso_sgx_enter_enclave.patch @@ -0,0 +1,42 @@ +From 45be2ad007a9c6bea70249c4cf3e4905afe4caeb Mon Sep 17 00:00:00 2001 +From: Nathan Chancellor +Date: Tue, 8 Nov 2022 17:03:07 -0700 +Subject: x86/vdso: Conditionally export __vdso_sgx_enter_enclave() + +From: Nathan Chancellor + +commit 45be2ad007a9c6bea70249c4cf3e4905afe4caeb upstream. + +Recently, ld.lld moved from '--undefined-version' to +'--no-undefined-version' as the default, which breaks building the vDSO +when CONFIG_X86_SGX is not set: + + ld.lld: error: version script assignment of 'LINUX_2.6' to symbol '__vdso_sgx_enter_enclave' failed: symbol not defined + +__vdso_sgx_enter_enclave is only included in the vDSO when +CONFIG_X86_SGX is set. Only export it if it will be present in the final +object, which clears up the error. + +Fixes: 8466436952017 ("x86/vdso: Implement a vDSO for Intel SGX enclave call") +Signed-off-by: Nathan Chancellor +Signed-off-by: Thomas Gleixner +Reviewed-by: Nick Desaulniers +Link: https://github.com/ClangBuiltLinux/linux/issues/1756 +Link: https://lore.kernel.org/r/20221109000306.1407357-1-nathan@kernel.org +Signed-off-by: Greg Kroah-Hartman +--- + arch/x86/entry/vdso/vdso.lds.S | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/arch/x86/entry/vdso/vdso.lds.S ++++ b/arch/x86/entry/vdso/vdso.lds.S +@@ -27,7 +27,9 @@ VERSION { + __vdso_time; + clock_getres; + __vdso_clock_getres; ++#ifdef CONFIG_X86_SGX + __vdso_sgx_enter_enclave; ++#endif + local: *; + }; + }