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: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <CADtm3G6VVthsOX7d_LHNtFdCvw+oiku=ATL8J-cBHBpLTVrpyg@mail.gmail.com>
Date:   Mon, 2 Jan 2017 17:43:36 -0800
From:   Gregory Fong <gregory.0xf0@...il.com>
To:     linuxppc-dev@...ts.ozlabs.org
Cc:     "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: mpic IRQ_TYPE_BOTH handling

Hi all,

In arch/powerpc/sysdev/mpic.c , it looks like IRQ_TYPE_EDGE_BOTH is
handled the same way as IRQ_TYPE_EDGE_FALLING:

static unsigned int mpic_type_to_vecpri(struct mpic *mpic, unsigned int type)
{
        /* Now convert sense value */
        switch(type & IRQ_TYPE_SENSE_MASK) {
        case IRQ_TYPE_EDGE_RISING:
                return MPIC_INFO(VECPRI_SENSE_EDGE) |
                       MPIC_INFO(VECPRI_POLARITY_POSITIVE);
        case IRQ_TYPE_EDGE_FALLING:
        case IRQ_TYPE_EDGE_BOTH:
                return MPIC_INFO(VECPRI_SENSE_EDGE) |
                       MPIC_INFO(VECPRI_POLARITY_NEGATIVE);
        case IRQ_TYPE_LEVEL_HIGH:
                return MPIC_INFO(VECPRI_SENSE_LEVEL) |
                       MPIC_INFO(VECPRI_POLARITY_POSITIVE);
        case IRQ_TYPE_LEVEL_LOW:
        default:
                return MPIC_INFO(VECPRI_SENSE_LEVEL) |
                       MPIC_INFO(VECPRI_POLARITY_NEGATIVE);
        }
}

If IRQ_TYPE_EDGE_BOTH is unsupported, shouldn't we be returning an
error, instead of silently setting to use IRQ_TYPE_EDGE_FALLING?
Something like the following (sorry if the diff wraps weirdly, on
webmail at the moment):

----8<----
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
index b9aac95..5867ea2 100644
--- a/arch/powerpc/sysdev/mpic.c
+++ b/arch/powerpc/sysdev/mpic.c
@@ -876,6 +876,9 @@ int mpic_set_irq_type(struct irq_data *d, unsigned
int flow_type)
        if (src >= mpic->num_sources)
                return -EINVAL;

+       if (flow_type & IRQ_TYPE_SENSE_MASK == IRQ_TYPE_EDGE_BOTH)
+               return -EINVAL;
+
        vold = mpic_irq_read(src, MPIC_INFO(IRQ_VECTOR_PRI));

        /* We don't support "none" type */
---->8----

Thanks,
Gregory

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ