OSDN Git Service

arm64: signal: nofpsimd: Do not allocate fp/simd context when not available
authorDavid Engraf <david.engraf@sysgo.com>
Fri, 25 Feb 2022 10:40:08 +0000 (11:40 +0100)
committerWill Deacon <will@kernel.org>
Mon, 7 Mar 2022 21:38:25 +0000 (21:38 +0000)
Commit 6d502b6ba1b2 ("arm64: signal: nofpsimd: Handle fp/simd context for
signal frames") introduced saving the fp/simd context for signal handling
only when support is available. But setup_sigframe_layout() always
reserves memory for fp/simd context. The additional memory is not touched
because preserve_fpsimd_context() is not called and thus the magic is
invalid.

This may lead to an error when parse_user_sigframe() checks the fp/simd
area and does not find a valid magic number.

Signed-off-by: David Engraf <david.engraf@sysgo.com>
Reviwed-by: Mark Brown <broonie@kernel.org>
Fixes: 6d502b6ba1b267b3 ("arm64: signal: nofpsimd: Handle fp/simd context for signal frames")
Cc: <stable@vger.kernel.org> # 5.6.x
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Link: https://lore.kernel.org/r/20220225104008.820289-1-david.engraf@sysgo.com
Signed-off-by: Will Deacon <will@kernel.org>
arch/arm64/kernel/signal.c

index d8aaf4b..3d66fba 100644 (file)
@@ -577,10 +577,12 @@ static int setup_sigframe_layout(struct rt_sigframe_user_layout *user,
 {
        int err;
 
-       err = sigframe_alloc(user, &user->fpsimd_offset,
-                            sizeof(struct fpsimd_context));
-       if (err)
-               return err;
+       if (system_supports_fpsimd()) {
+               err = sigframe_alloc(user, &user->fpsimd_offset,
+                                    sizeof(struct fpsimd_context));
+               if (err)
+                       return err;
+       }
 
        /* fault information, if valid */
        if (add_all || current->thread.fault_code) {