linux/arch/arm64/kernel/signal.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Based on arch/arm/kernel/signal.c
   4 *
   5 * Copyright (C) 1995-2009 Russell King
   6 * Copyright (C) 2012 ARM Ltd.
   7 */
   8
   9#include <linux/cache.h>
  10#include <linux/compat.h>
  11#include <linux/errno.h>
  12#include <linux/kernel.h>
  13#include <linux/signal.h>
  14#include <linux/personality.h>
  15#include <linux/freezer.h>
  16#include <linux/stddef.h>
  17#include <linux/uaccess.h>
  18#include <linux/sizes.h>
  19#include <linux/string.h>
  20#include <linux/tracehook.h>
  21#include <linux/ratelimit.h>
  22#include <linux/syscalls.h>
  23
  24#include <asm/daifflags.h>
  25#include <asm/debug-monitors.h>
  26#include <asm/elf.h>
  27#include <asm/cacheflush.h>
  28#include <asm/ucontext.h>
  29#include <asm/unistd.h>
  30#include <asm/fpsimd.h>
  31#include <asm/ptrace.h>
  32#include <asm/signal32.h>
  33#include <asm/traps.h>
  34#include <asm/vdso.h>
  35
  36/*
  37 * Do a signal return; undo the signal stack. These are aligned to 128-bit.
  38 */
  39struct rt_sigframe {
  40        struct siginfo info;
  41        struct ucontext uc;
  42};
  43
  44struct frame_record {
  45        u64 fp;
  46        u64 lr;
  47};
  48
  49struct rt_sigframe_user_layout {
  50        struct rt_sigframe __user *sigframe;
  51        struct frame_record __user *next_frame;
  52
  53        unsigned long size;     /* size of allocated sigframe data */
  54        unsigned long limit;    /* largest allowed size */
  55
  56        unsigned long fpsimd_offset;
  57        unsigned long esr_offset;
  58        unsigned long sve_offset;
  59        unsigned long extra_offset;
  60        unsigned long end_offset;
  61};
  62
  63#define BASE_SIGFRAME_SIZE round_up(sizeof(struct rt_sigframe), 16)
  64#define TERMINATOR_SIZE round_up(sizeof(struct _aarch64_ctx), 16)
  65#define EXTRA_CONTEXT_SIZE round_up(sizeof(struct extra_context), 16)
  66
  67static void init_user_layout(struct rt_sigframe_user_layout *user)
  68{
  69        const size_t reserved_size =
  70                sizeof(user->sigframe->uc.uc_mcontext.__reserved);
  71
  72        memset(user, 0, sizeof(*user));
  73        user->size = offsetof(struct rt_sigframe, uc.uc_mcontext.__reserved);
  74
  75        user->limit = user->size + reserved_size;
  76
  77        user->limit -= TERMINATOR_SIZE;
  78        user->limit -= EXTRA_CONTEXT_SIZE;
  79        /* Reserve space for extension and terminator ^ */
  80}
  81
  82static size_t sigframe_size(struct rt_sigframe_user_layout const *user)
  83{
  84        return round_up(max(user->size, sizeof(struct rt_sigframe)), 16);
  85}
  86
  87/*
  88 * Sanity limit on the approximate maximum size of signal frame we'll
  89 * try to generate.  Stack alignment padding and the frame record are
  90 * not taken into account.  This limit is not a guarantee and is
  91 * NOT ABI.
  92 */
  93#define SIGFRAME_MAXSZ SZ_64K
  94
  95static int __sigframe_alloc(struct rt_sigframe_user_layout *user,
  96                            unsigned long *offset, size_t size, bool extend)
  97{
  98        size_t padded_size = round_up(size, 16);
  99
 100        if (padded_size > user->limit - user->size &&
 101            !user->extra_offset &&
 102            extend) {
 103                int ret;
 104
 105                user->limit += EXTRA_CONTEXT_SIZE;
 106                ret = __sigframe_alloc(user, &user->extra_offset,
 107                                       sizeof(struct extra_context), false);
 108                if (ret) {
 109                        user->limit -= EXTRA_CONTEXT_SIZE;
 110                        return ret;
 111                }
 112
 113                /* Reserve space for the __reserved[] terminator */
 114                user->size += TERMINATOR_SIZE;
 115
 116                /*
 117                 * Allow expansion up to SIGFRAME_MAXSZ, ensuring space for
 118                 * the terminator:
 119                 */
 120                user->limit = SIGFRAME_MAXSZ - TERMINATOR_SIZE;
 121        }
 122
 123        /* Still not enough space?  Bad luck! */
 124        if (padded_size > user->limit - user->size)
 125                return -ENOMEM;
 126
 127        *offset = user->size;
 128        user->size += padded_size;
 129
 130        return 0;
 131}
 132
 133/*
 134 * Allocate space for an optional record of <size> bytes in the user
 135 * signal frame.  The offset from the signal frame base address to the
 136 * allocated block is assigned to *offset.
 137 */
 138static int sigframe_alloc(struct rt_sigframe_user_layout *user,
 139                          unsigned long *offset, size_t size)
 140{
 141        return __sigframe_alloc(user, offset, size, true);
 142}
 143
 144/* Allocate the null terminator record and prevent further allocations */
 145static int sigframe_alloc_end(struct rt_sigframe_user_layout *user)
 146{
 147        int ret;
 148
 149        /* Un-reserve the space reserved for the terminator: */
 150        user->limit += TERMINATOR_SIZE;
 151
 152        ret = sigframe_alloc(user, &user->end_offset,
 153                             sizeof(struct _aarch64_ctx));
 154        if (ret)
 155                return ret;
 156
 157        /* Prevent further allocation: */
 158        user->limit = user->size;
 159        return 0;
 160}
 161
 162static void __user *apply_user_offset(
 163        struct rt_sigframe_user_layout const *user, unsigned long offset)
 164{
 165        char __user *base = (char __user *)user->sigframe;
 166
 167        return base + offset;
 168}
 169
 170static int preserve_fpsimd_context(struct fpsimd_context __user *ctx)
 171{
 172        struct user_fpsimd_state const *fpsimd =
 173                &current->thread.uw.fpsimd_state;
 174        int err;
 175
 176        /* copy the FP and status/control registers */
 177        err = __copy_to_user(ctx->vregs, fpsimd->vregs, sizeof(fpsimd->vregs));
 178        __put_user_error(fpsimd->fpsr, &ctx->fpsr, err);
 179        __put_user_error(fpsimd->fpcr, &ctx->fpcr, err);
 180
 181        /* copy the magic/size information */
 182        __put_user_error(FPSIMD_MAGIC, &ctx->head.magic, err);
 183        __put_user_error(sizeof(struct fpsimd_context), &ctx->head.size, err);
 184
 185        return err ? -EFAULT : 0;
 186}
 187
 188static int restore_fpsimd_context(struct fpsimd_context __user *ctx)
 189{
 190        struct user_fpsimd_state fpsimd;
 191        __u32 magic, size;
 192        int err = 0;
 193
 194        /* check the magic/size information */
 195        __get_user_error(magic, &ctx->head.magic, err);
 196        __get_user_error(size, &ctx->head.size, err);
 197        if (err)
 198                return -EFAULT;
 199        if (magic != FPSIMD_MAGIC || size != sizeof(struct fpsimd_context))
 200                return -EINVAL;
 201
 202        /* copy the FP and status/control registers */
 203        err = __copy_from_user(fpsimd.vregs, ctx->vregs,
 204                               sizeof(fpsimd.vregs));
 205        __get_user_error(fpsimd.fpsr, &ctx->fpsr, err);
 206        __get_user_error(fpsimd.fpcr, &ctx->fpcr, err);
 207
 208        clear_thread_flag(TIF_SVE);
 209
 210        /* load the hardware registers from the fpsimd_state structure */
 211        if (!err)
 212                fpsimd_update_current_state(&fpsimd);
 213
 214        return err ? -EFAULT : 0;
 215}
 216
 217
 218struct user_ctxs {
 219        struct fpsimd_context __user *fpsimd;
 220        struct sve_context __user *sve;
 221};
 222
 223#ifdef CONFIG_ARM64_SVE
 224
 225static int preserve_sve_context(struct sve_context __user *ctx)
 226{
 227        int err = 0;
 228        u16 reserved[ARRAY_SIZE(ctx->__reserved)];
 229        unsigned int vl = current->thread.sve_vl;
 230        unsigned int vq = 0;
 231
 232        if (test_thread_flag(TIF_SVE))
 233                vq = sve_vq_from_vl(vl);
 234
 235        memset(reserved, 0, sizeof(reserved));
 236
 237        __put_user_error(SVE_MAGIC, &ctx->head.magic, err);
 238        __put_user_error(round_up(SVE_SIG_CONTEXT_SIZE(vq), 16),
 239                         &ctx->head.size, err);
 240        __put_user_error(vl, &ctx->vl, err);
 241        BUILD_BUG_ON(sizeof(ctx->__reserved) != sizeof(reserved));
 242        err |= __copy_to_user(&ctx->__reserved, reserved, sizeof(reserved));
 243
 244        if (vq) {
 245                /*
 246                 * This assumes that the SVE state has already been saved to
 247                 * the task struct by calling preserve_fpsimd_context().
 248                 */
 249                err |= __copy_to_user((char __user *)ctx + SVE_SIG_REGS_OFFSET,
 250                                      current->thread.sve_state,
 251                                      SVE_SIG_REGS_SIZE(vq));
 252        }
 253
 254        return err ? -EFAULT : 0;
 255}
 256
 257static int restore_sve_fpsimd_context(struct user_ctxs *user)
 258{
 259        int err;
 260        unsigned int vq;
 261        struct user_fpsimd_state fpsimd;
 262        struct sve_context sve;
 263
 264        if (__copy_from_user(&sve, user->sve, sizeof(sve)))
 265                return -EFAULT;
 266
 267        if (sve.vl != current->thread.sve_vl)
 268                return -EINVAL;
 269
 270        if (sve.head.size <= sizeof(*user->sve)) {
 271                clear_thread_flag(TIF_SVE);
 272                goto fpsimd_only;
 273        }
 274
 275        vq = sve_vq_from_vl(sve.vl);
 276
 277        if (sve.head.size < SVE_SIG_CONTEXT_SIZE(vq))
 278                return -EINVAL;
 279
 280        /*
 281         * Careful: we are about __copy_from_user() directly into
 282         * thread.sve_state with preemption enabled, so protection is
 283         * needed to prevent a racing context switch from writing stale
 284         * registers back over the new data.
 285         */
 286
 287        fpsimd_flush_task_state(current);
 288        /* From now, fpsimd_thread_switch() won't touch thread.sve_state */
 289
 290        sve_alloc(current);
 291        err = __copy_from_user(current->thread.sve_state,
 292                               (char __user const *)user->sve +
 293                                        SVE_SIG_REGS_OFFSET,
 294                               SVE_SIG_REGS_SIZE(vq));
 295        if (err)
 296                return -EFAULT;
 297
 298        set_thread_flag(TIF_SVE);
 299
 300fpsimd_only:
 301        /* copy the FP and status/control registers */
 302        /* restore_sigframe() already checked that user->fpsimd != NULL. */
 303        err = __copy_from_user(fpsimd.vregs, user->fpsimd->vregs,
 304                               sizeof(fpsimd.vregs));
 305        __get_user_error(fpsimd.fpsr, &user->fpsimd->fpsr, err);
 306        __get_user_error(fpsimd.fpcr, &user->fpsimd->fpcr, err);
 307
 308        /* load the hardware registers from the fpsimd_state structure */
 309        if (!err)
 310                fpsimd_update_current_state(&fpsimd);
 311
 312        return err ? -EFAULT : 0;
 313}
 314
 315#else /* ! CONFIG_ARM64_SVE */
 316
 317/* Turn any non-optimised out attempts to use these into a link error: */
 318extern int preserve_sve_context(void __user *ctx);
 319extern int restore_sve_fpsimd_context(struct user_ctxs *user);
 320
 321#endif /* ! CONFIG_ARM64_SVE */
 322
 323
 324static int parse_user_sigframe(struct user_ctxs *user,
 325                               struct rt_sigframe __user *sf)
 326{
 327        struct sigcontext __user *const sc = &sf->uc.uc_mcontext;
 328        struct _aarch64_ctx __user *head;
 329        char __user *base = (char __user *)&sc->__reserved;
 330        size_t offset = 0;
 331        size_t limit = sizeof(sc->__reserved);
 332        bool have_extra_context = false;
 333        char const __user *const sfp = (char const __user *)sf;
 334
 335        user->fpsimd = NULL;
 336        user->sve = NULL;
 337
 338        if (!IS_ALIGNED((unsigned long)base, 16))
 339                goto invalid;
 340
 341        while (1) {
 342                int err = 0;
 343                u32 magic, size;
 344                char const __user *userp;
 345                struct extra_context const __user *extra;
 346                u64 extra_datap;
 347                u32 extra_size;
 348                struct _aarch64_ctx const __user *end;
 349                u32 end_magic, end_size;
 350
 351                if (limit - offset < sizeof(*head))
 352                        goto invalid;
 353
 354                if (!IS_ALIGNED(offset, 16))
 355                        goto invalid;
 356
 357                head = (struct _aarch64_ctx __user *)(base + offset);
 358                __get_user_error(magic, &head->magic, err);
 359                __get_user_error(size, &head->size, err);
 360                if (err)
 361                        return err;
 362
 363                if (limit - offset < size)
 364                        goto invalid;
 365
 366                switch (magic) {
 367                case 0:
 368                        if (size)
 369                                goto invalid;
 370
 371                        goto done;
 372
 373                case FPSIMD_MAGIC:
 374                        if (!system_supports_fpsimd())
 375                                goto invalid;
 376                        if (user->fpsimd)
 377                                goto invalid;
 378
 379                        if (size < sizeof(*user->fpsimd))
 380                                goto invalid;
 381
 382                        user->fpsimd = (struct fpsimd_context __user *)head;
 383                        break;
 384
 385                case ESR_MAGIC:
 386                        /* ignore */
 387                        break;
 388
 389                case SVE_MAGIC:
 390                        if (!system_supports_sve())
 391                                goto invalid;
 392
 393                        if (user->sve)
 394                                goto invalid;
 395
 396                        if (size < sizeof(*user->sve))
 397                                goto invalid;
 398
 399                        user->sve = (struct sve_context __user *)head;
 400                        break;
 401
 402                case EXTRA_MAGIC:
 403                        if (have_extra_context)
 404                                goto invalid;
 405
 406                        if (size < sizeof(*extra))
 407                                goto invalid;
 408
 409                        userp = (char const __user *)head;
 410
 411                        extra = (struct extra_context const __user *)userp;
 412                        userp += size;
 413
 414                        __get_user_error(extra_datap, &extra->datap, err);
 415                        __get_user_error(extra_size, &extra->size, err);
 416                        if (err)
 417                                return err;
 418
 419                        /* Check for the dummy terminator in __reserved[]: */
 420
 421                        if (limit - offset - size < TERMINATOR_SIZE)
 422                                goto invalid;
 423
 424                        end = (struct _aarch64_ctx const __user *)userp;
 425                        userp += TERMINATOR_SIZE;
 426
 427                        __get_user_error(end_magic, &end->magic, err);
 428                        __get_user_error(end_size, &end->size, err);
 429                        if (err)
 430                                return err;
 431
 432                        if (end_magic || end_size)
 433                                goto invalid;
 434
 435                        /* Prevent looping/repeated parsing of extra_context */
 436                        have_extra_context = true;
 437
 438                        base = (__force void __user *)extra_datap;
 439                        if (!IS_ALIGNED((unsigned long)base, 16))
 440                                goto invalid;
 441
 442                        if (!IS_ALIGNED(extra_size, 16))
 443                                goto invalid;
 444
 445                        if (base != userp)
 446                                goto invalid;
 447
 448                        /* Reject "unreasonably large" frames: */
 449                        if (extra_size > sfp + SIGFRAME_MAXSZ - userp)
 450                                goto invalid;
 451
 452                        /*
 453                         * Ignore trailing terminator in __reserved[]
 454                         * and start parsing extra data:
 455                         */
 456                        offset = 0;
 457                        limit = extra_size;
 458
 459                        if (!access_ok(base, limit))
 460                                goto invalid;
 461
 462                        continue;
 463
 464                default:
 465                        goto invalid;
 466                }
 467
 468                if (size < sizeof(*head))
 469                        goto invalid;
 470
 471                if (limit - offset < size)
 472                        goto invalid;
 473
 474                offset += size;
 475        }
 476
 477done:
 478        return 0;
 479
 480invalid:
 481        return -EINVAL;
 482}
 483
 484static int restore_sigframe(struct pt_regs *regs,
 485                            struct rt_sigframe __user *sf)
 486{
 487        sigset_t set;
 488        int i, err;
 489        struct user_ctxs user;
 490
 491        err = __copy_from_user(&set, &sf->uc.uc_sigmask, sizeof(set));
 492        if (err == 0)
 493                set_current_blocked(&set);
 494
 495        for (i = 0; i < 31; i++)
 496                __get_user_error(regs->regs[i], &sf->uc.uc_mcontext.regs[i],
 497                                 err);
 498        __get_user_error(regs->sp, &sf->uc.uc_mcontext.sp, err);
 499        __get_user_error(regs->pc, &sf->uc.uc_mcontext.pc, err);
 500        __get_user_error(regs->pstate, &sf->uc.uc_mcontext.pstate, err);
 501
 502        /*
 503         * Avoid sys_rt_sigreturn() restarting.
 504         */
 505        forget_syscall(regs);
 506
 507        err |= !valid_user_regs(&regs->user_regs, current);
 508        if (err == 0)
 509                err = parse_user_sigframe(&user, sf);
 510
 511        if (err == 0 && system_supports_fpsimd()) {
 512                if (!user.fpsimd)
 513                        return -EINVAL;
 514
 515                if (user.sve) {
 516                        if (!system_supports_sve())
 517                                return -EINVAL;
 518
 519                        err = restore_sve_fpsimd_context(&user);
 520                } else {
 521                        err = restore_fpsimd_context(user.fpsimd);
 522                }
 523        }
 524
 525        return err;
 526}
 527
 528SYSCALL_DEFINE0(rt_sigreturn)
 529{
 530        struct pt_regs *regs = current_pt_regs();
 531        struct rt_sigframe __user *frame;
 532
 533        /* Always make any pending restarted system calls return -EINTR */
 534        current->restart_block.fn = do_no_restart_syscall;
 535
 536        /*
 537         * Since we stacked the signal on a 128-bit boundary, then 'sp' should
 538         * be word aligned here.
 539         */
 540        if (regs->sp & 15)
 541                goto badframe;
 542
 543        frame = (struct rt_sigframe __user *)regs->sp;
 544
 545        if (!access_ok(frame, sizeof (*frame)))
 546                goto badframe;
 547
 548        if (restore_sigframe(regs, frame))
 549                goto badframe;
 550
 551        if (restore_altstack(&frame->uc.uc_stack))
 552                goto badframe;
 553
 554        return regs->regs[0];
 555
 556badframe:
 557        arm64_notify_segfault(regs->sp);
 558        return 0;
 559}
 560
 561/*
 562 * Determine the layout of optional records in the signal frame
 563 *
 564 * add_all: if true, lays out the biggest possible signal frame for
 565 *      this task; otherwise, generates a layout for the current state
 566 *      of the task.
 567 */
 568static int setup_sigframe_layout(struct rt_sigframe_user_layout *user,
 569                                 bool add_all)
 570{
 571        int err;
 572
 573        err = sigframe_alloc(user, &user->fpsimd_offset,
 574                             sizeof(struct fpsimd_context));
 575        if (err)
 576                return err;
 577
 578        /* fault information, if valid */
 579        if (add_all || current->thread.fault_code) {
 580                err = sigframe_alloc(user, &user->esr_offset,
 581                                     sizeof(struct esr_context));
 582                if (err)
 583                        return err;
 584        }
 585
 586        if (system_supports_sve()) {
 587                unsigned int vq = 0;
 588
 589                if (add_all || test_thread_flag(TIF_SVE)) {
 590                        int vl = sve_max_vl;
 591
 592                        if (!add_all)
 593                                vl = current->thread.sve_vl;
 594
 595                        vq = sve_vq_from_vl(vl);
 596                }
 597
 598                err = sigframe_alloc(user, &user->sve_offset,
 599                                     SVE_SIG_CONTEXT_SIZE(vq));
 600                if (err)
 601                        return err;
 602        }
 603
 604        return sigframe_alloc_end(user);
 605}
 606
 607static int setup_sigframe(struct rt_sigframe_user_layout *user,
 608                          struct pt_regs *regs, sigset_t *set)
 609{
 610        int i, err = 0;
 611        struct rt_sigframe __user *sf = user->sigframe;
 612
 613        /* set up the stack frame for unwinding */
 614        __put_user_error(regs->regs[29], &user->next_frame->fp, err);
 615        __put_user_error(regs->regs[30], &user->next_frame->lr, err);
 616
 617        for (i = 0; i < 31; i++)
 618                __put_user_error(regs->regs[i], &sf->uc.uc_mcontext.regs[i],
 619                                 err);
 620        __put_user_error(regs->sp, &sf->uc.uc_mcontext.sp, err);
 621        __put_user_error(regs->pc, &sf->uc.uc_mcontext.pc, err);
 622        __put_user_error(regs->pstate, &sf->uc.uc_mcontext.pstate, err);
 623
 624        __put_user_error(current->thread.fault_address, &sf->uc.uc_mcontext.fault_address, err);
 625
 626        err |= __copy_to_user(&sf->uc.uc_sigmask, set, sizeof(*set));
 627
 628        if (err == 0 && system_supports_fpsimd()) {
 629                struct fpsimd_context __user *fpsimd_ctx =
 630                        apply_user_offset(user, user->fpsimd_offset);
 631                err |= preserve_fpsimd_context(fpsimd_ctx);
 632        }
 633
 634        /* fault information, if valid */
 635        if (err == 0 && user->esr_offset) {
 636                struct esr_context __user *esr_ctx =
 637                        apply_user_offset(user, user->esr_offset);
 638
 639                __put_user_error(ESR_MAGIC, &esr_ctx->head.magic, err);
 640                __put_user_error(sizeof(*esr_ctx), &esr_ctx->head.size, err);
 641                __put_user_error(current->thread.fault_code, &esr_ctx->esr, err);
 642        }
 643
 644        /* Scalable Vector Extension state, if present */
 645        if (system_supports_sve() && err == 0 && user->sve_offset) {
 646                struct sve_context __user *sve_ctx =
 647                        apply_user_offset(user, user->sve_offset);
 648                err |= preserve_sve_context(sve_ctx);
 649        }
 650
 651        if (err == 0 && user->extra_offset) {
 652                char __user *sfp = (char __user *)user->sigframe;
 653                char __user *userp =
 654                        apply_user_offset(user, user->extra_offset);
 655
 656                struct extra_context __user *extra;
 657                struct _aarch64_ctx __user *end;
 658                u64 extra_datap;
 659                u32 extra_size;
 660
 661                extra = (struct extra_context __user *)userp;
 662                userp += EXTRA_CONTEXT_SIZE;
 663
 664                end = (struct _aarch64_ctx __user *)userp;
 665                userp += TERMINATOR_SIZE;
 666
 667                /*
 668                 * extra_datap is just written to the signal frame.
 669                 * The value gets cast back to a void __user *
 670                 * during sigreturn.
 671                 */
 672                extra_datap = (__force u64)userp;
 673                extra_size = sfp + round_up(user->size, 16) - userp;
 674
 675                __put_user_error(EXTRA_MAGIC, &extra->head.magic, err);
 676                __put_user_error(EXTRA_CONTEXT_SIZE, &extra->head.size, err);
 677                __put_user_error(extra_datap, &extra->datap, err);
 678                __put_user_error(extra_size, &extra->size, err);
 679
 680                /* Add the terminator */
 681                __put_user_error(0, &end->magic, err);
 682                __put_user_error(0, &end->size, err);
 683        }
 684
 685        /* set the "end" magic */
 686        if (err == 0) {
 687                struct _aarch64_ctx __user *end =
 688                        apply_user_offset(user, user->end_offset);
 689
 690                __put_user_error(0, &end->magic, err);
 691                __put_user_error(0, &end->size, err);
 692        }
 693
 694        return err;
 695}
 696
 697static int get_sigframe(struct rt_sigframe_user_layout *user,
 698                         struct ksignal *ksig, struct pt_regs *regs)
 699{
 700        unsigned long sp, sp_top;
 701        int err;
 702
 703        init_user_layout(user);
 704        err = setup_sigframe_layout(user, false);
 705        if (err)
 706                return err;
 707
 708        sp = sp_top = sigsp(regs->sp, ksig);
 709
 710        sp = round_down(sp - sizeof(struct frame_record), 16);
 711        user->next_frame = (struct frame_record __user *)sp;
 712
 713        sp = round_down(sp, 16) - sigframe_size(user);
 714        user->sigframe = (struct rt_sigframe __user *)sp;
 715
 716        /*
 717         * Check that we can actually write to the signal frame.
 718         */
 719        if (!access_ok(user->sigframe, sp_top - sp))
 720                return -EFAULT;
 721
 722        return 0;
 723}
 724
 725static void setup_return(struct pt_regs *regs, struct k_sigaction *ka,
 726                         struct rt_sigframe_user_layout *user, int usig)
 727{
 728        __sigrestore_t sigtramp;
 729
 730        regs->regs[0] = usig;
 731        regs->sp = (unsigned long)user->sigframe;
 732        regs->regs[29] = (unsigned long)&user->next_frame->fp;
 733        regs->pc = (unsigned long)ka->sa.sa_handler;
 734
 735        if (ka->sa.sa_flags & SA_RESTORER)
 736                sigtramp = ka->sa.sa_restorer;
 737        else
 738                sigtramp = VDSO_SYMBOL(current->mm->context.vdso, sigtramp);
 739
 740        regs->regs[30] = (unsigned long)sigtramp;
 741}
 742
 743static int setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set,
 744                          struct pt_regs *regs)
 745{
 746        struct rt_sigframe_user_layout user;
 747        struct rt_sigframe __user *frame;
 748        int err = 0;
 749
 750        fpsimd_signal_preserve_current_state();
 751
 752        if (get_sigframe(&user, ksig, regs))
 753                return 1;
 754
 755        frame = user.sigframe;
 756
 757        __put_user_error(0, &frame->uc.uc_flags, err);
 758        __put_user_error(NULL, &frame->uc.uc_link, err);
 759
 760        err |= __save_altstack(&frame->uc.uc_stack, regs->sp);
 761        err |= setup_sigframe(&user, regs, set);
 762        if (err == 0) {
 763                setup_return(regs, &ksig->ka, &user, usig);
 764                if (ksig->ka.sa.sa_flags & SA_SIGINFO) {
 765                        err |= copy_siginfo_to_user(&frame->info, &ksig->info);
 766                        regs->regs[1] = (unsigned long)&frame->info;
 767                        regs->regs[2] = (unsigned long)&frame->uc;
 768                }
 769        }
 770
 771        return err;
 772}
 773
 774static void setup_restart_syscall(struct pt_regs *regs)
 775{
 776        if (is_compat_task())
 777                compat_setup_restart_syscall(regs);
 778        else
 779                regs->regs[8] = __NR_restart_syscall;
 780}
 781
 782/*
 783 * OK, we're invoking a handler
 784 */
 785static void handle_signal(struct ksignal *ksig, struct pt_regs *regs)
 786{
 787        struct task_struct *tsk = current;
 788        sigset_t *oldset = sigmask_to_save();
 789        int usig = ksig->sig;
 790        int ret;
 791
 792        rseq_signal_deliver(ksig, regs);
 793
 794        /*
 795         * Set up the stack frame
 796         */
 797        if (is_compat_task()) {
 798                if (ksig->ka.sa.sa_flags & SA_SIGINFO)
 799                        ret = compat_setup_rt_frame(usig, ksig, oldset, regs);
 800                else
 801                        ret = compat_setup_frame(usig, ksig, oldset, regs);
 802        } else {
 803                ret = setup_rt_frame(usig, ksig, oldset, regs);
 804        }
 805
 806        /*
 807         * Check that the resulting registers are actually sane.
 808         */
 809        ret |= !valid_user_regs(&regs->user_regs, current);
 810
 811        /*
 812         * Fast forward the stepping logic so we step into the signal
 813         * handler.
 814         */
 815        if (!ret)
 816                user_fastforward_single_step(tsk);
 817
 818        signal_setup_done(ret, ksig, 0);
 819}
 820
 821/*
 822 * Note that 'init' is a special process: it doesn't get signals it doesn't
 823 * want to handle. Thus you cannot kill init even with a SIGKILL even by
 824 * mistake.
 825 *
 826 * Note that we go through the signals twice: once to check the signals that
 827 * the kernel can handle, and then we build all the user-level signal handling
 828 * stack-frames in one go after that.
 829 */
 830static void do_signal(struct pt_regs *regs)
 831{
 832        unsigned long continue_addr = 0, restart_addr = 0;
 833        int retval = 0;
 834        struct ksignal ksig;
 835        bool syscall = in_syscall(regs);
 836
 837        /*
 838         * If we were from a system call, check for system call restarting...
 839         */
 840        if (syscall) {
 841                continue_addr = regs->pc;
 842                restart_addr = continue_addr - (compat_thumb_mode(regs) ? 2 : 4);
 843                retval = regs->regs[0];
 844
 845                /*
 846                 * Avoid additional syscall restarting via ret_to_user.
 847                 */
 848                forget_syscall(regs);
 849
 850                /*
 851                 * Prepare for system call restart. We do this here so that a
 852                 * debugger will see the already changed PC.
 853                 */
 854                switch (retval) {
 855                case -ERESTARTNOHAND:
 856                case -ERESTARTSYS:
 857                case -ERESTARTNOINTR:
 858                case -ERESTART_RESTARTBLOCK:
 859                        regs->regs[0] = regs->orig_x0;
 860                        regs->pc = restart_addr;
 861                        break;
 862                }
 863        }
 864
 865        /*
 866         * Get the signal to deliver. When running under ptrace, at this point
 867         * the debugger may change all of our registers.
 868         */
 869        if (get_signal(&ksig)) {
 870                /*
 871                 * Depending on the signal settings, we may need to revert the
 872                 * decision to restart the system call, but skip this if a
 873                 * debugger has chosen to restart at a different PC.
 874                 */
 875                if (regs->pc == restart_addr &&
 876                    (retval == -ERESTARTNOHAND ||
 877                     retval == -ERESTART_RESTARTBLOCK ||
 878                     (retval == -ERESTARTSYS &&
 879                      !(ksig.ka.sa.sa_flags & SA_RESTART)))) {
 880                        regs->regs[0] = -EINTR;
 881                        regs->pc = continue_addr;
 882                }
 883
 884                handle_signal(&ksig, regs);
 885                return;
 886        }
 887
 888        /*
 889         * Handle restarting a different system call. As above, if a debugger
 890         * has chosen to restart at a different PC, ignore the restart.
 891         */
 892        if (syscall && regs->pc == restart_addr) {
 893                if (retval == -ERESTART_RESTARTBLOCK)
 894                        setup_restart_syscall(regs);
 895                user_rewind_single_step(current);
 896        }
 897
 898        restore_saved_sigmask();
 899}
 900
 901asmlinkage void do_notify_resume(struct pt_regs *regs,
 902                                 unsigned long thread_flags)
 903{
 904        /*
 905         * The assembly code enters us with IRQs off, but it hasn't
 906         * informed the tracing code of that for efficiency reasons.
 907         * Update the trace code with the current status.
 908         */
 909        trace_hardirqs_off();
 910
 911        do {
 912                /* Check valid user FS if needed */
 913                addr_limit_user_check();
 914
 915                if (thread_flags & _TIF_NEED_RESCHED) {
 916                        /* Unmask Debug and SError for the next task */
 917                        local_daif_restore(DAIF_PROCCTX_NOIRQ);
 918
 919                        schedule();
 920                } else {
 921                        local_daif_restore(DAIF_PROCCTX);
 922
 923                        if (thread_flags & _TIF_UPROBE)
 924                                uprobe_notify_resume(regs);
 925
 926                        if (thread_flags & _TIF_SIGPENDING)
 927                                do_signal(regs);
 928
 929                        if (thread_flags & _TIF_NOTIFY_RESUME) {
 930                                clear_thread_flag(TIF_NOTIFY_RESUME);
 931                                tracehook_notify_resume(regs);
 932                                rseq_handle_notify_resume(NULL, regs);
 933                        }
 934
 935                        if (thread_flags & _TIF_FOREIGN_FPSTATE)
 936                                fpsimd_restore_current_state();
 937                }
 938
 939                local_daif_mask();
 940                thread_flags = READ_ONCE(current_thread_info()->flags);
 941        } while (thread_flags & _TIF_WORK_MASK);
 942}
 943
 944unsigned long __ro_after_init signal_minsigstksz;
 945
 946/*
 947 * Determine the stack space required for guaranteed signal devliery.
 948 * This function is used to populate AT_MINSIGSTKSZ at process startup.
 949 * cpufeatures setup is assumed to be complete.
 950 */
 951void __init minsigstksz_setup(void)
 952{
 953        struct rt_sigframe_user_layout user;
 954
 955        init_user_layout(&user);
 956
 957        /*
 958         * If this fails, SIGFRAME_MAXSZ needs to be enlarged.  It won't
 959         * be big enough, but it's our best guess:
 960         */
 961        if (WARN_ON(setup_sigframe_layout(&user, true)))
 962                return;
 963
 964        signal_minsigstksz = sigframe_size(&user) +
 965                round_up(sizeof(struct frame_record), 16) +
 966                16; /* max alignment padding */
 967}
 968