• Dave Martin's avatar
    ARM: 8687/1: signal: Fix unparseable iwmmxt_sigframe in uc_regspace[] · ce184a0d
    Dave Martin authored
    In kernels with CONFIG_IWMMXT=y running on non-iWMMXt hardware, the
    signal frame can be left partially uninitialised in such a way
    that userspace cannot parse uc_regspace[] safely.  In particular,
    this means that the VFP registers cannot be located reliably in the
    signal frame when a multi_v7_defconfig kernel is run on the
    majority of platforms.
    
    The cause is that the uc_regspace[] is laid out statically based on
    the kernel config, but the decision of whether to save/restore the
    iWMMXt registers must be a runtime decision.
    
    To minimise breakage of software that may assume a fixed layout,
    this patch emits a dummy block of the same size as iwmmxt_sigframe,
    for non-iWMMXt threads.  However, the magic and size of this block
    are now filled in to help parsers skip over it.  A new DUMMY_MAGIC
    is defined for this purpose.
    
    It is probably legitimate (if non-portable) for userspace to
    manufacture its own sigframe for sigreturn, and there is no obvious
    reason why userspace should be required to insert a DUMMY_MAGIC
    block when running on non-iWMMXt hardware, when omitting it has
    worked just fine forever in other configurations.  So in this case,
    sigreturn does not require this block to be present.
    Reported-by: default avatarEdmund Grimley-Evans <Edmund.Grimley-Evans@arm.com>
    Signed-off-by: default avatarDave Martin <Dave.Martin@arm.com>
    Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
    ce184a0d
signal.c 17.7 KB