From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id BECF4E77199 for ; Thu, 9 Jan 2025 08:06:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 341BD6B0082; Thu, 9 Jan 2025 03:06:08 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 2F1F56B0085; Thu, 9 Jan 2025 03:06:08 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1931A6B0088; Thu, 9 Jan 2025 03:06:08 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id EE7CA6B0082 for ; Thu, 9 Jan 2025 03:06:07 -0500 (EST) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 38E77141780 for ; Thu, 9 Jan 2025 08:06:07 +0000 (UTC) X-FDA: 82987180374.30.5963CEF Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) by imf04.hostedemail.com (Postfix) with ESMTP id 17DD740009 for ; Thu, 9 Jan 2025 08:06:04 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=suse.com header.s=google header.b=dNuNeTQS; spf=pass (imf04.hostedemail.com: domain of pmladek@suse.com designates 209.85.221.46 as permitted sender) smtp.mailfrom=pmladek@suse.com; dmarc=pass (policy=quarantine) header.from=suse.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1736409965; a=rsa-sha256; cv=none; b=0l6clcYUddIYejxAoB7v9vUUttdzW8imb3D0NdVZndIPgTypdAqOnWDt9nJ8gecTPsugS0 hpH+AfLD2um4PeXn6bVDVmQlZiFdT3J0OUGHstnwrUYm21eVNpXpKBR0cbf4Gponj1tMFD z4Hdv5ZbaaR4vVVwR1mVMd9r1AaLAKE= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=suse.com header.s=google header.b=dNuNeTQS; spf=pass (imf04.hostedemail.com: domain of pmladek@suse.com designates 209.85.221.46 as permitted sender) smtp.mailfrom=pmladek@suse.com; dmarc=pass (policy=quarantine) header.from=suse.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1736409965; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=9ITqsiinxyZSSgCuY2qBILl0Bh+ReB71Q93l6wv0brE=; b=aU1Z1EcSWkSXAY8WtEu+Qv4yBZv8khfqYDF29fc0OpkQqftu1jo0ggum+5CdViYiiGQpS8 TzLm/1iM1jNXXQAr/ovyJOu5O3ArpCMkZONYT1U8HuNtEsyOFwP9xjw1QCztOdEEIq7N+0 0VNxDgvgKtpI5rqtX4kEF4RE5T5gOBE= Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-38a8b17d7a7so296642f8f.2 for ; Thu, 09 Jan 2025 00:06:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1736409963; x=1737014763; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=9ITqsiinxyZSSgCuY2qBILl0Bh+ReB71Q93l6wv0brE=; b=dNuNeTQSJoi6jkfMLxP7su0bZmG+OAMfd8p/q7Wh9QNutRINX7ESpbjAU56KkmJ/aO CdqpKSKAuwrrIpHOWkI1huBPTAIGRXb4/Nf+i3a+uR1s+uXrMm7GBD46JlkGCbdmsY+X Q12cfaMWm4JO8rg81xznD8JOOaXqkuFZV2CubF2JNC1rCS2PLKRZeD3SID7jPk30KQZU 2cS4uF3gOULBJXH4ac9o8qtbiy0h6i1txOrpky6+dBr5F22sKFj2Z19ew9HPfi+YTPxc ZopwM4fD1ICgDOriGE11s4JDc/Bf+YfwUPf/lg7YHM8oJpkwslKB6bSdI4yZ7HobcTqy F9Qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736409963; x=1737014763; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=9ITqsiinxyZSSgCuY2qBILl0Bh+ReB71Q93l6wv0brE=; b=Z59P5/IyRKobWIBJ8N6SCLY7IhVfeLWxJ1ICNcMfhti2OlPlAuNhHK4APkrD/AVY9w +VN0XRvlk9ybqn1nNm60tEmDyMTwE01n6DlTWpZ87aw75qOuWAzuxeAj6XQblVbxMVcI OZlaTPQebFUtFNmNRiNCi31Hj7YfUXfPSaWlZQvbH3j36hIJKvVyr8JiuQZhlsA8JvvR CExu9B+6B43XpSLdbu40SAX5DY1MwIq+hNSv5dN56afb59fwVmfkTkjwtnc9thYVWHn3 gmB40Fjm9AkshsPqWBdzY401VhxFc9vsSC+APgRhvic6t8LDZykjXveuJX4RSKlkiomq H1Fg== X-Forwarded-Encrypted: i=1; AJvYcCXUYVwS/PEgdH4waru0iBZ0di03ZGNcuvrMAz5Vz7A3kJFdjp2+6hLv7nT1dT//2pcw8z9UWljF/w==@kvack.org X-Gm-Message-State: AOJu0YxJG6UwPU17q883shDAyfUJXCKarpMVMYpKBKA7oLRPow0WDdl3 SSTFfdxb/0mBEvIolQNuEoAQdlLSFFMTlJPXKExXKKDakRtow3ZnSIPy+aKxX3c= X-Gm-Gg: ASbGncthTE7oxaDBE+dqnEJD0J/vn8Z2jHCFOOCcHeHyrnfHDp3kNXnmK3dl3hADStj Apvan7KTIZyxybBOkttQ4nUIIG3AASOjRqOsyrlFPJCn7Rbg42sTJtWuA/R25pWI8kRQclb/LZX VQNcO/2BIPR62vbd4f37NIDoRdFdx+HMtrbzBhIedD+rjEf8SeCKflGHClLGQ+3/0BRGN7mloFA ExVDFErtKDyD712lCoUANnrbSStPu+ta03SsK2+YTlgRyKP7YIn4VJqdQ== X-Google-Smtp-Source: AGHT+IGIKmYup4HfNyvVOdshyFsmquudgwv4hp4j0NV3FCOB24xiS/Vj/WSSzxsQI5fRwQg1rXrPAw== X-Received: by 2002:adf:c08d:0:b0:38a:87cc:fb2c with SMTP id ffacd0b85a97d-38a87ccfc17mr3141056f8f.18.1736409963511; Thu, 09 Jan 2025 00:06:03 -0800 (PST) Received: from pathway.suse.cz ([176.114.240.50]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-38a8e4b7f79sm1074729f8f.69.2025.01.09.00.06.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Jan 2025 00:06:03 -0800 (PST) Date: Thu, 9 Jan 2025 09:06:00 +0100 From: Petr Mladek To: Petr Pavlu Cc: rppt@kernel.org, akpm@linux-foundation.org, mmaslanka@google.com, mcgrof@kernel.org, regressions@lists.linux.dev, linux-modules@vger.kernel.org, linux-mm@kvack.org, live-patching@vger.kernel.org, joe.lawrence@redhat.com, jpoimboe@kernel.org Subject: Re: [PATCH] module: Fix writing of livepatch relocations in ROX text Message-ID: References: <0530eee7-f329-4786-bea3-c9c66d5f0bed@suse.com> <20250107153507.14733-1-petr.pavlu@suse.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20250107153507.14733-1-petr.pavlu@suse.com> X-Rspamd-Queue-Id: 17DD740009 X-Stat-Signature: taxje7858gr6ghx73sgstb4t45xedm4j X-Rspam-User: X-Rspamd-Server: rspam09 X-HE-Tag: 1736409964-885983 X-HE-Meta: U2FsdGVkX18SM401ZR6EH+ZDYx9aStTEUdRalCjYY/otTS5IZ/QlQt59fFOaBFpCzeFdcryXDyy7U+alE1h+qSDwNhZCj4lrxFJo6o/gkJB9f7KwbxU0SzNH0PUTdBEbPrNskfgaJf5Y+ZQMZDdg0zEoqjmRpceEVvcgrysraYYccjrmjnLO7okfJuIYkGnsC0cPcvgMsJ5JezF8KuPPutm+m8csfZyQhWS+gKBP4xySIm3+ZMP8Ag4LRSZPqbIbVJ/aycC4U3YCSg3UcCMnWHfNu/heMvkohA1Wja7KsnCImx8Vr0mHD0ozDijieHssvGrO4BsdSR6is451au5rBLatZznXiiZG6WioiyoWBY9loGbxIqMuHwbKJ+x/ovqBlOif4Jfy6KYdIcguhVSKVxDUMYFjSHUfynPyCx6W83p2bJoSKAvUrqI1DQg/n697y76rj1cTNG8L/9TpmcWLek64oJfuI0Q/f5prsd2Rb0sdsnclxXILwMjLvp7zEzrEuI6/BGr1luFYwlsKEe8MyXwCC9U0zDKtkwT4X+N7xU5UZIH6lpkOAb6VrURI4YMtxPDNR5oytTFhiaKYzpOtRNjcEzp6WpdEhhaHcSFfStrX9HIW11YBuEQt46PT/z9jUnPqaNEcuCDZ7UkRmkQGsFZB5+HE0Bfz2g2a4G4TqiCozINLloh6me6oqwk2iEUruP6wK3HPN75NO0zJcyH81RB+OoB02nLTzQlfGwpE2Oa5n3HEejn9EJZxAQUpVer3UJ9FnhXaYYfkrYeoGco8+TiMFuNKmuDNQ4vZPaiatWHVBM8lFP0UaKBkPMR8MjTr/Rwa0Fd5Wrts+tB7dAtdkVK6F5sGa6UwYUAI79/ew6eqcORlkoy05ow8xHt0eaHoOqNwN3isx33qAy80b84C2RVmWgosGbUCWkvZrc3eHQya9V/H+rsP7wJmamylwpWr/EjSpw8aemIYfZjEGPY W88SO3Ea 5JpW8JcSkz7yww2GrXvVU5+sWpanRrouiy96O/bHXNbxrj/9fBpldelXaFLvx6UNfZLyAJLY/ZadTwQTAXxlGau6U5eH15m+W4Bbo88h2CTmWjMdHa/Qf5agM9jKmVa5q6KjhubrMgYj6xieJ62V9kVtx1ZlizinFkjzpCPkwBNwO0Sw/f+ttGkWQ7p0z2lIkWVG6zhJyM4IMT5RV5XhXYvD/TZY0C66wdy3ylFe6HkaGVmRlR+ZBOTdEqnx4yYJFnWVBieTyH97TrC8/haW3+AVIOSielwsgIZXqnxRjun53iXZgKc/FHejE3RpWpiJVZeM5B8tBAVD9PcwDeEARb+BMGtq03npYu5+AGdJdA11L8FqGXatpo4drjADRpzORDWYKepN4of2A8l/zfRDeVeKolg== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Tue 2025-01-07 16:34:57, Petr Pavlu wrote: > A livepatch module can contain a special relocation section > .klp.rela.. to apply its relocations at the appropriate > time and to additionally access local and unexported symbols. When > points to another module, such relocations are processed > separately from the regular module relocation process. For instance, only > when the target actually becomes loaded. > > With CONFIG_STRICT_MODULE_RWX, when the livepatch core decides to apply > these relocations, their processing results in the following bug: > > [ 25.827238] BUG: unable to handle page fault for address: 00000000000012ba > [ 25.827819] #PF: supervisor read access in kernel mode > [ 25.828153] #PF: error_code(0x0000) - not-present page > [ 25.828588] PGD 0 P4D 0 > [ 25.829063] Oops: Oops: 0000 [#1] PREEMPT SMP NOPTI > [ 25.829742] CPU: 2 UID: 0 PID: 452 Comm: insmod Tainted: G O K 6.13.0-rc4-00078-g059dd502b263 #7820 > [ 25.830417] Tainted: [O]=OOT_MODULE, [K]=LIVEPATCH > [ 25.830768] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.0-20220807_005459-localhost 04/01/2014 > [ 25.831651] RIP: 0010:memcmp+0x24/0x60 > [ 25.832190] Code: [...] > [ 25.833378] RSP: 0018:ffffa40b403a3ae8 EFLAGS: 00000246 > [ 25.833637] RAX: 0000000000000000 RBX: ffff93bc81d8e700 RCX: ffffffffc0202000 > [ 25.834072] RDX: 0000000000000000 RSI: 0000000000000004 RDI: 00000000000012ba > [ 25.834548] RBP: ffffa40b403a3b68 R08: ffffa40b403a3b30 R09: 0000004a00000002 > [ 25.835088] R10: ffffffffffffd222 R11: f000000000000000 R12: 0000000000000000 > [ 25.835666] R13: ffffffffc02032ba R14: ffffffffc007d1e0 R15: 0000000000000004 > [ 25.836139] FS: 00007fecef8c3080(0000) GS:ffff93bc8f900000(0000) knlGS:0000000000000000 > [ 25.836519] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > [ 25.836977] CR2: 00000000000012ba CR3: 0000000002f24000 CR4: 00000000000006f0 > [ 25.837442] Call Trace: > [ 25.838297] > [ 25.841083] __write_relocate_add.constprop.0+0xc7/0x2b0 > [ 25.841701] apply_relocate_add+0x75/0xa0 > [ 25.841973] klp_write_section_relocs+0x10e/0x140 > [ 25.842304] klp_write_object_relocs+0x70/0xa0 > [ 25.842682] klp_init_object_loaded+0x21/0xf0 > [ 25.842972] klp_enable_patch+0x43d/0x900 > [ 25.843572] do_one_initcall+0x4c/0x220 > [ 25.844186] do_init_module+0x6a/0x260 > [ 25.844423] init_module_from_file+0x9c/0xe0 > [ 25.844702] idempotent_init_module+0x172/0x270 > [ 25.845008] __x64_sys_finit_module+0x69/0xc0 > [ 25.845253] do_syscall_64+0x9e/0x1a0 > [ 25.845498] entry_SYSCALL_64_after_hwframe+0x77/0x7f > [ 25.846056] RIP: 0033:0x7fecef9eb25d > [ 25.846444] Code: [...] > [ 25.847563] RSP: 002b:00007ffd0c5d6de8 EFLAGS: 00000246 ORIG_RAX: 0000000000000139 > [ 25.848082] RAX: ffffffffffffffda RBX: 000055b03f05e470 RCX: 00007fecef9eb25d > [ 25.848456] RDX: 0000000000000000 RSI: 000055b001e74e52 RDI: 0000000000000003 > [ 25.848969] RBP: 00007ffd0c5d6ea0 R08: 0000000000000040 R09: 0000000000004100 > [ 25.849411] R10: 00007fecefac7b20 R11: 0000000000000246 R12: 000055b001e74e52 > [ 25.849905] R13: 0000000000000000 R14: 000055b03f05e440 R15: 0000000000000000 > [ 25.850336] > [ 25.850553] Modules linked in: deku(OK+) uinput > [ 25.851408] CR2: 00000000000012ba > [ 25.852085] ---[ end trace 0000000000000000 ]--- > > The problem is that the .klp.rela.. relocations are > processed after the module was already formed and mod->rw_copy was reset. > However, the code in __write_relocate_add() calls module_writable_address() > which translates the target address 'loc' still to > 'loc + (mem->rw_copy - mem->base)', with mem->rw_copy now being 0. > > Fix the problem by returning directly 'loc' in module_writable_address() > when the module is already formed. Function __write_relocate_add() knows to > use text_poke() in such a case. > > Fixes: 0c133b1e78cd ("module: prepare to handle ROX allocations for text") > Reported-by: Marek Maslanka > Closes: https://lore.kernel.org/linux-modules/CAGcaFA2hdThQV6mjD_1_U+GNHThv84+MQvMWLgEuX+LVbAyDxg@mail.gmail.com/ > Signed-off-by: Petr Pavlu The fix makes sense. I could confirm that it fixes the problem and the livepatch relocations works again. I have tested it on x86_64 with current Linus' origin/master and the selftest from the patchset adding klp-convert tool, see https://lore.kernel.org/r/20240827123052.9002-7-lhruska@suse.cz Reviewed-by: Petr Mladek Tested-by: Petr Mladek Best Regards, Petr