get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 1707772,
    "url": "http://patchwork.ozlabs.org/api/patches/1707772/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-um/patch/20221122100759.208290-16-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-16-benjamin@sipsolutions.net>",
    "list_archive_url": null,
    "date": "2022-11-22T10:07:46",
    "name": "[v2,15/28] um: Create signal stack memory assignment in stub_data",
    "commit_ref": null,
    "pull_url": null,
    "state": "not-applicable",
    "archived": false,
    "hash": "6ab4661bf298a48c1bac7622cd1b57803e6585e5",
    "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-16-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/1707772/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/1707772/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=EwPg99E/;\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=EsygNAtZ;\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=dapKscrs;\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 4NGgRb071Sz23nn\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 22 Nov 2022 21:27:07 +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 1oxQUS-007nuy-RM; Tue, 22 Nov 2022 10:26:56 +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 1oxQTL-007nKg-7F\n\tfor linux-um@bombadil.infradead.org; Tue, 22 Nov 2022 10:25:47 +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-003P1k-0L\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 1oxQEp-006IGn-34;\n\tTue, 22 Nov 2022 11:10:48 +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=4o9WIY8EUijQE2CYU8HXMxhRGc7B9xAzaBhBNX13dBE=; b=EwPg99E/aq1qvd\n\tEQjBFQiMsp9ZmPQXzkKIPX5hgi/Bsl01N0dcQcYPUua+ptFyNhpC58r+38EESUIu4RvKuTDLS7YPE\n\t7hAVy9CWhgHyy60e0THNH3twzvbweeui5RMVw7dpIK2ncu+QVjxZfjtoghJ909qCxh/QPoj9pwl5H\n\t+TOFcz2qAjNW6GVIRTTpMKQerhyjs4dEohwLd41p9sh7Lu/vUW3pJckcQBWsZM+sbyo1k0CwdPAjI\n\tsFQdagiJQvuDdz1TuKXvX9gyzXG+IPRV/jAnj3kzzvjINXtTkptdvgd+WkDB9BFiAFwSKK2Q05s+x\n\tGtk0uRGW9Bd1hhoNBI0w==;",
            "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=96ItsAytwJTttTAMWODMnbHwjuNRvBXmNArE3fyRN6c=; b=EsygNAtZwxGtNrApwH35oVzpt1\n\tdGgv1D+oG6SO8gs1DvcfSbGJKN3aowiIVoHmulM9gZ9ILOR6ldwfUJ9WpgCLe49RVsjB806NQ041+\n\tW6MoLah/I/t2in1numrGpH5Q2AkA0gXaK/SYsVzqHqaJ9u4svLlWH9rDrNjvMIzRjvAC+xcCgOpux\n\ttAz2okCk+eJa1b/XsmW45nHEr+3ENVYMY0Ro0rv/D8uPrjkhwjIpWB+fhCZplaGHj8+YKSMi5VE9c\n\tX0j1I/4Zb4aUtv0EuK6MnDsdGthAW6LwMIdxVSyLWwgVLFPGTVu5mfXeg72Gl5APcqpC/37YjgARz\n\tI/hOFPnA==;",
            "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=96ItsAytwJTttTAMWODMnbHwjuNRvBXmNArE3fyRN6c=;\n\tt=1669111857; x=1670321457; b=dapKscrsqXC9TDhj7Gd2UaeR4Z5psXX2k0H13D2orLyC9U4\n\t6fUtu+z8/3ukvLv1yYD0whkPNp4X3G/LF+TTa6GYHnx476TK0yHAUUMSybF/tMm4TjmqdcFbSjKxr\n\twPDm3Pqw/Q0PLf8HFjtJ7mKLtlHK+UOKs54DGiaJHgz33mBU9pTlNidijLlRNilsAl6XrM8u+mB9N\n\tKQ+8QxkSFlvHXkkzFsm9i8GLPsjGwL0d/eq2CgZQBPIcufcpEPOimGprjJ4DfMNhFzdR4zQFW0w2d\n\t3xPCpluGpof9Bjn6Q02vTQjijgGuUPp9aJKHimdgcZ6mJw6imICdqOe1Z+dVtj3g==;"
        ],
        "From": "benjamin@sipsolutions.net",
        "To": "linux-um@lists.infradead.org",
        "Cc": "Benjamin Berg <benjamin@sipsolutions.net>",
        "Subject": "[PATCH v2 15/28] um: Create signal stack memory assignment in\n stub_data",
        "Date": "Tue, 22 Nov 2022 11:07:46 +0100",
        "Message-Id": "<20221122100759.208290-16-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_101101_456189_7B6A16CC ",
        "X-CRM114-Status": "GOOD (  17.45  )",
        "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> When we\n switch\n    to use seccomp, we need both the signal stack and other data (i.e. syscall\n    information) to co-exist in the stub data. To facilitate this,\n start by defining\n    separate memory areas for the [...]\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\nWhen we switch to use seccomp, we need both the signal stack and other\ndata (i.e. syscall information) to co-exist in the stub data. To\nfacilitate this, start by defining separate memory areas for the stack\nand syscall data.\n\nThis moves the signal stack onto a new page as the memory area is not\nsufficient to hold both signal stack and syscall information.\n\nOnly change the signal stack setup for now, as the syscall code will be\nreworked later.\n\nSigned-off-by: Benjamin Berg <benjamin@sipsolutions.net>\n---\n arch/um/include/shared/as-layout.h      |  2 +-\n arch/um/include/shared/skas/stub-data.h | 12 ++++++++++++\n arch/um/kernel/skas/clone.c             |  7 +++++--\n arch/um/kernel/skas/mmu.c               |  6 +++---\n arch/um/os-Linux/skas/process.c         | 17 ++++++++++-------\n arch/x86/um/shared/sysdep/stub_32.h     |  3 ++-\n arch/x86/um/shared/sysdep/stub_64.h     |  5 +++--\n 7 files changed, 36 insertions(+), 16 deletions(-)",
    "diff": "diff --git a/arch/um/include/shared/as-layout.h b/arch/um/include/shared/as-layout.h\nindex 9a0bd648d872..70d3df8ae814 100644\n--- a/arch/um/include/shared/as-layout.h\n+++ b/arch/um/include/shared/as-layout.h\n@@ -23,7 +23,7 @@\n #define STUB_START stub_start\n #define STUB_CODE STUB_START\n #define STUB_DATA (STUB_CODE + UM_KERN_PAGE_SIZE)\n-#define STUB_END (STUB_DATA + UM_KERN_PAGE_SIZE)\n+#define STUB_END (STUB_DATA + 2*UM_KERN_PAGE_SIZE)\n \n #ifndef __ASSEMBLY__\n \ndiff --git a/arch/um/include/shared/skas/stub-data.h b/arch/um/include/shared/skas/stub-data.h\nindex 5e3ade3fb38b..3281809a7272 100644\n--- a/arch/um/include/shared/skas/stub-data.h\n+++ b/arch/um/include/shared/skas/stub-data.h\n@@ -8,10 +8,22 @@\n #ifndef __STUB_DATA_H\n #define __STUB_DATA_H\n \n+#include <linux/compiler_types.h>\n+#include <as-layout.h>\n+\n struct stub_data {\n \tunsigned long offset;\n \tint fd;\n \tlong parent_err, child_err;\n+\n+\t/* 128 leaves enough room for additional fields in the struct */\n+\tunsigned char syscall_data[UM_KERN_PAGE_SIZE - 128] __aligned(16);\n+\n+\t/* Stack for our signal handlers and for calling into . */\n+\tunsigned char sigstack[UM_KERN_PAGE_SIZE] __aligned(UM_KERN_PAGE_SIZE);\n };\n \n+typedef char stub_data_sizecheck\n+\t[sizeof(struct stub_data) == 2*UM_KERN_PAGE_SIZE ? 1 : -1] __always_unused;\n+\n #endif\ndiff --git a/arch/um/kernel/skas/clone.c b/arch/um/kernel/skas/clone.c\nindex ff5061f29167..a631566e4a20 100644\n--- a/arch/um/kernel/skas/clone.c\n+++ b/arch/um/kernel/skas/clone.c\n@@ -24,11 +24,14 @@\n void __attribute__ ((__section__ (\".__syscall_stub\")))\n stub_clone_handler(void)\n {\n-\tstruct stub_data *data = get_stub_page();\n+\tstruct stub_data *data = get_stub_page() + UM_KERN_PAGE_SIZE;\n \tlong err;\n \n+\t/* syscall data as a temporary stack area (bottom half). */\n \terr = stub_syscall2(__NR_clone, CLONE_PARENT | CLONE_FILES | SIGCHLD,\n-\t\t\t    (unsigned long)data + UM_KERN_PAGE_SIZE / 2);\n+\t\t\t    (unsigned long) data->syscall_data +\n+\t\t\t\t\t    sizeof(data->syscall_data) / 2 -\n+\t\t\t\t\t    sizeof(void *));\n \tif (err) {\n \t\tdata->parent_err = err;\n \t\tgoto done;\ndiff --git a/arch/um/kernel/skas/mmu.c b/arch/um/kernel/skas/mmu.c\nindex 125df465e8ea..6ccb561b4373 100644\n--- a/arch/um/kernel/skas/mmu.c\n+++ b/arch/um/kernel/skas/mmu.c\n@@ -21,7 +21,7 @@ int init_new_context(struct task_struct *task, struct mm_struct *mm)\n \tunsigned long stack = 0;\n \tint ret = -ENOMEM;\n \n-\tstack = get_zeroed_page(GFP_KERNEL);\n+\tstack = __get_free_pages(GFP_KERNEL|__GFP_ZERO, 1);\n \tif (stack == 0)\n \t\tgoto out;\n \n@@ -52,7 +52,7 @@ int init_new_context(struct task_struct *task, struct mm_struct *mm)\n \n  out_free:\n \tif (to_mm->id.stack != 0)\n-\t\tfree_page(to_mm->id.stack);\n+\t\tfree_pages(to_mm->id.stack, 1);\n  out:\n \treturn ret;\n }\n@@ -74,6 +74,6 @@ void destroy_context(struct mm_struct *mm)\n \t}\n \tos_kill_ptraced_process(mmu->id.u.pid, 1);\n \n-\tfree_page(mmu->id.stack);\n+\tfree_pages(mmu->id.stack, 1);\n \tfree_ldt(mmu);\n }\ndiff --git a/arch/um/os-Linux/skas/process.c b/arch/um/os-Linux/skas/process.c\nindex 4198ca21e4ab..3917bd862315 100644\n--- a/arch/um/os-Linux/skas/process.c\n+++ b/arch/um/os-Linux/skas/process.c\n@@ -205,6 +205,7 @@ extern char __syscall_stub_start[];\n static int userspace_tramp(void *stack)\n {\n \tstruct sigaction sa;\n+\tstruct stub_data *data;\n \tvoid *addr;\n \tint fd;\n \tunsigned long long offset;\n@@ -228,15 +229,16 @@ static int userspace_tramp(void *stack)\n \n \tfd = phys_mapping(uml_to_phys(stack), &offset);\n \taddr = mmap((void *) STUB_DATA,\n-\t\t    UM_KERN_PAGE_SIZE, PROT_READ | PROT_WRITE,\n+\t\t    sizeof(struct stub_data), PROT_READ | PROT_WRITE,\n \t\t    MAP_FIXED | MAP_SHARED, fd, offset);\n \tif (addr == MAP_FAILED) {\n \t\tos_info(\"mapping segfault stack at 0x%lx failed, errno = %d\\n\",\n \t\t\tSTUB_DATA, errno);\n \t\texit(1);\n \t}\n+\tdata = (void *) addr;\n \n-\tset_sigstack((void *) STUB_DATA, UM_KERN_PAGE_SIZE);\n+\tset_sigstack((void *) &data->sigstack, sizeof(data->sigstack));\n \tsigemptyset(&sa.sa_mask);\n \tsa.sa_flags = SA_ONSTACK | SA_NODEFER | SA_SIGINFO;\n \tsa.sa_sigaction = (void *) segv_handler;\n@@ -470,11 +472,12 @@ static int __init init_thread_regs(void)\n \tthread_regs[REGS_IP_INDEX] = STUB_CODE +\n \t\t\t\t(unsigned long) stub_clone_handler -\n \t\t\t\t(unsigned long) __syscall_stub_start;\n-\tthread_regs[REGS_SP_INDEX] = STUB_DATA + UM_KERN_PAGE_SIZE -\n-\t\tsizeof(void *);\n-#ifdef __SIGNAL_FRAMESIZE\n-\tthread_regs[REGS_SP_INDEX] -= __SIGNAL_FRAMESIZE;\n-#endif\n+\n+\t/* syscall data as a temporary stack area (top half). */\n+\tthread_regs[REGS_SP_INDEX] = STUB_DATA +\n+\t\t\t\t     offsetof(struct stub_data, syscall_data) +\n+\t\t\t\t     sizeof(((struct stub_data *) 0)->syscall_data) -\n+\t\t\t\t     sizeof(void *);\n \treturn 0;\n }\n \ndiff --git a/arch/x86/um/shared/sysdep/stub_32.h b/arch/x86/um/shared/sysdep/stub_32.h\nindex c413927c6ad0..85a224506530 100644\n--- a/arch/x86/um/shared/sysdep/stub_32.h\n+++ b/arch/x86/um/shared/sysdep/stub_32.h\n@@ -87,6 +87,7 @@ static __always_inline void trap_myself(void)\n \n static __always_inline void remap_stack_and_trap(void)\n {\n+\t/* The stack here is in syscall data (i.e. on the first page) */\n \t__asm__ volatile (\n \t\t\"movl %%esp,%%ebx ;\"\n \t\t\"andl %0,%%ebx ;\"\n@@ -102,7 +103,7 @@ static __always_inline void remap_stack_and_trap(void)\n \t\t\"g\" (offsetof(struct stub_data, fd)),\n \t\t\"g\" (offsetof(struct stub_data, offset)),\n \t\t\"g\" (offsetof(struct stub_data, child_err)),\n-\t\t\"c\" (UM_KERN_PAGE_SIZE),\n+\t\t\"c\" (2*UM_KERN_PAGE_SIZE),\n \t\t\"d\" (PROT_READ | PROT_WRITE),\n \t\t\"S\" (MAP_FIXED | MAP_SHARED)\n \t\t:\ndiff --git a/arch/x86/um/shared/sysdep/stub_64.h b/arch/x86/um/shared/sysdep/stub_64.h\nindex 361a6a9fe1e4..2e7acba74dc3 100644\n--- a/arch/x86/um/shared/sysdep/stub_64.h\n+++ b/arch/x86/um/shared/sysdep/stub_64.h\n@@ -87,6 +87,7 @@ static __always_inline void trap_myself(void)\n \n static __always_inline void remap_stack_and_trap(void)\n {\n+\t/* The stack here is in syscall data (i.e. on the first page) */\n \t__asm__ volatile (\n \t\t\"movq %0,%%rax ;\"\n \t\t\"movq %%rsp,%%rdi ;\"\n@@ -105,7 +106,7 @@ static __always_inline void remap_stack_and_trap(void)\n \t\t\"g\" (offsetof(struct stub_data, fd)),\n \t\t\"g\" (offsetof(struct stub_data, offset)),\n \t\t\"g\" (offsetof(struct stub_data, child_err)),\n-\t\t\"S\" (UM_KERN_PAGE_SIZE),\n+\t\t\"S\" (2*UM_KERN_PAGE_SIZE),\n \t\t\"d\" (PROT_READ | PROT_WRITE)\n \t\t:\n \t\t__syscall_clobber, \"r10\", \"r8\", \"r9\");\n@@ -121,6 +122,6 @@ static __always_inline void *get_stub_page(void)\n \t\t: \"=a\" (ret)\n \t\t: \"g\" (~(UM_KERN_PAGE_SIZE - 1)));\n \n-\treturn (void *)ret;\n+\treturn (void *)ret - UM_KERN_PAGE_SIZE;\n }\n #endif\n",
    "prefixes": [
        "v2",
        "15/28"
    ]
}