From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pf1-f171.google.com (mail-pf1-f171.google.com [209.85.210.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D3FFD37268D for ; Wed, 29 Jul 2026 03:37:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.171 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785296236; cv=none; b=R081hsaK18HStFMiBkk07E2t67aftioflF1udpM4j2VA7rwhnpcMECrAsbdN8R3BAx6Evi1qhnxdc1nXAKhTU5now9GbkOWkngn24LA3SbGZqbuHmCzb3+rjnbK9SaK/U8aBNX5ngBVUadPQqS8ZwNVx81A+jJYfQYLGml2uDtQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785296236; c=relaxed/simple; bh=jzMkFp4777wxs2ZUmmwNNSnXPK/7Tb37IsdqniLIDI8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gW4ksZE+XEq3t6GGGaLhexvRxSXBEO/rAVqTEfW36c17EpQ9g+TMrsfxqEIKmjTH+Ngf5NtvHr3cC47jdylqJ5Pc7LeHkMWRdo94sVchiDruBgpdMhkkjCULO2+MhIGrrAXBV3if3qkTnuf3jtdUi4KMIexjyBJx4zVgEMHG98I= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=NaOU4pTO; arc=none smtp.client-ip=209.85.210.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="NaOU4pTO" Received: by mail-pf1-f171.google.com with SMTP id d2e1a72fcca58-848595b338cso622489b3a.0 for ; Tue, 28 Jul 2026 20:37:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785296234; x=1785901034; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=QRr6uTm0B+MLoKOJmLgia92uvD3SNG7zn6UrSIRNrb0=; b=NaOU4pTO4vc5PFNPJ91we+6WgpwKFmftTsloF2N1ecizI+aQ/q5GMzS70ZmiQDGDUF qB6gdc8J9td5KhEImMdFKpVEqZon8RCQa+x9HI5D1RzZa4xF3MbqcPLhnJk+q1FXJaMk k1G9iEOBUpxYBk6qArkMqTGRTPriFcFj87i0Ojqi/ooN89LPj3ZgHoz2yDbcmkn6rq4c gRC+eVu9njeC34C6bkpkCR2qzxr1acEaHDW1LGCaWMQuywKpdWIn7ERSDf/veRuPMtwZ EVz2asiHbzvB6MS7CNvDEyDch18qDhlA57VSYt6ioV7UsNrOT+adNsRNQlxpuDT20KqE 7f/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785296234; x=1785901034; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=QRr6uTm0B+MLoKOJmLgia92uvD3SNG7zn6UrSIRNrb0=; b=HcgRceavGK7DomNmgH6dXfiqA3qgEsBZ8fkNjOZsDUlYJ0eI33dsnF4QQAKfu0xBKu KPVwAmME4Q5zAXxl53kYTQYL2z+YGJRA4Jd7vFKQdXjEx7cHjCqD/RDNtvmS93dvJXhr BBEyvHqQdYxwO3BBYyQvB4m7cM3uJiScubeZCndjf5q7ESRNGwqZoJCbIjFuUtw8EqY6 mvz5TRE2LLKnzeqHdfDO1HVEqYV8Sp8NYSEN07l//xAB1pmkkL2NGh51imPkRC2+RNDj VobZtgJvmM6bikc1McouZYHdL/kMHEu8n3VcYRQ32wuXYm8b9aGMV9sqFTw5+2m8LBXD DtLw== X-Forwarded-Encrypted: i=1; AHgh+RpMEMEF0hcktqF+i8/81C2k6aFGAE2swzBF/CUjhdDMhH1Fl3UKHGaTrAw7UYC8FZz/SNpxkYcWQWje55s=@vger.kernel.org X-Gm-Message-State: AOJu0YyjycuavGh7pxuOxf8WFIHDGmDJe9Cte2WppImKwhUH4rXLeLl5 ASDBMvyOL9veaGx86RBwoSQv8io9nEL27d+VjpOnrusBH45X6hccqYDp X-Gm-Gg: AR+sD13Mcqve4iIgtXlgvQW7NHGVcYChzQwW/vZkXOnbfndbCNLiqm8A6SMQCtl+pGE Fn8QH1jBQlZAT0NT3yTPFq2hP/UvbyF7ZjfvEKkbQrj6Mn3aAcdVLPhOTkur7Hlk/QjQlPQzGjD wWabI5MHvFQBsfm2iSIGyaWsUaaz/Z126TC9HB04s8aZnSLkSCqVqysym4y+gfRFsXtFn5IJ2Xs XgY650EuRDKSHztii+lEFdMlWV+Ms3mK7sptjBml9FJXFLVkmLMemXZDaaxKWOX/E2CGgVfoZ8z ymqHEWSGhaGFzNKT/TupReKD/19aSPZ/nfrS8BaFWU0H+kccjFFUyoCwCK1ZmyEW7Ik/V8LA81g fErZwOt7TaEKeJAv6/LTwxnbiwty2wuKqt2fOF/OY/yAhmzV+zdQUEZdrmSJD/UpHauDKbcsqur fLtGOaVbnhlWxhE4mynn8z4MZ5XvyPFawlhRXYX68Jv8s= X-Received: by 2002:a05:6a00:2d02:b0:847:8be6:2177 with SMTP id d2e1a72fcca58-84e93290137mr5157865b3a.34.1785296234112; Tue, 28 Jul 2026 20:37:14 -0700 (PDT) Received: from localhost ([2a09:bac5:42f3:1e14::2ff:1d]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84ea03869d2sm662551b3a.49.2026.07.28.20.37.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 20:37:13 -0700 (PDT) From: Coiby Xu To: kexec@lists.infradead.org Cc: Andrew Morton , Sourabh Jain , Baoquan He , Dave Young , Pratyush Yadav , Mike Rapoport , Pasha Tatashin , Coiby Xu , linux-kernel@vger.kernel.org (open list) Subject: [PATCH v3 04/10] crash_dump: Read the number of dm-crypt keys from reserved memory Date: Wed, 29 Jul 2026 11:36:44 +0800 Message-ID: <20260729033654.311541-5-coiby.xu@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260729033654.311541-1-coiby.xu@gmail.com> References: <20260729033654.311541-1-coiby.xu@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit In case user adds/deletes the keys by mistake, it's safer to read the number of keys from reserved memory. Fixes: 9ebfa8dcaea7 ("crash_dump: reuse saved dm crypt keys for CPU/memory hot-plugging") Reported-and-Suggested-by: Sourabh Jain Signed-off-by: Coiby Xu --- kernel/crash_dump_dm_crypt.c | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/kernel/crash_dump_dm_crypt.c b/kernel/crash_dump_dm_crypt.c index d2e66c6fe6f3..a3996208738b 100644 --- a/kernel/crash_dump_dm_crypt.c +++ b/kernel/crash_dump_dm_crypt.c @@ -88,21 +88,31 @@ static int get_keys_from_kdump_reserved_memory(void) { struct keys_header *keys_header_loaded; size_t keys_header_size; - - keys_header_size = get_keys_header_size(key_count); - keys_header = kzalloc(keys_header_size, GFP_KERNEL); - if (!keys_header) - return -ENOMEM; + int r = 0; arch_kexec_unprotect_crashkres(); keys_header_loaded = kmap_local_page(pfn_to_page( kexec_crash_image->dm_crypt_keys_addr >> PAGE_SHIFT)); + if (keys_header_loaded->total_keys <= 0 || + keys_header_loaded->total_keys > KEY_NUM_MAX) { + pr_warn("keys_header saved to reserved memory may be corrupt\n"); + r = -EINVAL; + goto kunmap; + } + + keys_header_size = get_keys_header_size(keys_header_loaded->total_keys); + keys_header = kzalloc(keys_header_size, GFP_KERNEL); + if (!keys_header) { + r = -ENOMEM; + goto kunmap; + } + memcpy(keys_header, keys_header_loaded, keys_header_size); +kunmap: kunmap_local(keys_header_loaded); arch_kexec_protect_crashkres(); - - return 0; + return r; } static int restore_dm_crypt_keys_to_thread_keyring(void) @@ -446,12 +456,12 @@ int crash_load_dm_crypt_keys(struct kimage *image) mutex_lock(&config_keys_subsys.su_mutex); mutex_acquired = true; - if (key_count <= 0) { - kexec_dprintk("No dm-crypt keys\n"); - return 0; - } - if (!is_dm_key_reused) { + if (key_count <= 0) { + kexec_dprintk("No dm-crypt keys\n"); + return 0; + } + r = build_keys_header(); if (r) goto out; @@ -462,7 +472,7 @@ int crash_load_dm_crypt_keys(struct kimage *image) * cleaned up at the end of kexec_file_load syscall */ kbuf.buffer = keys_header; - kbuf.bufsz = get_keys_header_size(key_count); + kbuf.bufsz = get_keys_header_size(keys_header->total_keys); kbuf.memsz = kbuf.bufsz; kbuf.buf_align = ELF_CORE_HEADER_ALIGN; -- 2.55.0