lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:	Thu, 15 Nov 2012 00:52:42 +0800
From:	Chuansheng Liu <chuansheng.liu@...el.com>
To:	mingo@...hat.com, tglx@...utronix.de
Cc:	x86@...nel.org, linux-kernel@...r.kernel.org,
	chuansheng.liu@...el.com
Subject: [PATCH] x86/irq,io_apic: Fix wrong unmask_ioapic calling when the
 irq is masked


There is one typical case will cause this issue, that is:
One io-apic interrupt with ONE_SHOT and threaded, when interrupt is coming:
handle_fasteoi_irq()
--> mask_irq(desc)
    ...
    desc->irq_data.chip->irq_eoi(&desc->irq_data)[ack_apic_level]
    --> ioapic_irqd_mask()
        ...
        ioapic_irqd_unmask()

After that, the irq will be in unmasked state.

It will break the ONE_SHOT and threaded irq, and brings some unwanted issues.
Here adding the irqd_irq_masked() condition to know if unmasking action is
needed.

Signed-off-by: liu chuansheng <chuansheng.liu@...el.com>
---
 arch/x86/kernel/apic/io_apic.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index 1817fa9..d963e76 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -2479,7 +2479,8 @@ static inline void ioapic_irqd_unmask(struct irq_data *data,
 		 */
 		if (!io_apic_level_ack_pending(cfg))
 			irq_move_masked_irq(data);
-		unmask_ioapic(cfg);
+		if (!irqd_irq_masked(data))
+			unmask_ioapic(cfg);
 	}
 }
 #else
-- 
1.7.0.4



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ