public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Marc Zyngier <maz@kernel.org>
To: Tomas Krcka <tomas.krcka@gmail.com>
Cc: linux-arm-kernel@lists.infradead.org, nh-open-source@amazon.com,
	Tomas Krcka <krckatom@amazon.de>,
	Thomas Gleixner <tglx@linutronix.de>,
	Hagar Hemdan <hagarhem@amazon.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] irqchip/gic-v3-its: fix raw_local_irq_restore() called with IRQs enabled
Date: Mon, 30 Dec 2024 14:28:12 +0000	[thread overview]
Message-ID: <86h66lp7nn.wl-maz@kernel.org> (raw)
In-Reply-To: <20241230134903.84613-1-krckatom@amazon.de>

Hi Tomas,

On Mon, 30 Dec 2024 13:49:03 +0000,
Tomas Krcka <tomas.krcka@gmail.com> wrote:
> 
> The following call-chain leads to misuse of spinlock_irq
> when spinlock_irqsave was hold.
> 
> irq_set_vcpu_affinity
>   -> irq_get_desc_lock (spinlock_irqsave)
>    -> its_irq_set_vcpu_affinity
>     -> guard(raw_spin_lock_irq) <--- this enables interrupts
>   -> irq_put_desc_unlock // <--- WARN IRQs enabled

Urgh. Nice catch. It really should have been either raw_spin_lock or
the _irqsave variant, but not the _irq variant which should really
never be used outside of the core code. I guess this was never really
tested when rewritten at commit time...

> Fix the issue by using guard(raw_spinlock), since the function is
> already called with irqsave and raw_spin_lock was used before the commit
> b97e8a2f7130 ("irqchip/gic-v3-its: Fix potential race condition in its_vlpi_prop_update()")
> introducing the guard as well.
> 
> This was discovered through the lock debugging, and the corresponding
> log is as follows:
> 
> raw_local_irq_restore() called with IRQs enabled
> WARNING: CPU: 38 PID: 444 at kernel/locking/irqflag-debug.c:10 warn_bogus_irq_restore+0x2c/0x38
>  Call trace:
>   warn_bogus_irq_restore+0x2c/0x38
>    _raw_spin_unlock_irqrestore+0x68/0x88
>    __irq_put_desc_unlock+0x1c/0x48
>    irq_set_vcpu_affinity+0x74/0xc0
>    its_map_vlpi+0x44/0x88
>    kvm_vgic_v4_set_forwarding+0x148/0x230
>    kvm_arch_irq_bypass_add_producer+0x20/0x28
>    __connect+0x98/0xb8
>    irq_bypass_register_consumer+0x150/0x178
>    kvm_irqfd+0x6dc/0x744
>    kvm_vm_ioctl+0xe44/0x16b0
> 
> Fixes: b97e8a2f7130 ("irqchip/gic-v3-its: Fix potential race condition in its_vlpi_prop_update()")
> Signed-off-by: Tomas Krcka <krckatom@amazon.de>

Two problems here:

- there is no "From Tomas Krcka <krckatom@amazon.de>" at the beginning
  of the patch, which is needed since you are posting from a gmail.com
  address

- there is no SoB using your gmail.com address, which is needed since
  this patch appears to be from your Amazon doppelganger.

So either you post this patch from your amazon.de email, or you add
the two missing pieces of information that are required.

> ---
>  drivers/irqchip/irq-gic-v3-its.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
> index 92244cfa0464..8c3ec5734f1e 100644
> --- a/drivers/irqchip/irq-gic-v3-its.c
> +++ b/drivers/irqchip/irq-gic-v3-its.c
> @@ -2045,7 +2045,7 @@ static int its_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu_info)
>  	if (!is_v4(its_dev->its))
>  		return -EINVAL;
>  
> -	guard(raw_spinlock_irq)(&its_dev->event_map.vlpi_lock);
> +	guard(raw_spinlock)(&its_dev->event_map.vlpi_lock);

This otherwise looks good to me. Please repost this with the above
issues fixed, and the following tags:

Reviewed-by: Marc Zyngier <maz@kernel.org>
Cc: stable@vger.kernel.org

Thanks,

	M.

-- 
Without deviation from the norm, progress is not possible.

  reply	other threads:[~2024-12-30 14:28 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-30 13:49 [PATCH] irqchip/gic-v3-its: fix raw_local_irq_restore() called with IRQs enabled Tomas Krcka
2024-12-30 14:28 ` Marc Zyngier [this message]
2024-12-30 15:10   ` Krcka, Tomas
2024-12-30 15:21   ` David Woodhouse
2024-12-30 17:09     ` Marc Zyngier
2024-12-30 18:01       ` David Woodhouse

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=86h66lp7nn.wl-maz@kernel.org \
    --to=maz@kernel.org \
    --cc=hagarhem@amazon.com \
    --cc=krckatom@amazon.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nh-open-source@amazon.com \
    --cc=tglx@linutronix.de \
    --cc=tomas.krcka@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox