get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/1707770/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 1707770,
    "url": "http://patchwork.ozlabs.org/api/patches/1707770/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-um/patch/20221122100759.208290-29-benjamin@sipsolutions.net/",
    "project": {
        "id": 60,
        "url": "http://patchwork.ozlabs.org/api/projects/60/?format=api",
        "name": "User-mode Linux Development",
        "link_name": "linux-um",
        "list_id": "linux-um.lists.infradead.org",
        "list_email": "linux-um@lists.infradead.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20221122100759.208290-29-benjamin@sipsolutions.net>",
    "list_archive_url": null,
    "date": "2022-11-22T10:07:59",
    "name": "[v2,28/28] um: Delay flushing syscalls until the thread is restarted",
    "commit_ref": null,
    "pull_url": null,
    "state": "not-applicable",
    "archived": false,
    "hash": "98335ccf988de986543aa8d8e17bee0826c4928b",
    "submitter": {
        "id": 67525,
        "url": "http://patchwork.ozlabs.org/api/people/67525/?format=api",
        "name": "Benjamin Berg",
        "email": "benjamin@sipsolutions.net"
    },
    "delegate": {
        "id": 54851,
        "url": "http://patchwork.ozlabs.org/api/users/54851/?format=api",
        "username": "rw",
        "first_name": "Richard",
        "last_name": "Weinberger",
        "email": "richard@nod.at"
    },
    "mbox": "http://patchwork.ozlabs.org/project/linux-um/patch/20221122100759.208290-29-benjamin@sipsolutions.net/mbox/",
    "series": [
        {
            "id": 329466,
            "url": "http://patchwork.ozlabs.org/api/series/329466/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-um/list/?series=329466",
            "date": "2022-11-22T10:07:37",
            "name": "Implement SECCOMP based userland",
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/329466/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/1707770/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/1707770/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linux-um-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n spf=none (no SPF record) smtp.mailfrom=lists.infradead.org\n (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org;\n envelope-from=linux-um-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n receiver=<UNKNOWN>)",
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=lists.infradead.org header.i=@lists.infradead.org\n header.a=rsa-sha256 header.s=bombadil.20210309 header.b=BDLlj7U5;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n secure) header.d=infradead.org header.i=@infradead.org header.a=rsa-sha256\n header.s=desiato.20200630 header.b=T9bCcqTZ;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n secure) header.d=sipsolutions.net header.i=@sipsolutions.net\n header.a=rsa-sha256 header.s=mail header.b=pTWsWPRS;\n\tdkim-atps=neutral"
        ],
        "Received": [
            "from bombadil.infradead.org (bombadil.infradead.org\n [IPv6:2607:7c80:54:3::133])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4NGgRY5SPQz23nl\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 22 Nov 2022 21:27:05 +1100 (AEDT)",
            "from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux))\n\tid 1oxQUR-007nuB-In; Tue, 22 Nov 2022 10:26:55 +0000",
            "from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05])\n\tby bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux))\n\tid 1oxQTK-007nKg-AU\n\tfor linux-um@bombadil.infradead.org; Tue, 22 Nov 2022 10:25:46 +0000",
            "from s3.sipsolutions.net ([2a01:4f8:191:4433::2]\n helo=sipsolutions.net)\n\tby desiato.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux))\n\tid 1oxQF1-003P1l-8C\n\tfor linux-um@lists.infradead.org; Tue, 22 Nov 2022 10:11:08 +0000",
            "by sipsolutions.net with esmtpsa\n (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256)\n\t(Exim 4.96)\n\t(envelope-from <benjamin@sipsolutions.net>)\n\tid 1oxQEw-006IGn-1X;\n\tTue, 22 Nov 2022 11:10:54 +0100"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20210309; h=Sender:\n\tContent-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:\n\tList-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:\n\tMessage-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=1f5F7lIFXxWrRBKWv0PZP7iPScM1lFFjg0hHIq/bI1s=; b=BDLlj7U5cv7efM\n\tp/pFmn9qAwvH4ymN6NSgz1ns4ezo7HFZgIGhv3SkB90UejN3omdR+ktAqd05sUNa288lUPZ31DkPb\n\tt/0xAuXmMsCYE9UmTO4UtpSdD5S09r9NvZmQpxJaqTah10c4/Bu47KGdWKNkLRqFQAWPts9bPvQS7\n\tM3WbZaYu3X+IPkfxI8Txlk5GS/tNXHZ2cjaYRQzWfP/enAVl6BWaUJNrUcGzCH0+m/nuBwnr3AiSD\n\tf+85i6iHBkGyg5XqU4wK7og+Kt+hgeXOAGIkFBT5au0V6WSsH3eHBCpCtHL5WPKYemrTw7w/JznX7\n\tyQnZEUQSjicernmfxrnA==;",
            "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:MIME-Version\n\t:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:\n\tContent-Type:Content-ID:Content-Description;\n\tbh=C5uViLYbfzqIQxjpXCXFRcIYOLSByVh51zHclzVAsh8=; b=T9bCcqTZwHOWOOVA8hSksUxY8K\n\tgMXwqxOg2bUfp1OB+EZpvAFzO2jxJvA+bkyCXftKuvn8rl41BJfj1CoBvr/Z49HeMIZt2Jcvw/s5q\n\tW6j8556rduL4w7F1xBbPsHLkWVYyWN7/topKtU3ERTW4kHJwJtkxlcTmzd/jgijTz23eU6D1z2TzK\n\tnlHf6UBvVcrc1gT/d/r9xJYqfJkdXwkwArDPvML677I9kd6SxLQlh+rlRgOJcXq5/Arc/0UTn6rTf\n\tEF9U3m51xQnRmn7ddBusLBOTXYfqqRp7XDbvrAC47r2WigvptHLTI5WiLsoKL+DhPcPHRPdZTa0Hz\n\t1eJN4yrg==;",
            "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=sipsolutions.net; s=mail; h=Content-Transfer-Encoding:MIME-Version:\n\tReferences:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Content-Type:Sender\n\t:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-To:\n\tResent-Cc:Resent-Message-ID; bh=C5uViLYbfzqIQxjpXCXFRcIYOLSByVh51zHclzVAsh8=;\n\tt=1669111857; x=1670321457; b=pTWsWPRSPM+WW3IM6Tz/udFehlskifqx8F/xQUNCFynt0IF\n\tv2Cztn7lBqY4D90VKW2YhgXLmIf+bAnT7OowgUXkQR9hQ0nXpmRWCPe8C7R3WUiERtg4SqvS65Yei\n\tZXu2D3taSGXcXi87tHpxXgcaha2IAebEhnFW7OVUBaQ0xo4Pu0igQpofzdEFw77HYMyPzrBAxu19u\n\t74DGas56D8KchQJUGfwOFC/rvDoX5oNWcCESEqQE99cplsADqqFKkQvcfrBsF5A8fBTYX21QdmyHc\n\t4wfNyTfIAVaZXFwwJNZCRrx+9xzeugDDeJ7CnWJgl1kNoVnCfv7Ul4ntIP3HSYjA==;"
        ],
        "From": "benjamin@sipsolutions.net",
        "To": "linux-um@lists.infradead.org",
        "Cc": "Benjamin Berg <benjamin@sipsolutions.net>",
        "Subject": "[PATCH v2 28/28] um: Delay flushing syscalls until the thread is\n restarted",
        "Date": "Tue, 22 Nov 2022 11:07:59 +0100",
        "Message-Id": "<20221122100759.208290-29-benjamin@sipsolutions.net>",
        "X-Mailer": "git-send-email 2.38.1",
        "In-Reply-To": "<20221122100759.208290-1-benjamin@sipsolutions.net>",
        "References": "<20221122100759.208290-1-benjamin@sipsolutions.net>",
        "MIME-Version": "1.0",
        "X-CRM114-Version": "20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ",
        "X-CRM114-CacheID": "sfid-20221122_101103_248680_D07EA555 ",
        "X-CRM114-Status": "GOOD (  17.76  )",
        "X-Spam-Score": "-0.2 (/)",
        "X-Spam-Report": "Spam detection software,\n running on the system \"desiato.infradead.org\",\n has NOT identified this incoming email as spam.  The original\n message has been attached to this so you can view it or label\n similar future email.  If you have any questions, see\n the administrator of that system for details.\n Content preview:  From: Benjamin Berg <benjamin@sipsolutions.net> This way we\n    can avoid doing two extra context switches when managing processes using\n   seccomp. Signed-off-by: Benjamin Berg <benjamin@sipsolutions.net> ---\n arch/um/include/shared/os.h\n    | 1 + arch/um/include/shared/skas/skas.h | 1 +\n arch/um/kernel/skas/process.c\n    | 8 ++++ arch/um/kernel/tlb.c | 10 [...]\n Content analysis details:   (-0.2 points, 5.0 required)\n  pts rule name              description\n ---- ----------------------\n --------------------------------------------------\n -0.0 SPF_PASS               SPF: sender matches SPF record\n -0.0 SPF_HELO_PASS          SPF: HELO matches SPF record\n -0.1 DKIM_VALID_AU          Message has a valid DKIM or DK signature from\n                             author's domain\n -0.1 DKIM_VALID_EF          Message has a valid DKIM or DK signature from\n                             envelope-from domain\n  0.1 DKIM_SIGNED            Message has a DKIM or DK signature,\n not necessarily\n                             valid\n -0.1 DKIM_VALID             Message has at least one valid DKIM or DK\n signature",
        "X-BeenThere": "linux-um@lists.infradead.org",
        "X-Mailman-Version": "2.1.34",
        "Precedence": "list",
        "List-Id": "<linux-um.lists.infradead.org>",
        "List-Unsubscribe": "<http://lists.infradead.org/mailman/options/linux-um>,\n <mailto:linux-um-request@lists.infradead.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.infradead.org/pipermail/linux-um/>",
        "List-Post": "<mailto:linux-um@lists.infradead.org>",
        "List-Help": "<mailto:linux-um-request@lists.infradead.org?subject=help>",
        "List-Subscribe": "<http://lists.infradead.org/mailman/listinfo/linux-um>,\n <mailto:linux-um-request@lists.infradead.org?subject=subscribe>",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Sender": "\"linux-um\" <linux-um-bounces@lists.infradead.org>",
        "Errors-To": "linux-um-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"
    },
    "content": "From: Benjamin Berg <benjamin@sipsolutions.net>\n\nThis way we can avoid doing two extra context switches when managing\nprocesses using seccomp.\n\nSigned-off-by: Benjamin Berg <benjamin@sipsolutions.net>\n---\n arch/um/include/shared/os.h        |  1 +\n arch/um/include/shared/skas/skas.h |  1 +\n arch/um/kernel/skas/process.c      |  8 ++++\n arch/um/kernel/tlb.c               | 10 +----\n arch/um/os-Linux/skas/mem.c        | 71 ++++++++++++++++--------------\n arch/um/os-Linux/skas/process.c    | 26 ++++++++++-\n 6 files changed, 75 insertions(+), 42 deletions(-)",
    "diff": "diff --git a/arch/um/include/shared/os.h b/arch/um/include/shared/os.h\nindex 07683f45d7e1..aa888d4870d9 100644\n--- a/arch/um/include/shared/os.h\n+++ b/arch/um/include/shared/os.h\n@@ -273,6 +273,7 @@ int syscall_stub_flush(struct mm_id *mm_idp);\n struct stub_syscall *syscall_stub_alloc(struct mm_id *mm_idp,\n \t\t\t\t\tunsigned long data_len,\n \t\t\t\t\tunsigned long *data_addr);\n+void syscall_stub_dump_error(struct mm_id *mm_idp);\n \n void map(struct mm_id *mm_idp, unsigned long virt,\n \t unsigned long len, int prot, int phys_fd,\ndiff --git a/arch/um/include/shared/skas/skas.h b/arch/um/include/shared/skas/skas.h\nindex f10599995d4d..bc672d607101 100644\n--- a/arch/um/include/shared/skas/skas.h\n+++ b/arch/um/include/shared/skas/skas.h\n@@ -21,5 +21,6 @@ extern void new_thread_handler(void);\n extern void handle_syscall(struct uml_pt_regs *regs);\n extern long execute_syscall_skas(void *r);\n extern unsigned long current_stub_stack(void);\n+extern struct mm_id *current_mm_id(void);\n \n #endif\ndiff --git a/arch/um/kernel/skas/process.c b/arch/um/kernel/skas/process.c\nindex f2ac134c9752..c7345c83e07b 100644\n--- a/arch/um/kernel/skas/process.c\n+++ b/arch/um/kernel/skas/process.c\n@@ -53,3 +53,11 @@ unsigned long current_stub_stack(void)\n \n \treturn current->mm->context.id.stack;\n }\n+\n+struct mm_id *current_mm_id(void)\n+{\n+\tif (current->mm == NULL)\n+\t\treturn NULL;\n+\n+\treturn &current->mm->context.id;\n+}\ndiff --git a/arch/um/kernel/tlb.c b/arch/um/kernel/tlb.c\nindex c15cac380fcd..bda516cb1186 100644\n--- a/arch/um/kernel/tlb.c\n+++ b/arch/um/kernel/tlb.c\n@@ -460,7 +460,7 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long address)\n \tpmd_t *pmd;\n \tpte_t *pte;\n \tstruct mm_struct *mm = vma->vm_mm;\n-\tint r, w, x, prot, err = 0;\n+\tint r, w, x, prot;\n \tstruct mm_id *mm_id;\n \n \taddress &= PAGE_MASK;\n@@ -508,14 +508,6 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long address)\n \t} else if (pte_newprot(*pte))\n \t\tprotect(mm_id, address, PAGE_SIZE, prot);\n \n-\terr = syscall_stub_flush(mm_id);\n-\tif (err) {\n-\t\tif (err == -ENOMEM)\n-\t\t\treport_enomem();\n-\n-\t\tgoto kill;\n-\t}\n-\n \t*pte = pte_mkuptodate(*pte);\n \n \treturn;\ndiff --git a/arch/um/os-Linux/skas/mem.c b/arch/um/os-Linux/skas/mem.c\nindex 619035151bc6..68155aadea09 100644\n--- a/arch/um/os-Linux/skas/mem.c\n+++ b/arch/um/os-Linux/skas/mem.c\n@@ -25,6 +25,44 @@ extern char __syscall_stub_start[];\n extern void wait_stub_done(int pid);\n void wait_stub_done_seccomp(int pid, struct stub_data *data, int running);\n \n+void syscall_stub_dump_error(struct mm_id *mm_idp)\n+{\n+\tstruct stub_data *proc_data = (void *)mm_idp->stack;\n+\tstruct stub_syscall *sc;\n+\tint n;\n+\n+\tif (proc_data->syscall_data_len < 0 ||\n+\t    proc_data->syscall_data_len > (long) mm_idp->syscall_data_len - sizeof(*sc))\n+\t\tpanic(\"Syscall data was corrupted by stub (len is: %d, expected maximum: %d)!\",\n+\t\t      proc_data->syscall_data_len,\n+\t\t      mm_idp->syscall_data_len);\n+\n+\tsc = (void *) (((unsigned long) &proc_data->syscall_data) +\n+\t\t       proc_data->syscall_data_len);\n+\n+\tprintk(UM_KERN_ERR \"%s : length = %d, last offset = %d\",\n+\t       __func__, mm_idp->syscall_data_len,\n+\t       proc_data->syscall_data_len);\n+\tprintk(UM_KERN_ERR \"%s : syscall %ld failed, return value = 0x%lx, expected return value = 0x%lx\\n\",\n+\t       __func__, sc->syscall, proc_data->err,\n+\t       sc->expected_result);\n+\n+\tprintk(UM_KERN_ERR \"    syscall parameters: 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx\\n\",\n+\t       sc->arg[0], sc->arg[1], sc->arg[2],\n+\t       sc->arg[3], sc->arg[4], sc->arg[5]);\n+\n+\tn = sc->cmd_len - sizeof(*sc);\n+\tif (n > 0) {\n+\t\tprintk(UM_KERN_ERR \"    syscall data 0x%lx + %d\",\n+\t\t       STUB_DATA + ((unsigned long) (&sc->data) &\n+\t\t\t\t    (UM_KERN_PAGE_SIZE - 1)),\n+\t\t       n);\n+\t\tprint_hex_dump(UM_KERN_ERR,\n+\t\t\t       \"    syscall data: \", 0,\n+\t\t\t       16, 4, sc->data, n, 0);\n+\t}\n+}\n+\n static inline unsigned long *check_init_stack(struct mm_id *mm_idp,\n \t\t\t\t\t      unsigned long *stack)\n {\n@@ -90,38 +128,7 @@ static inline long do_syscall_stub(struct mm_id *mm_idp)\n \t * otherwise it will be zero (but we do not need to rely on that).\n \t */\n \tif (proc_data->err) {\n-\t\tstruct stub_syscall *sc;\n-\n-\t\tif (proc_data->syscall_data_len < 0 ||\n-\t\t    proc_data->syscall_data_len > (long) mm_idp->syscall_data_len - sizeof(*sc))\n-\t\t\tpanic(\"Syscall data was corrupted by stub (len is: %d, expected maximum: %d)!\",\n-\t\t\t      proc_data->syscall_data_len,\n-\t\t\t      mm_idp->syscall_data_len);\n-\n-\t\tsc = (void *) (((unsigned long) &proc_data->syscall_data) +\n-\t\t\t       proc_data->syscall_data_len);\n-\n-\t\tprintk(UM_KERN_ERR \"%s : length = %d, last offset = %d\",\n-\t\t       __func__, mm_idp->syscall_data_len,\n-\t\t       proc_data->syscall_data_len);\n-\t\tprintk(UM_KERN_ERR \"%s : syscall %ld failed, return value = 0x%lx, expected return value = 0x%lx\\n\",\n-\t\t       __func__, sc->syscall, proc_data->err,\n-\t\t       sc->expected_result);\n-\n-\t\tprintk(UM_KERN_ERR \"    syscall parameters: 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx\\n\",\n-\t\t       sc->arg[0], sc->arg[1], sc->arg[2],\n-\t\t       sc->arg[3], sc->arg[4], sc->arg[5]);\n-\n-\t\tn = sc->cmd_len - sizeof(*sc);\n-\t\tif (n > 0) {\n-\t\t\tprintk(UM_KERN_ERR \"    syscall data 0x%lx + %d\",\n-\t\t\t       STUB_DATA + ((unsigned long) (&sc->data) &\n-\t\t\t\t\t    (UM_KERN_PAGE_SIZE - 1)),\n-\t\t\t       n);\n-\t\t\tprint_hex_dump(UM_KERN_ERR,\n-\t\t\t\t       \"    syscall data: \", 0,\n-\t\t\t\t       16, 4, sc->data, n, 0);\n-\t\t}\n+\t\tsyscall_stub_dump_error(mm_idp);\n \n \t\t/* Store error code in case someone tries to add more syscalls */\n \t\tmm_idp->syscall_data_len = proc_data->err;\ndiff --git a/arch/um/os-Linux/skas/process.c b/arch/um/os-Linux/skas/process.c\nindex 55868eb35727..39941d14bb51 100644\n--- a/arch/um/os-Linux/skas/process.c\n+++ b/arch/um/os-Linux/skas/process.c\n@@ -530,7 +530,8 @@ void userspace(struct uml_pt_regs *regs, unsigned long *aux_fp_regs)\n \t\t\tfatal_sigsegv();\n \n \t\tif (using_seccomp) {\n-\t\t\tstruct stub_data *proc_data = (void *)current_stub_stack();\n+\t\t\tstruct mm_id *mm_id = current_mm_id();\n+\t\t\tstruct stub_data *proc_data = (void *) mm_id->stack;\n \t\t\tint ret;\n \n \t\t\tret = set_stub_state(regs, proc_data, singlestepping());\n@@ -544,6 +545,10 @@ void userspace(struct uml_pt_regs *regs, unsigned long *aux_fp_regs)\n \t\t\tif (proc_data->restart_wait != 0)\n \t\t\t\tpanic(\"Programming error: Flag to only run syscalls in child was not cleared!\");\n \n+\t\t\t/* Mark pending syscalls for flushing */\n+\t\t\tproc_data->syscall_data_len = mm_id->syscall_data_len;\n+\t\t\tmm_id->syscall_data_len = 0;\n+\n \t\t\tproc_data->signal = 0;\n \t\t\tproc_data->futex = FUTEX_IN_CHILD;\n \t\t\tCATCH_EINTR(syscall(__NR_futex, &proc_data->futex,\n@@ -556,6 +561,13 @@ void userspace(struct uml_pt_regs *regs, unsigned long *aux_fp_regs)\n \n \t\t\tsig = proc_data->signal;\n \n+\t\t\tif (sig == SIGTRAP && proc_data->err != 0) {\n+\t\t\t\tprintk(UM_KERN_ERR \"%s - Error flushing stub syscalls\",\n+\t\t\t\t       __func__);\n+\t\t\t\tsyscall_stub_dump_error(mm_id);\n+\t\t\t\tfatal_sigsegv();\n+\t\t\t}\n+\n \t\t\tret = get_stub_state(regs, proc_data);\n \t\t\tif (ret) {\n \t\t\t\tprintk(UM_KERN_ERR \"%s - failed to get regs: %d\",\n@@ -586,6 +598,14 @@ void userspace(struct uml_pt_regs *regs, unsigned long *aux_fp_regs)\n \t\t\t\tGET_FAULTINFO_FROM_MC(regs->faultinfo, mcontext);\n \t\t\t}\n \t\t} else {\n+\t\t\t/* With ptrace, we need to explicitly flush all pending syscalls. */\n+\t\t\terr = syscall_stub_flush(current_mm_id());\n+\t\t\tif (err) {\n+\t\t\t\tprintk(UM_KERN_ERR \"%s - Error flushing stub syscalls: %d\",\n+\t\t\t\t       __func__, -err);\n+\t\t\t\tfatal_sigsegv();\n+\t\t\t}\n+\n \t\t\t/*\n \t\t\t * This can legitimately fail if the process loads a\n \t\t\t * bogus value into a segment register.  It will\n@@ -760,6 +780,10 @@ int copy_context_skas0(struct mm_id *id, struct mm_id *from)\n \n \tchild_data->child_err = -ESRCH;\n \n+\terr = syscall_stub_flush(from);\n+\tif (err)\n+\t\treturn err;\n+\n \tif (using_seccomp) {\n \t\terr = set_stub_state(&thread_regs, data, 0);\n \t\tif (err)\n",
    "prefixes": [
        "v2",
        "28/28"
    ]
}