From nobody Sun Feb 8 09:13:17 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7F6AB149C7B for ; Fri, 26 Dec 2025 14:06:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766758006; cv=none; b=kF8+SpvdNP4/xNfxwWSE1X0e9ZUBi8A25RHJC9Aknl5A4RkvPj9g0N8jdg2QFOOGj42J7B7GjZBkB+rKpfnfoCf01tlwFDOKGAnf9b5A2QZkt0TfK7m+U7FGS2AGLVutlxlJOMYby5ffsrnOrK0sNR26iNzzpOueHuqd56zLnKc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766758006; c=relaxed/simple; bh=BrdeekQoWBb0t966L1Q6fsOapYp+k2p1BFG+1lUEPRE=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=Ml98yXAgFPy6bbgc8unGJMf6GRs1eZPMhe7byCQsDB9Dwg9rmza2+zmkY+ky50wWF52Ps4bdIVQhZgAbXFr0bRuvvglxLaUmtdYxI1RrV/B8jtzvCGf++zJ+ldqPX06FhS0JFcRZnahTRDxqYlu4ydMGV5mu0K3+QcETnfIUg8U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=gGnLlVHd; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=dtVW2EvQ; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="gGnLlVHd"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="dtVW2EvQ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1766758003; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=Y8CRsSUdURwt+1GZdBpSW/7VDn07syF3EYe9jZf8o5o=; b=gGnLlVHdENHQi7Y3MnABZz/vky3wuusZf6WXW9zxQD5XLHWJPpvFo8Qgxu2sDrQ2Lnzij0 OzMTT+wrMdNl0jXZjIJ/3GtfzgW7KINYewZjpCDQiWSDt+IDaMZPx3phc9SoQnPotsZvPK e3alYzTtaCxyVW6vkmU+I+akV5cV7Yo= Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-327-VK98Bsi6NumC-rxw_b3hAA-1; Fri, 26 Dec 2025 09:06:41 -0500 X-MC-Unique: VK98Bsi6NumC-rxw_b3hAA-1 X-Mimecast-MFC-AGG-ID: VK98Bsi6NumC-rxw_b3hAA_1766758000 Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-7d5564057d0so16280023b3a.0 for ; Fri, 26 Dec 2025 06:06:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1766758000; x=1767362800; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=Y8CRsSUdURwt+1GZdBpSW/7VDn07syF3EYe9jZf8o5o=; b=dtVW2EvQL0K5wiH16boup/Gd/3SWpkpIfrKCUivKus7Q00Uwnh3Z5z321xCnS8J7hD f6gSmmm1jjFazEi3ID5HGXAn3dD1L1f4Ool8C3T3+XQPMpo1TjKhCwmXM0NZlvaxAPqu I0HKVIRfyqV9comMd5k85LiY5mv/r0EY1/VJ79KwxwKmj8H2vvBVPn1r+u6KTz4ldIZY BntfZrUiQ9ofnKQZWRv2W08RbrpJtRmYZIKc5s2lzWC0LaR8suIfjztYIuY87k9GO9oK /aerYs3GQ0txZr448w9IP1edSesBapX09w7ML2cUJiqWwjN8hmXIIma/KIwNDYiGR2hL qoAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766758000; x=1767362800; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Y8CRsSUdURwt+1GZdBpSW/7VDn07syF3EYe9jZf8o5o=; b=Q63Xb6hNJEpuCoY847b02+I48Y6Cam2mBZBJ3TcM6jWZIbX16t+Rt8clm02S63HWbW 1jBrYFk+qgsPLh4jtrZUgjQUzeZpZBm9pvnH8ybN3pgN2meYOAvhN9YX1axUqT6RLA0k VZS02Y4r6a7KGoV/7H8VMDCVfNHbWc0Pw1j0ihzZIrJWV1A/f7zltF6ZOf/9CGJs28Hc BIVyl8XrGyvWEL3J2qDgdBhSIr5VZL3sULazI5wAlSoyXGiJGIRHgLX8KyvHWXBIBGp8 TnaCr/2VouW6f0kwNHhZ8f5Ue70hpVqClomQCqKMjbqyv2Bjq418VmcJv5hY8HNVJ5VJ oxnQ== X-Forwarded-Encrypted: i=1; AJvYcCV41jJD25nT8yJavZgJIyITQl+ruuG8ODl9yM+ZPT7ucOp78/zr49QEKz+YAX4oc5QxAhKaCbSbLyz3WQI=@vger.kernel.org X-Gm-Message-State: AOJu0YyuwJYUY7LsuiNe3H6lNUy5PX48tjNIajZjOdGw++TzrxF+gP1e PVi14PYI7MN/WjehZKkrfSDc8MBzHwfRY9zzxzsBi4jH3ZGoFePyukv6B2hqA4vJnybJdby2RKE dTRwkfVtPboRcQHLMI2q8x1ZxbGE8jbTqXTZfY4M8EyKmXpxzF/FVdsCIm9bBZuQ78w== X-Gm-Gg: AY/fxX69R40X2X2vBlVNi+qduQ0DDkklYU+UQA9tgWN3KHzqi9EsYKjI7J15diKAP2u aQ+dfsatDqjd2ErkK05cM/8ybb1X6Fho8Fu/YbZtrhdFMkxajXIhlifKg0OdeS6Sz5uInxf6css 31qc+Cfq3MNdT5LFqh+LlJE3EnM+XLDUwGf4VEnDlIFVeR034ya3K3BJoj2LdvGSly5i6axViT3 oNHbz6obmWiXc07U+bHOqN3bIdCRouCqQKGLigh68A/Fqp7S3n8U+h8A8rjDdD12gl2fGLqBeTR KW/eKcwudRAD1ijh6hvRxTlfRpCPSstofrTMKQKPFOS3vypE9VtzALdcp76nRyZ2xT3+Nvl1ab5 R X-Received: by 2002:a05:6a00:1d12:b0:7b8:16af:3bbc with SMTP id d2e1a72fcca58-7ff650ce054mr23365521b3a.31.1766758000359; Fri, 26 Dec 2025 06:06:40 -0800 (PST) X-Google-Smtp-Source: AGHT+IEq+tXbblae0dYr+YzPkKL41WZvOiKNnm8s7B4kCO2PLoNLBs1kWxXZWgS2A7pofhp162TWMw== X-Received: by 2002:a05:6a00:1d12:b0:7b8:16af:3bbc with SMTP id d2e1a72fcca58-7ff650ce054mr23365480b3a.31.1766757999833; Fri, 26 Dec 2025 06:06:39 -0800 (PST) Received: from localhost ([209.132.188.88]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7ff7e48f3d7sm22379085b3a.51.2025.12.26.06.06.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Dec 2025 06:06:39 -0800 (PST) From: Coiby Xu To: kexec@lists.infradead.org, linuxppc-dev@lists.ozlabs.org Cc: Thomas Staudt , Arnaud Lefebvre , Baoquan he , Dave Young , Kairui Song , Pingfan Liu , Andrew Morton , Madhavan Srinivasan , Michael Ellerman , Nicholas Piggin , "Christophe Leroy (CS GROUP)" , linux-kernel@vger.kernel.org (open list) Subject: [PATCH] powerpc/kdump: pass dm-crypt keys to kdump kernel Date: Fri, 26 Dec 2025 22:06:35 +0800 Message-ID: <20251226140636.1378505-1-coxu@redhat.com> X-Mailer: git-send-email 2.52.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Based on the CONFIG_CRASH_DM_CRYPT feature, this patch adds LUKS-encrypted device dump target support to PowerPC by addressing two challenges [1], - Kdump kernel may not be able to decrypt the LUKS partition. For some machines, a system administrator may not have a chance to enter the password to decrypt the device in kdump initramfs after the 1st kernel crashes - LUKS2 by default use the memory-hard Argon2 key derivation function which is quite memory-consuming compared to the limited memory reserved for kdump. 1st kernel will build up the kernel command parameter dmcryptkeys as similar to elfcorehdr to pass the memory address of the stored info of dm-crypt keys to the kdump kernel. [1] https://lore.kernel.org/all/20250502011246.99238-1-coxu@redhat.com/ Cc: Thomas Staudt Cc: Arnaud Lefebvre Cc: Baoquan he Cc: Dave Young Cc: Kairui Song Cc: Pingfan Liu Cc: Andrew Morton Signed-off-by: Coiby Xu --- arch/powerpc/include/asm/kexec.h | 3 ++- arch/powerpc/kexec/elf_64.c | 26 +++++++++++++++++++++++++- arch/powerpc/kexec/file_load.c | 19 +++++++++++-------- 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/arch/powerpc/include/asm/kexec.h b/arch/powerpc/include/asm/ke= xec.h index bd4a6c42a5f3..f3d098d543b4 100644 --- a/arch/powerpc/include/asm/kexec.h +++ b/arch/powerpc/include/asm/kexec.h @@ -80,7 +80,8 @@ struct kimage_arch { }; =20 char *setup_kdump_cmdline(struct kimage *image, char *cmdline, - unsigned long cmdline_len); + unsigned long cmdline_len, + char *name, unsigned long addr); int setup_purgatory(struct kimage *image, const void *slave_code, const void *fdt, unsigned long kernel_load_addr, unsigned long fdt_load_addr); diff --git a/arch/powerpc/kexec/elf_64.c b/arch/powerpc/kexec/elf_64.c index 5d6d616404cf..57cb3361d91b 100644 --- a/arch/powerpc/kexec/elf_64.c +++ b/arch/powerpc/kexec/elf_64.c @@ -81,13 +81,37 @@ static void *elf64_load(struct kimage *image, char *ker= nel_buf, =20 /* Setup cmdline for kdump kernel case */ modified_cmdline =3D setup_kdump_cmdline(image, cmdline, - cmdline_len); + cmdline_len, + "elfcorehdr", + image->elf_load_addr); if (!modified_cmdline) { pr_err("Setting up cmdline for kdump kernel failed\n"); ret =3D -EINVAL; goto out; } cmdline =3D modified_cmdline; + cmdline_len =3D strlen(cmdline) + 1; + + ret =3D crash_load_dm_crypt_keys(image); + if (ret =3D=3D -ENOENT) { + kexec_dprintk("No dm crypt key to load\n"); + } else if (ret) { + pr_err("Failed to load dm crypt keys\n"); + return ERR_PTR(ret); + } + + if (image->dm_crypt_keys_addr !=3D 0) { + modified_cmdline =3D setup_kdump_cmdline(image, cmdline, + cmdline_len, + "dmcryptkeys", + image->dm_crypt_keys_addr); + if (!modified_cmdline) { + pr_err("Setting up cmdline for kdump kernel failed\n"); + ret =3D -EINVAL; + goto out; + } + cmdline =3D modified_cmdline; + } } =20 if (initrd !=3D NULL) { diff --git a/arch/powerpc/kexec/file_load.c b/arch/powerpc/kexec/file_load.c index 4284f76cbef5..e1c08050286d 100644 --- a/arch/powerpc/kexec/file_load.c +++ b/arch/powerpc/kexec/file_load.c @@ -23,38 +23,41 @@ #define SLAVE_CODE_SIZE 256 /* First 0x100 bytes */ =20 /** - * setup_kdump_cmdline - Prepend "elfcorehdr=3D " to command line + * setup_kdump_cmdline - Prepend "=3D " to command line * of kdump kernel for exporting the core. * @image: Kexec image * @cmdline: Command line parameters to update. * @cmdline_len: Length of the cmdline parameters. + * @name: Name e.g elfcorehdr. + * @addr: Memory address. * * kdump segment must be setup before calling this function. * * Returns new cmdline buffer for kdump kernel on success, NULL otherwise. */ char *setup_kdump_cmdline(struct kimage *image, char *cmdline, - unsigned long cmdline_len) + unsigned long cmdline_len, + char *name, unsigned long addr) { - int elfcorehdr_strlen; + unsigned long parameter_len; char *cmdline_ptr; =20 cmdline_ptr =3D kzalloc(COMMAND_LINE_SIZE, GFP_KERNEL); if (!cmdline_ptr) return NULL; =20 - elfcorehdr_strlen =3D sprintf(cmdline_ptr, "elfcorehdr=3D0x%lx ", - image->elf_load_addr); + parameter_len =3D sprintf(cmdline_ptr, "%s=3D0x%lx ", name, addr); =20 - if (elfcorehdr_strlen + cmdline_len > COMMAND_LINE_SIZE) { - pr_err("Appending elfcorehdr=3D exceeds cmdline size\n"); + if (parameter_len + cmdline_len > COMMAND_LINE_SIZE) { + pr_err("Appending %s=3D exceeds cmdline size\n", name); kfree(cmdline_ptr); return NULL; } =20 - memcpy(cmdline_ptr + elfcorehdr_strlen, cmdline, cmdline_len); + memcpy(cmdline_ptr + parameter_len, cmdline, cmdline_len); // Ensure it's nul terminated cmdline_ptr[COMMAND_LINE_SIZE - 1] =3D '\0'; + kfree(cmdline); return cmdline_ptr; } =20 base-commit: ccd1cdca5cd433c8a5dff78b69a79b31d9b77ee1 --=20 2.52.0