From patchwork Mon Feb 17 10:16:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eugen Hristev X-Patchwork-Id: 13977490 Received: from mail-ej1-f42.google.com (mail-ej1-f42.google.com [209.85.218.42]) (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 8DDD621764B for ; Mon, 17 Feb 2025 10:17:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739787470; cv=none; b=t1gIwlhS4jjLkK6gG4D4xxLIY6AHKxzHUnGdiibdfzzmgKtbuAICizMocdQelxPrSbcISPXYtM8EgDuQ+hN8vMnGnjX2HP0ZzyE1xqu8Wx+FITyEE2ZNksDRU2GV+0efIhKF9NItPU05jfXu/mnWjGnGGMNo1KsBTr7drfiDsQk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739787470; c=relaxed/simple; bh=/cVyc1rh86otJZ3wkWGcQ4N27XkUc752xM+g69NmlEo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cWtRuWC+fJnZ330bCeCM87yzzqK2WVyZHLtS130bpUubZ1tV2HdSTzJthd7443LzPRZw47RmEvItAAUFK27NRQpwsOi6nGBTX5lbGXADvLYBKrZZ4geiN/N1VjFS7ALJUIZ0N5GQ8TWxGUASPp8+oAEhuzjKzHge/vuX8Ow+DJE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=zwToEZ5d; arc=none smtp.client-ip=209.85.218.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="zwToEZ5d" Received: by mail-ej1-f42.google.com with SMTP id a640c23a62f3a-ab7483b9bf7so531357566b.3 for ; Mon, 17 Feb 2025 02:17:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739787467; x=1740392267; 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; bh=/6BYtQ0vagWpucItzriIw7qjC34OuqzM5CfNcTita1Q=; b=zwToEZ5diBI6TG5Yp7XbbbcR8h7sfZJNrVqOlFEIdGyENZ8PjZXze1+6sJggc62EOr +VPtaoacD1FTJcjXLTiyHjCLUYDKQePfaCWicY2V5fp8RDpkbfjl0HfJlQxLw8BOYxuX w8RBwdAozE7aGJRV7v2aIyP9hMGjjsJtUoGIQfnNCMKvcc2/PzDeEAowEd0+znlUNglJ hQ1FxOnc7YyFsAansc328Do7loPvoCDgdDS+uCz986oKumrg7P+lp6jvyYlAo7KD4fvX s8cZuyYhZr++xg4iRb4qK0UlNJXpUvINFjPT1YuJvN6m6EvN0fXvmgvnBFhbF+ibEghd J1WQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739787467; x=1740392267; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/6BYtQ0vagWpucItzriIw7qjC34OuqzM5CfNcTita1Q=; b=oyi8FPZpy1Dh0D03xfLSdD1qZaDMcjrTNNrEANQJNFVcY0tn9hWrqwYIJxzh44Eqrf zA/1o/fEqLObGFBOFNuoQtveKnoGROy1fyj7sXMjrphOq+wmYS+3DTFPmL9H3aFOKdX4 3OU1LYEl/dOjQRHezj9NBAUMhZQMObvBWz2ODREsXi96ME8Jh9FoDblAU8PT6T9vppeh tSa3L/PzLNeUsy6kKpmDA+ShDIU5wnPVLPUfujyKM3E+m3utwBt+l7c5zEp+q2XSdyDM nT5D50JzgnaSZgQdmOKzYdx1adeEtmm5w0FNYPkYI05tD4Mefr4PeWtp1UcSKPyMRbFP QfuQ== X-Forwarded-Encrypted: i=1; AJvYcCVe2n9cpdAQTV9O4MS+9zTiMHB/Eq9RiMvWa3GaN4eLi502ZqiJC9Mnht6SPumS4io5Inv9u1ydDHAJj7LxzvQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yz468uU7DYoJesQ+eqj8DbXzKlXo0/LKP74Q+QbtVYAa36l/iGo RWQcGVL2lhP6SLvqvEgtfQ5PIfuksrybpr7D7Ig+pRwVlbbsj1zMEH5s5dybps5rP6hhbZ3UQEp yidc= X-Gm-Gg: ASbGnctOk1HF4/pVxuEf07O8hU/eX27V9sHsooSTjfPxlJeW4plHJnc/kKD9JjcU8ce +XDc4wU+llPcDif7LlPFnQaOcNzQQzfHT+HHGGLIh5ywOUQwq7bgmvZHBpWr0i/qNjkw8TSD63Q 4eSOpy4F9OqL+Lzw5xDJagDSymUz7VMGW8YghHcQKA0fLEKbaHIz0vre7RyCTxR0JId7kZBVo2D KYhoSdCZMBcUeMbiYbz+LcZ5ZNrFeDoNaQfeOgsQba5QOeRq9Fw9k2DgKj5Oz8YaZIAS5lO9j14 FQvY9e7bduqe7kQH5/8zc3cX X-Google-Smtp-Source: AGHT+IFgDnivD1OBw8RBeqZ1T3wvlR/UtXkBn7pRJ5OfcJBMf9SgRGM/cdk3Igb/07dwRLGbAITBVQ== X-Received: by 2002:a17:907:1c85:b0:abb:6ea6:161 with SMTP id a640c23a62f3a-abb70e4e28cmr925547666b.56.1739787466832; Mon, 17 Feb 2025 02:17:46 -0800 (PST) Received: from eugen-station.. ([82.76.24.202]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abb8b1767e8sm308583266b.174.2025.02.17.02.17.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 02:17:46 -0800 (PST) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org, kees@kernel.org Cc: linux-kernel@vger.kernel.org, johannes@sipsolutions.net, gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org, andersson@kernel.org, konradybcio@kernel.org, tony.luck@intel.com, gpiccoli@igalia.com, pmladek@suse.com, rostedt@goodmis.org, john.ogness@linutronix.de, senozhatsky@chromium.org, quic_mojha@quicinc.com, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Eugen Hristev Subject: [RFC][PATCH 01/10] pstore/zone: move pstore_device_info into zone header Date: Mon, 17 Feb 2025 12:16:57 +0200 Message-ID: <20250217101706.2104498-2-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250217101706.2104498-1-eugen.hristev@linaro.org> References: <20250217101706.2104498-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-hardening@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Struct pstore_device_info is used in pstore/zone, and it's not really connected to anything related to pstore/blk. To further improve on the pstore zone and allow other types of drivers to connect, it is logical to have this struct into pstore_zone.h file. Signed-off-by: Eugen Hristev --- include/linux/pstore_blk.h | 14 -------------- include/linux/pstore_zone.h | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/include/linux/pstore_blk.h b/include/linux/pstore_blk.h index 924ca07aafbd..d0c8fb40c46c 100644 --- a/include/linux/pstore_blk.h +++ b/include/linux/pstore_blk.h @@ -7,20 +7,6 @@ #include #include -/** - * struct pstore_device_info - back-end pstore/blk driver structure. - * - * @flags: Refer to macro starting with PSTORE_FLAGS defined in - * linux/pstore.h. It means what front-ends this device support. - * Zero means all backends for compatible. - * @zone: The struct pstore_zone_info details. - * - */ -struct pstore_device_info { - unsigned int flags; - struct pstore_zone_info zone; -}; - int register_pstore_device(struct pstore_device_info *dev); void unregister_pstore_device(struct pstore_device_info *dev); diff --git a/include/linux/pstore_zone.h b/include/linux/pstore_zone.h index 1e35eaa33e5e..284364234162 100644 --- a/include/linux/pstore_zone.h +++ b/include/linux/pstore_zone.h @@ -54,6 +54,20 @@ struct pstore_zone_info { pstore_zone_write_op panic_write; }; +/** + * struct pstore_device_info - back-end pstore device driver structure. + * + * @flags: Refer to macro starting with PSTORE_FLAGS defined in + * linux/pstore.h. It means what front-ends this device support. + * Zero means all backends for compatible. + * @zone: The struct pstore_zone_info details. + * + */ +struct pstore_device_info { + unsigned int flags; + struct pstore_zone_info zone; +}; + extern int register_pstore_zone(struct pstore_zone_info *info); extern void unregister_pstore_zone(struct pstore_zone_info *info); From patchwork Mon Feb 17 10:16:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eugen Hristev X-Patchwork-Id: 13977491 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (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 1E6EB21767C for ; Mon, 17 Feb 2025 10:17:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739787472; cv=none; b=RYGjlzTNwJCncf23E74CsnDa3S0KM9WIi80ibxXrvMugXlxq2XcgbjybcYrMSAFl7swTaUMpuX/CqIz1RFPKkUA211ZbYQUsAooLrVCZZWiqWy1IGlNPZnzquoC3l5UZHadGP2P8GD0MEW//dp2eyR1vtbmW3GX+xkkG4/DuIK0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739787472; c=relaxed/simple; bh=1hkKPUWrxq7K5LZ+JEA021QIrfwfKcgoOdedz+W5Q9Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EtvxsSNFeOZZ22EXfNLFbVSbkFv2YE9YgBAj3HjqhMW+D7zXDysU43jD5tPAAufemNVsrHiKxGSSYdgYAP83ngZf24d/IYMOFnBzn0/iT2Sa8u7umh7R0LHXS/P1dTi67eX81+5p+Da4cRwGclj+aDwFewG1AFR7D/nnKYbRCIk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=OO3VBxZd; arc=none smtp.client-ip=209.85.218.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="OO3VBxZd" Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-abb90f68f8cso201831066b.3 for ; Mon, 17 Feb 2025 02:17:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739787468; x=1740392268; 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; bh=UO0IV1Fa2w4jRN2VF1J5DC4vESX9Rcd9+LGQ+k/6XZk=; b=OO3VBxZd2S8Aj8r1yxFIR8d5NhbGf1AJ2aOLJ0kLtZRSLbhB1k99nuC/RsU9mzdfIz UG/xoi5Y/PsG04GKdC85Hs4CtQGEiuhUGl62pEK87rBcZ3BfGK/UX4FWB5FvqC6X4CAM yegjLcNhdxx78BoqFgMiDF1jVQ8GME9UbnbbUiWnaWyMJEQhOD951NbFE8x+E/L9BGJY AI316Ot9PtKkLIdC/pTG/U8tX5CR0lQfirAhevjpiGF66fevZ0bihC4B7ybMGeKsm7xJ DfoAj3kFeWgV+h94BRlhi+jp1lFxkbOCl41ux4MtXnELW9+XTtOkMejD7DPIeHa81s9r ZYLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739787468; x=1740392268; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UO0IV1Fa2w4jRN2VF1J5DC4vESX9Rcd9+LGQ+k/6XZk=; b=fQLjTaPFUc1QOqOLj8TbRphnSo9bYjCKDD1wEOMx+XTa+i/P4QAcdmzBSzw1otTeN5 TWEuZn3JnvQxD3cpAkwcLZVUYxeHG6raBxXATtnznjMAe2nOwCCG0QCGV7iR8ifdiIPI 7vyIjwKbnOrA1wk1gANmdHQVK49oLKZ8PjRmlZO7p/qHG+rZhzHlwNqHetDjnjsFi2dK Zr2VcsMbeV1b5iaoePYBVAPD4E581ynkWoeS1e355bEwZxjMc9OyICzkCIBj0t+TDhcY yxuh5H2uKoaVHCGwpADVulZ0J/mblU/NMawHjT1Bi8x2zTU9Ie75MWMQcUuo4QcmeRWd L/YA== X-Forwarded-Encrypted: i=1; AJvYcCVxAMcFeS/0wwL4+6Ql/Yk0XwjeEkz6AyVvrzLmpLStJS0xYigesUXgTMqIBUdhwgKEhmV4HWp9kuMKhf/vaZc=@vger.kernel.org X-Gm-Message-State: AOJu0Ywf5nRsMTSFDmewI7zIS0cGdbh67lBRWQ+XXhP99YHX9GDHzg4F 2ci4l4HOtloANJzVJKuDUm1PBOhIwoA6dvizo1er6xgnDNMtxI2wW+SoYl4dIPg= X-Gm-Gg: ASbGncvGfocqgfieX0SL/N80O9xcsSWG2DIFY+wLWMMfsWO5/S5yCwal4grbLgkhARo VmKeTKBEO+hlf6iKPewIIeJtCf0OPydv1EUHns4+4+fu7SDR/kmCMw1giWUfJaUtfXhvIvbeg7I 1VURlBaEWLUc/5DP6BloofDRWnMdoVjGQW1+MjbHg+tcCHgs9VL/WdP5to4TmHBuOtwHndYCY3o YSPJAHngnqGOcYanOIXFUzcSZRQtz45UPbynzz/8BzDcoSDJ1O/xrA1gept+UDco62QgC/GQrXW M1xuPsQXtqadE623mMsvMAup X-Google-Smtp-Source: AGHT+IFeqQRmHtufh/hnET9/WDBmQ08tktpUPlNNW2f16K2ts13CoRF9gAnCjQkfdJKdSGt+WA/5Ug== X-Received: by 2002:a17:906:3290:b0:ab7:d179:2496 with SMTP id a640c23a62f3a-abb70a791dcmr775286966b.6.1739787468349; Mon, 17 Feb 2025 02:17:48 -0800 (PST) Received: from eugen-station.. ([82.76.24.202]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abb8b1767e8sm308583266b.174.2025.02.17.02.17.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 02:17:48 -0800 (PST) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org, kees@kernel.org Cc: linux-kernel@vger.kernel.org, johannes@sipsolutions.net, gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org, andersson@kernel.org, konradybcio@kernel.org, tony.luck@intel.com, gpiccoli@igalia.com, pmladek@suse.com, rostedt@goodmis.org, john.ogness@linutronix.de, senozhatsky@chromium.org, quic_mojha@quicinc.com, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Eugen Hristev Subject: [RFC][PATCH 02/10] pstore/smem: add new pstore/smem type of pstore Date: Mon, 17 Feb 2025 12:16:58 +0200 Message-ID: <20250217101706.2104498-3-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250217101706.2104498-1-eugen.hristev@linaro.org> References: <20250217101706.2104498-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-hardening@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Add shared memory type of pstore. Signed-off-by: Eugen Hristev --- fs/pstore/Kconfig | 13 ++++ fs/pstore/Makefile | 3 + fs/pstore/smem.c | 115 ++++++++++++++++++++++++++++++++++++ include/linux/pstore_smem.h | 9 +++ 4 files changed, 140 insertions(+) create mode 100644 fs/pstore/smem.c create mode 100644 include/linux/pstore_smem.h diff --git a/fs/pstore/Kconfig b/fs/pstore/Kconfig index 3acc38600cd1..84f87edf9b8f 100644 --- a/fs/pstore/Kconfig +++ b/fs/pstore/Kconfig @@ -81,6 +81,19 @@ config PSTORE_RAM For more information, see Documentation/admin-guide/ramoops.rst. +config PSTORE_SMEM + tristate "Log panic/oops to a shared memory buffer" + depends on PSTORE + select PSTORE_ZONE + help + This enables panic and oops messages to be logged to memory + that is shared between different hardware blocks in the system. + This shared memory can be a static ram, a part of dynamic RAM, + a dedicated cache or memory area specific for crash dumps, + or even a memory on an attached device. + + if unsure, say N. + config PSTORE_ZONE tristate depends on PSTORE diff --git a/fs/pstore/Makefile b/fs/pstore/Makefile index c270467aeece..f2a314ca03a0 100644 --- a/fs/pstore/Makefile +++ b/fs/pstore/Makefile @@ -18,3 +18,6 @@ obj-$(CONFIG_PSTORE_ZONE) += pstore_zone.o pstore_blk-objs += blk.o obj-$(CONFIG_PSTORE_BLK) += pstore_blk.o + +pstore_smem-objs += smem.o +obj-$(CONFIG_PSTORE_SMEM) += pstore_smem.o diff --git a/fs/pstore/smem.c b/fs/pstore/smem.c new file mode 100644 index 000000000000..9eedd7df5446 --- /dev/null +++ b/fs/pstore/smem.c @@ -0,0 +1,115 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Implements pstore backend driver for shared memory devices, + * using the pstore/zone API. + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * All globals must only be accessed under the pstore_smem_lock + * during the register/unregister functions. + */ +static DEFINE_MUTEX(pstore_smem_lock); +static struct pstore_device_info *pstore_device_info; + +static int __register_pstore_device(struct pstore_device_info *dev) +{ + int ret; + + lockdep_assert_held(&pstore_smem_lock); + + if (!dev) { + pr_err("NULL device info\n"); + return -EINVAL; + } + if (!dev->zone.total_size) { + pr_err("zero sized device\n"); + return -EINVAL; + } + if (!dev->zone.read) { + pr_err("no read handler for device\n"); + return -EINVAL; + } + if (!dev->zone.write) { + pr_err("no write handler for device\n"); + return -EINVAL; + } + + /* someone already registered before */ + if (pstore_device_info) + return -EBUSY; + + /* zero means not limit on which backends to attempt to store. */ + if (!dev->flags) + dev->flags = UINT_MAX; + + /* Initialize required zone ownership details. */ + dev->zone.name = KBUILD_MODNAME; + dev->zone.owner = THIS_MODULE; + + ret = register_pstore_zone(&dev->zone); + if (ret == 0) + pstore_device_info = dev; + + return ret; +} +/** + * register_pstore_smem_device() - register smem device to pstore + * + * @dev: smem device information + * + * Return: + * * 0 - OK + * * Others - some error. + */ +int register_pstore_smem_device(struct pstore_device_info *dev) +{ + int ret; + + mutex_lock(&pstore_smem_lock); + ret = __register_pstore_device(dev); + mutex_unlock(&pstore_smem_lock); + + return ret; +} +EXPORT_SYMBOL_GPL(register_pstore_smem_device); + +static void __unregister_pstore_device(struct pstore_device_info *dev) +{ + lockdep_assert_held(&pstore_smem_lock); + if (pstore_device_info && pstore_device_info == dev) { + unregister_pstore_zone(&dev->zone); + pstore_device_info = NULL; + } +} + +/** + * unregister_pstore_smem_device() - unregister smem device from pstore + * + * @dev: smem device information + */ +void unregister_pstore_smem_device(struct pstore_device_info *dev) +{ + mutex_lock(&pstore_smem_lock); + __unregister_pstore_device(dev); + mutex_unlock(&pstore_smem_lock); +} +EXPORT_SYMBOL_GPL(unregister_pstore_smem_device); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Eugen Hristev "); +MODULE_DESCRIPTION("pstore backend for smem devices"); diff --git a/include/linux/pstore_smem.h b/include/linux/pstore_smem.h new file mode 100644 index 000000000000..f0ad23e117c4 --- /dev/null +++ b/include/linux/pstore_smem.h @@ -0,0 +1,9 @@ +#ifndef PSTORE_SMEM_H +#define PSTORE_SMEM_H + +#include + +int register_pstore_smem_device(struct pstore_device_info *dev); +void unregister_pstore_smem_device(struct pstore_device_info *dev); + +#endif From patchwork Mon Feb 17 10:16:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eugen Hristev X-Patchwork-Id: 13977492 Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.41]) (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 B3B51217737 for ; Mon, 17 Feb 2025 10:17:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739787473; cv=none; b=SE7rnrXHtlrKuMS53EapNb+QhKn7lRGVDjXOM4hFJitzI/bh/OrazOC6oje9YzAaCpLSlVxKRd8nkppCvY347dMsmjk9XupQ6fnndRH34LG3LSntuj3htJKFAT4WrSmvMsn6D5Ku2vU9J+AYWFUWeaAUPLxMHSy31TcMdXvCxcY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739787473; c=relaxed/simple; bh=eFWO0XMyikPo+vVZcTF2JAqlcgoQWkxVrK0g2v9jJKI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gH8rQd6VgANnSfhq/i+hkrHoWVQVz49skG/RABAaySovGkiBkNtFkcGe6151l8Pjyy+OiRs27pkTq9zvC8yk2vIkhqoEKIiTujC2HwIfY6Aj5d139EHi9YgzBbSlscYGoyxk6NM80E2cj0UO/uen3yFOuaYWHkqhlXpklPEhiAI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=zPwTTUmy; arc=none smtp.client-ip=209.85.218.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="zPwTTUmy" Received: by mail-ej1-f41.google.com with SMTP id a640c23a62f3a-abb8e405640so160925066b.0 for ; Mon, 17 Feb 2025 02:17:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739787470; x=1740392270; 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; bh=wXzcU5MFpNvV+1Iapr36hDkhqv8Rk3kBwf8g/lXGurs=; b=zPwTTUmyqxl8VMtjBdDo5Z0YJvwXoHjP2sQO66sKway7vNYc9urrz8FNQAlzj/uzx7 Pbp9TmHC85rN1Fk99yTi73gziiFWdU3MykNYvfvIsvRJs286tb7fCHJgPPO7JTJ1/s1B 9L5Zfr04QeGGLYb+p2/NmgrbuXJqEocRQ8NGtCasqnEYnhVg/Y8EdfR821SzYnqz5SgA 7zdTgWnWBsUKj4sQOFApoImt828PARcfnVGbem6mpTi/msqZTRcei0sDndEN8NhOgoXk WOhDW2TF0UjhciJkoBZy5eZq3PGzZZ5Lja+R/AK83o1k6w1+WSR1z5iT+SfZQqCQhCc4 1XZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739787470; x=1740392270; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wXzcU5MFpNvV+1Iapr36hDkhqv8Rk3kBwf8g/lXGurs=; b=JPWdV4N2K6WtqECr56qFNGaTFsHaQZgOQ5m0sNm+lEf6rCSow6pybN3Ugu/td9vRUc eCAP9QALq6En2CzIldIjFb8318TxG8BgPwg+m8LaQIZLbFaDkluroxpbUgFDf97b6NRR Sirw7IW8Z5v1h7OKK97A3BxT7iA5mr1g/MCZp+Io1nmowS/Dj2Xt7dUPG2cbRdB0DDAh MdGlLy1w+4y2ylxHBvnF44Y8UNXJHv8ePUgHAzX5Pxy0xz+eS+Z91XgoCeodMEv5DvLE 3wwKQW6Cm3R8ccYC0HaVXTsFBfj4Xg/zghgK8c8i4YTMr+ToW4LIL3kRqe9rqOOp4Rlj Ay0Q== X-Forwarded-Encrypted: i=1; AJvYcCXxG5chbYWq+Ozl6TKaqArnqIvx6JqnKGvpOSgNNQPbgEssbUcZXKJyCeMfrLfOtcsEVWtszytteZcX84Ik6ts=@vger.kernel.org X-Gm-Message-State: AOJu0YweSCzQt9Gvjz/oEfDX2UH9G80eFC+pzF+BBFIgJ5gLpiErveBZ AHM/eOHeXNARdLWQDhEHuyPm1w8BjwXQmmzUoig1e0OTIxAlsn+6qWjGCnQLQhc= X-Gm-Gg: ASbGncubLtignT9Azz3RB88XbGICGyhAzptnI7lo+H2ncxUzrKqOhOcp1j6kHMVjYn/ RAs6Tqr3qbis3rybrlM03qB528sPpgaeEdUn447fZRPVSCvVCSDnxXZ15vtf6Hh2olxIFg+Llwq d4zO3qF2IsnBpxAJVJWpMgwt4Jsj1elqBAMFae7r1O25Ctqc7c02xBIYurAd0jYmRsD+PGnbZ9l eHPcmxw27Y7mw5YpaMj9Nn6kULhcQqaRNNzs88Hb3q14W3OgEe2HL3k7L/+K0niolNBx7sPUFgI 0/88vF+Q9bklXWWSITONHLdm X-Google-Smtp-Source: AGHT+IFlpcMLdWWAy879FRRX8kAbYx+cTtUPfK71e6uWIwxDjhZr04LaUoJwILHRa7T4Dh47h6Jv7g== X-Received: by 2002:a17:907:d27:b0:aba:5f40:7f2e with SMTP id a640c23a62f3a-abb70d95048mr848206466b.45.1739787470024; Mon, 17 Feb 2025 02:17:50 -0800 (PST) Received: from eugen-station.. ([82.76.24.202]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abb8b1767e8sm308583266b.174.2025.02.17.02.17.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 02:17:49 -0800 (PST) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org, kees@kernel.org Cc: linux-kernel@vger.kernel.org, johannes@sipsolutions.net, gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org, andersson@kernel.org, konradybcio@kernel.org, tony.luck@intel.com, gpiccoli@igalia.com, pmladek@suse.com, rostedt@goodmis.org, john.ogness@linutronix.de, senozhatsky@chromium.org, quic_mojha@quicinc.com, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Eugen Hristev Subject: [RFC][PATCH 03/10] pstore/zone: introduce directly mapped zones Date: Mon, 17 Feb 2025 12:16:59 +0200 Message-ID: <20250217101706.2104498-4-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250217101706.2104498-1-eugen.hristev@linaro.org> References: <20250217101706.2104498-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-hardening@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Directly mapped zones have a different semantic from usual pstore zones. Such zones use a pointer to data in their buffer struct, instead of keeping the buffer locally. The data pointer and size is then passed to the backend for further use. Having a different semantics, backends supporting only these do not offer read/write ops, and only new register_dmr and unregister_dmr ops. Ofcourse, a backend could support both classic zones and directly mapped. Directly mapped zones have the advantage of not being passed through in the event of a crashed, but rather at registration time. Signed-off-by: Eugen Hristev --- fs/pstore/platform.c | 1 + fs/pstore/smem.c | 6 ++--- fs/pstore/zone.c | 45 ++++++++++++++++++++++++++++--------- include/linux/pstore.h | 4 ++++ include/linux/pstore_zone.h | 3 +++ 5 files changed, 45 insertions(+), 14 deletions(-) diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c index f56b066ab80c..e20e60b88727 100644 --- a/fs/pstore/platform.c +++ b/fs/pstore/platform.c @@ -51,6 +51,7 @@ static const char * const pstore_type_names[] = { "powerpc-common", "pmsg", "powerpc-opal", + "directly-mapped", }; static int pstore_new_entry; diff --git a/fs/pstore/smem.c b/fs/pstore/smem.c index 9eedd7df5446..684ecc20cae5 100644 --- a/fs/pstore/smem.c +++ b/fs/pstore/smem.c @@ -36,15 +36,15 @@ static int __register_pstore_device(struct pstore_device_info *dev) pr_err("NULL device info\n"); return -EINVAL; } - if (!dev->zone.total_size) { + if (!dev->zone.total_size && !dev->zone.dmapped_cnt) { pr_err("zero sized device\n"); return -EINVAL; } - if (!dev->zone.read) { + if (!dev->zone.read && !dev->zone.dmapped_cnt) { pr_err("no read handler for device\n"); return -EINVAL; } - if (!dev->zone.write) { + if (!dev->zone.write && !dev->zone.dmapped_cnt) { pr_err("no write handler for device\n"); return -EINVAL; } diff --git a/fs/pstore/zone.c b/fs/pstore/zone.c index 5fa2fa2e7aa7..affa4370208c 100644 --- a/fs/pstore/zone.c +++ b/fs/pstore/zone.c @@ -113,6 +113,7 @@ struct psz_context { struct pstore_zone *ppsz; struct pstore_zone *cpsz; struct pstore_zone **fpszs; + struct pstore_zone **dmszs; unsigned int kmsg_max_cnt; unsigned int kmsg_read_cnt; unsigned int kmsg_write_cnt; @@ -120,6 +121,7 @@ struct psz_context { unsigned int console_read_cnt; unsigned int ftrace_max_cnt; unsigned int ftrace_read_cnt; + unsigned int dmapped_max_cnt; /* * These counters should be calculated during recovery. * It records the oops/panic times after crashes rather than boots. @@ -1148,6 +1150,8 @@ static void psz_free_all_zones(struct psz_context *cxt) psz_free_zone(&cxt->cpsz); if (cxt->fpszs) psz_free_zones(&cxt->fpszs, &cxt->ftrace_max_cnt); + if (cxt->dmszs) + psz_free_zones(&cxt->dmszs, &cxt->dmapped_max_cnt); } static struct pstore_zone *psz_init_zone(enum pstore_type_id type, @@ -1160,9 +1164,9 @@ static struct pstore_zone *psz_init_zone(enum pstore_type_id type, if (!size) return NULL; - if (*off + size > info->total_size) { - pr_err("no room for %s (0x%zx@0x%llx over 0x%lx)\n", - name, size, *off, info->total_size); + if (*off + size > info->total_size && type != PSTORE_TYPE_DMAPPED) { + pr_err("no room for %s type %d (0x%zx@0x%llx over 0x%lx)\n", + name, type, size, *off, info->total_size); return ERR_PTR(-ENOMEM); } @@ -1170,7 +1174,8 @@ static struct pstore_zone *psz_init_zone(enum pstore_type_id type, if (!zone) return ERR_PTR(-ENOMEM); - zone->buffer = kmalloc(size, GFP_KERNEL); + zone->buffer = kmalloc(type == PSTORE_TYPE_DMAPPED ? + sizeof(struct psz_buffer) : size, GFP_KERNEL); if (!zone->buffer) { kfree(zone); return ERR_PTR(-ENOMEM); @@ -1179,7 +1184,10 @@ static struct pstore_zone *psz_init_zone(enum pstore_type_id type, zone->off = *off; zone->name = name; zone->type = type; - zone->buffer_size = size - sizeof(struct psz_buffer); + if (zone->type == PSTORE_TYPE_DMAPPED) + zone->buffer_size = 0; + else + zone->buffer_size = size - sizeof(struct psz_buffer); zone->buffer->sig = type ^ PSZ_SIG; zone->oldbuf = NULL; atomic_set(&zone->dirty, 0); @@ -1188,8 +1196,9 @@ static struct pstore_zone *psz_init_zone(enum pstore_type_id type, *off += size; - pr_debug("pszone %s: off 0x%llx, %zu header, %zu data\n", zone->name, - zone->off, sizeof(*zone->buffer), zone->buffer_size); + pr_debug("pszone %s: off 0x%llx, %zu header, %zu data %s\n", zone->name, + zone->off, sizeof(*zone->buffer), zone->buffer_size, + zone->type == PSTORE_TYPE_DMAPPED ? " dmapped " : ""); return zone; } @@ -1206,7 +1215,7 @@ static struct pstore_zone **psz_init_zones(enum pstore_type_id type, if (!total_size || !record_size) return NULL; - if (*off + total_size > info->total_size) { + if (*off + total_size > info->total_size && type != PSTORE_TYPE_DMAPPED) { pr_err("no room for zones %s (0x%zx@0x%llx over 0x%lx)\n", name, total_size, *off, info->total_size); return ERR_PTR(-ENOMEM); @@ -1245,6 +1254,15 @@ static int psz_alloc_zones(struct psz_context *cxt) int err; size_t off_size = 0; + cxt->dmszs = psz_init_zones(PSTORE_TYPE_DMAPPED, &off, + info->dmapped_cnt, + 1, &cxt->dmapped_max_cnt); + if (IS_ERR(cxt->dmszs)) { + err = PTR_ERR(cxt->dmszs); + cxt->dmszs = NULL; + goto free_out; + } + off_size += info->pmsg_size; cxt->ppsz = psz_init_zone(PSTORE_TYPE_PMSG, &off, info->pmsg_size); if (IS_ERR(cxt->ppsz)) { @@ -1302,7 +1320,7 @@ int register_pstore_zone(struct pstore_zone_info *info) int err = -EINVAL; struct psz_context *cxt = &pstore_zone_cxt; - if (info->total_size < 4096) { + if (info->total_size < 4096 && !info->dmapped_cnt) { pr_warn("total_size must be >= 4096\n"); return -EINVAL; } @@ -1312,7 +1330,7 @@ int register_pstore_zone(struct pstore_zone_info *info) } if (!info->kmsg_size && !info->pmsg_size && !info->console_size && - !info->ftrace_size) { + !info->ftrace_size && !info->dmapped_cnt) { pr_warn("at least one record size must be non-zero\n"); return -EINVAL; } @@ -1345,7 +1363,7 @@ int register_pstore_zone(struct pstore_zone_info *info) * if no @read, pstore may mount failed. * if no @write, pstore do not support to remove record file. */ - if (!info->read || !info->write) { + if (!info->dmapped_cnt && (!info->read || !info->write)) { pr_err("no valid general read/write interface\n"); return -EINVAL; } @@ -1365,6 +1383,7 @@ int register_pstore_zone(struct pstore_zone_info *info) pr_debug("\tpmsg size : %ld Bytes\n", info->pmsg_size); pr_debug("\tconsole size : %ld Bytes\n", info->console_size); pr_debug("\tftrace size : %ld Bytes\n", info->ftrace_size); + pr_debug("\tdmapped areas : %ld\n", info->dmapped_cnt); err = psz_alloc_zones(cxt); if (err) { @@ -1406,6 +1425,10 @@ int register_pstore_zone(struct pstore_zone_info *info) cxt->pstore.flags |= PSTORE_FLAGS_FTRACE; pr_cont(" ftrace"); } + if (info->dmapped_cnt) { + cxt->pstore.flags |= PSTORE_FLAGS_DMAPPED; + pr_cont(" dmapped"); + } pr_cont("\n"); err = pstore_register(&cxt->pstore); diff --git a/include/linux/pstore.h b/include/linux/pstore.h index fed601053c51..8360d94c96b6 100644 --- a/include/linux/pstore.h +++ b/include/linux/pstore.h @@ -39,6 +39,7 @@ enum pstore_type_id { PSTORE_TYPE_PMSG = 7, PSTORE_TYPE_PPC_OPAL = 8, + PSTORE_TYPE_DMAPPED = 9, /* End of the list */ PSTORE_TYPE_MAX }; @@ -199,6 +200,8 @@ struct pstore_info { int (*write_user)(struct pstore_record *record, const char __user *buf); int (*erase)(struct pstore_record *record); + int (*register_dmr)(struct pstore_record *record); + int (*unregister_dmr)(struct pstore_record *record); }; /* Supported frontends */ @@ -206,6 +209,7 @@ struct pstore_info { #define PSTORE_FLAGS_CONSOLE BIT(1) #define PSTORE_FLAGS_FTRACE BIT(2) #define PSTORE_FLAGS_PMSG BIT(3) +#define PSTORE_FLAGS_DMAPPED BIT(4) extern int pstore_register(struct pstore_info *); extern void pstore_unregister(struct pstore_info *); diff --git a/include/linux/pstore_zone.h b/include/linux/pstore_zone.h index 284364234162..a74d0cc75577 100644 --- a/include/linux/pstore_zone.h +++ b/include/linux/pstore_zone.h @@ -48,10 +48,13 @@ struct pstore_zone_info { unsigned long pmsg_size; unsigned long console_size; unsigned long ftrace_size; + unsigned long dmapped_cnt; pstore_zone_read_op read; pstore_zone_write_op write; pstore_zone_erase_op erase; pstore_zone_write_op panic_write; + int (*register_dmr)(char *, int, void *, size_t); + int (*unregister_dmr)(void *, size_t); }; /** From patchwork Mon Feb 17 10:17:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eugen Hristev X-Patchwork-Id: 13977493 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (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 886072185AB for ; Mon, 17 Feb 2025 10:17:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739787477; cv=none; b=uKcN5brrwjYfQ0tPXU9cUp2TpzXEw2CmmDFYkfFP8zXW+DJ2hUoDktFPkOX6GCJ+8GBR6GyStTgi7zjDeAtyP8ByNH4pA/i2iEwynAPwdqNAOSe1TIITyUAbmzPFX5IH4f3zHXr7RIg+qBOtiMMQMO4EhrUiiNTj+y7/CtSY4DE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739787477; c=relaxed/simple; bh=qZuC7gqK3WcrD0D+coZGKMDI2mB55tzfLWIMdlAFyjg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=M3HFe6KfNpHwezjrf2fjrTgRpD0CSluoxacYkyy19Y3sT1KdRe+1Tz4GIiotuo6enxCIfy4oeyhDMfNeCXy/ihBYb9e++UjEFjigM5lcDzPI5c3bANwO67I4wqFzqcOIcHWKZhs4FCldM51+MyGumzaFhSaoyMnwmPfCTk2ZfDU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=qf+kVBpn; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="qf+kVBpn" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-4396424d173so39686145e9.0 for ; Mon, 17 Feb 2025 02:17:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739787472; x=1740392272; 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; bh=QifBQ/xg2RCUDrB4vfDq4gu1LJ6B/77pKMAfIESueUs=; b=qf+kVBpncy34FC7bO2z9mojDXe9X2yIqPsq6y76Q6r26W8QXO9H8rhGDTTuNDZbrbB /aaEvTV2uznjRgon9i0sGXZ2ttSgXWO/3XRKNVFY0UxqYgpIbC7SEqYFJwBbFmZ02yb/ sTV/CyVcHAN1PlMfXQz6Hde2ieMhan2p428sE4LMGiudGAiFuI3/dz7XMMNxxHXsWpAL 0kGu0XEKlUOm0bu19yNYc7RLyB3BToZsKVe2897M4uZm5q567NaxUGXlMh0hpyl60QQp XnA1VKUlitlYVluh8UHZV8CCpvpTjTNoFRcfL47xM8phYHgocNZpDMq/2JsAhzA9G64H QxfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739787472; x=1740392272; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QifBQ/xg2RCUDrB4vfDq4gu1LJ6B/77pKMAfIESueUs=; b=QlGEom9Wj3Ol89KkpHb8uDvIlSoiippEYMkLuHqAciFXjs1mH9Cyu1najPQEZheCnN tIvT/4blgvuyDXzeNYg+UpzM4Er6Ki5BLtVrT/vM8Jija35ne/JbpXBCYPOBnuyUY/kF 0uWVvlTDIFUQko8nXqR2tWDgroafOY7vjK0m8Hmiy4cUEidzJjwPESTVd4oA24XDAjXQ ap2FOiz+ipzqQ963xpZJKv229H/OCQMKL4VIVPMelSJE1ISR3X0jSbrz/00LCs0Vl432 8R9so3jYyLZ18WmogMQABKRJw0mbEtWwnGRqB5qcgdvBlEacElD9ORybwQ4gE0O8aNnY D+Pg== X-Forwarded-Encrypted: i=1; AJvYcCV97RzCI2jn2AS56zZntSQRtmgSWjua0quaLXP9Q/zUK/KGBAh8s7J9zTlblhWQZl4V/eGl2snOfuQ9FBCnI68=@vger.kernel.org X-Gm-Message-State: AOJu0Yze6Up4xaqrcZElHhqwrNjIKEZ0gDA3rE6W7p+JpfCocUkZ3Vko cV+sQdhp5Ut3QzKgcatd6HywtQJv2J3FAX6MLMJA9UzHstINHW0NbCrW4XVwiCU= X-Gm-Gg: ASbGncs2Qlo1O8vC26JDspW06nN4NIjdBiSuS7Sxdlvs20JAH/NAKavBJV/U81EPfon WY87vWdZqdRLNubcMHNg6y5d1xRfgwzRAdYNEjW4iOTmA3u+VdKdU5d0XiuOlNIad6UOK45AxvV nuo7L0T0+K4uoe3r4nDjq2KtH6OkA0cChoaGbiyY9E+D9fhrqqoES9zXWwiSlyNdkUSRq3djA5J tI7CPQQid2EE3peoRP3xrVyilhIpBRKrRnZlgORxi3xOV+/uM4NOJeosR3ZtHU6svcT8HI/7ECq Njnfsfe47DdLGJ2JTabnNsax X-Google-Smtp-Source: AGHT+IHXaznwSyo3YbfYL/R4+3M72WRvyCNEfigOhBxj8g1XzyEDxhWvwflhOeb8uHLrPz5EryyeQA== X-Received: by 2002:a5d:5f4a:0:b0:38f:4244:68cb with SMTP id ffacd0b85a97d-38f42446bfbmr3184326f8f.12.1739787471737; Mon, 17 Feb 2025 02:17:51 -0800 (PST) Received: from eugen-station.. ([82.76.24.202]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abb8b1767e8sm308583266b.174.2025.02.17.02.17.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 02:17:51 -0800 (PST) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org, kees@kernel.org Cc: linux-kernel@vger.kernel.org, johannes@sipsolutions.net, gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org, andersson@kernel.org, konradybcio@kernel.org, tony.luck@intel.com, gpiccoli@igalia.com, pmladek@suse.com, rostedt@goodmis.org, john.ogness@linutronix.de, senozhatsky@chromium.org, quic_mojha@quicinc.com, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Eugen Hristev Subject: [RFC][PATCH 04/10] qcom: smem: add pstore smem backend Date: Mon, 17 Feb 2025 12:17:00 +0200 Message-ID: <20250217101706.2104498-5-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250217101706.2104498-1-eugen.hristev@linaro.org> References: <20250217101706.2104498-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-hardening@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Add support for pstore smem backend in the qcom smem driver. This backend resorts to minidump regions behind the scenes. Co-developed-by: Mukesh Ojha Signed-off-by: Eugen Hristev --- drivers/soc/qcom/Kconfig | 9 + drivers/soc/qcom/Makefile | 6 +- drivers/soc/qcom/smem_md.c | 306 +++++++++++++++++++++++++++++++++ drivers/soc/qcom/smem_pstore.c | 112 ++++++++++++ include/linux/soc/qcom/smem.h | 43 +++++ 5 files changed, 474 insertions(+), 2 deletions(-) create mode 100644 drivers/soc/qcom/smem_md.c create mode 100644 drivers/soc/qcom/smem_pstore.c diff --git a/drivers/soc/qcom/Kconfig b/drivers/soc/qcom/Kconfig index 58e63cf0036b..e1c71f713c05 100644 --- a/drivers/soc/qcom/Kconfig +++ b/drivers/soc/qcom/Kconfig @@ -180,6 +180,15 @@ config QCOM_SMEM The driver provides an interface to items in a heap shared among all processors in a Qualcomm platform. +config QCOM_SMEM_PSTORE + bool "Qualcomm Shared Memory(SMEM) Pstore backend" + depends on QCOM_SMEM + select PSTORE + select PSTORE_SMEM + help + Say y here to enable the shared memory driver to register itself + as a pstore backend. + config QCOM_SMD_RPM tristate "Qualcomm Resource Power Manager (RPM) over SMD" depends on ARCH_QCOM || COMPILE_TEST diff --git a/drivers/soc/qcom/Makefile b/drivers/soc/qcom/Makefile index acbca2ab5cc2..304b031ed70e 100644 --- a/drivers/soc/qcom/Makefile +++ b/drivers/soc/qcom/Makefile @@ -23,8 +23,10 @@ obj-$(CONFIG_QCOM_RPMH) += qcom_rpmh.o qcom_rpmh-y += rpmh-rsc.o qcom_rpmh-y += rpmh.o obj-$(CONFIG_QCOM_SMD_RPM) += rpm-proc.o smd-rpm.o -obj-$(CONFIG_QCOM_SMEM) += smem.o -obj-$(CONFIG_QCOM_SMEM_STATE) += smem_state.o +obj-$(CONFIG_QCOM_SMEM) += qcom_smem.o +qcom_smem-y += smem.o +qcom_smem-$(CONFIG_QCOM_SMEM_PSTORE) += smem_pstore.o smem_md.o +obj-$(CONFIG_QCOM_SMEM_STATE) += smem_state.o CFLAGS_smp2p.o := -I$(src) obj-$(CONFIG_QCOM_SMP2P) += smp2p.o obj-$(CONFIG_QCOM_SMSM) += smsm.o diff --git a/drivers/soc/qcom/smem_md.c b/drivers/soc/qcom/smem_md.c new file mode 100644 index 000000000000..2b665ecc5695 --- /dev/null +++ b/drivers/soc/qcom/smem_md.c @@ -0,0 +1,306 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MAX_NUM_ENTRIES 201 +#define MAX_STRTBL_SIZE (MAX_NUM_ENTRIES * MAX_REGION_NAME_LENGTH) + +#define MAX_NUM_OF_SS 10 +#define MAX_REGION_NAME_LENGTH 16 +#define SBL_MINIDUMP_SMEM_ID 602 +#define MINIDUMP_REGION_VALID ('V' << 24 | 'A' << 16 | 'L' << 8 | 'I' << 0) +#define MINIDUMP_SS_ENCR_DONE ('D' << 24 | 'O' << 16 | 'N' << 8 | 'E' << 0) +#define MINIDUMP_SS_ENABLED ('E' << 24 | 'N' << 16 | 'B' << 8 | 'L' << 0) +#define MINIDUMP_REGION_INVALID ('I' << 24 | 'N' << 16 | 'V' << 8 | 'A' << 0) +#define MINIDUMP_REGION_INIT ('I' << 24 | 'N' << 16 | 'I' << 8 | 'T' << 0) +#define MINIDUMP_REGION_NOINIT 0 + +#define MINIDUMP_SS_ENCR_REQ (0 << 24 | 'Y' << 16 | 'E' << 8 | 'S' << 0) +#define MINIDUMP_SS_ENCR_NOTREQ (0 << 24 | 0 << 16 | 'N' << 8 | 'R' << 0) +#define MINIDUMP_SS_ENCR_START ('S' << 24 | 'T' << 16 | 'R' << 8 | 'T' << 0) + +#define MINIDUMP_APSS_DESC 0 + +/** + * struct minidump - Minidump driver data information + * @apss_data: APSS driver data + * @md_lock: Lock to protect access to APSS minidump table + */ +struct minidump { + struct device *dev; + struct minidump_ss_data *apss_data; + struct mutex md_lock; +}; + +/** + * struct minidump_region - Minidump region + * @name : Name of the region to be dumped + * @seq_num: : Use to differentiate regions with same name. + * @valid : This entry to be dumped (if set to 1) + * @address : Physical address of region to be dumped + * @size : Size of the region + */ +struct minidump_region { + char name[MAX_REGION_NAME_LENGTH]; + __le32 seq_num; + __le32 valid; + __le64 address; + __le64 size; +}; + +/** + * struct minidump_subsystem - Subsystem's SMEM Table of content + * @status : Subsystem toc init status + * @enabled : if set to 1, this region would be copied during coredump + * @encryption_status: Encryption status for this subsystem + * @encryption_required : Decides to encrypt the subsystem regions or not + * @region_count : Number of regions added in this subsystem toc + * @regions_baseptr : regions base pointer of the subsystem + */ +struct minidump_subsystem { + __le32 status; + __le32 enabled; + __le32 encryption_status; + __le32 encryption_required; + __le32 region_count; + __le64 regions_baseptr; +}; + +/** + * struct minidump_global_toc - Global Table of Content + * @status : Global Minidump init status + * @md_revision : Minidump revision + * @enabled : Minidump enable status + * @subsystems : Array of subsystems toc + */ +struct minidump_global_toc { + __le32 status; + __le32 md_revision; + __le32 enabled; + struct minidump_subsystem subsystems[MAX_NUM_OF_SS]; +}; +/** + * struct minidump_ss_data - Minidump subsystem private data + * @md_ss_toc: Application Subsystem TOC pointer + * @md_regions: Application Subsystem region base pointer + */ +struct minidump_ss_data { + struct minidump_subsystem *md_ss_toc; + struct minidump_region *md_regions; +}; + +static struct minidump *md; + +static void qcom_md_add_region(const struct qcom_minidump_region *region) +{ + struct minidump_subsystem *mdss_toc = md->apss_data->md_ss_toc; + struct minidump_region *mdr; + unsigned int region_cnt; + + region_cnt = le32_to_cpu(mdss_toc->region_count); + mdr = &md->apss_data->md_regions[region_cnt]; + strscpy(mdr->name, region->name, sizeof(mdr->name)); + mdr->address = cpu_to_le64(region->phys_addr); + mdr->size = cpu_to_le64(region->size); + mdr->valid = cpu_to_le32(MINIDUMP_REGION_VALID); + region_cnt++; + mdss_toc->region_count = cpu_to_le32(region_cnt); +} + +static int qcom_md_get_region_index(struct minidump_ss_data *mdss_data, + const struct qcom_minidump_region *region) +{ + struct minidump_subsystem *mdss_toc = mdss_data->md_ss_toc; + struct minidump_region *mdr; + unsigned int i; + unsigned int count; + + count = le32_to_cpu(mdss_toc->region_count); + for (i = 0; i < count; i++) { + mdr = &mdss_data->md_regions[i]; + if (!strcmp(mdr->name, region->name)) + return i; + } + + return -ENOENT; +} + +static int qcom_md_region_unregister(const struct qcom_minidump_region *region) +{ + struct minidump_ss_data *mdss_data = md->apss_data; + struct minidump_subsystem *mdss_toc = mdss_data->md_ss_toc; + struct minidump_region *mdr; + unsigned int region_cnt; + unsigned int idx; + int ret; + + ret = qcom_md_get_region_index(mdss_data, region); + if (ret < 0) { + dev_err(md->dev, "%s region is not present\n", region->name); + return ret; + } + + idx = ret; + mdr = &mdss_data->md_regions[0]; + region_cnt = le32_to_cpu(mdss_toc->region_count); + /* + * Left shift all the regions exist after this removed region + * index by 1 to fill the gap and zero out the last region + * present at the end. + */ + memmove(&mdr[idx], &mdr[idx + 1], (region_cnt - idx - 1) * sizeof(*mdr)); + memset(&mdr[region_cnt - 1], 0, sizeof(*mdr)); + region_cnt--; + mdss_toc->region_count = cpu_to_le32(region_cnt); + + return 0; +} + +static int qcom_md_region_register(const struct qcom_minidump_region *region) +{ + struct minidump_ss_data *mdss_data = md->apss_data; + struct minidump_subsystem *mdss_toc = mdss_data->md_ss_toc; + unsigned int num_region; + int ret; + + ret = qcom_md_get_region_index(mdss_data, region); + if (ret >= 0) { + dev_info(md->dev, "%s region is already registered\n", region->name); + return -EEXIST; + } + + /* Check if there is a room for a new entry */ + num_region = le32_to_cpu(mdss_toc->region_count); + if (num_region >= MAX_NUM_ENTRIES) { + dev_err(md->dev, "maximum region limit %u reached\n", num_region); + return -ENOSPC; + } + + qcom_md_add_region(region); + + return 0; +} + +static bool qcom_minidump_valid_region(const struct qcom_minidump_region *region) +{ + return region && + strnlen(region->name, MINIDUMP_MAX_NAME_LENGTH) < MINIDUMP_MAX_NAME_LENGTH && + region->virt_addr && + region->size && + IS_ALIGNED(region->size, 4); +} + +/** + * qcom_minidump_region_register() - Register region in APSS Minidump table. + * @region: minidump region. + * + * Return: On success, it returns 0 and negative error value on failure. + */ +int qcom_minidump_region_register(const struct qcom_minidump_region *region) +{ + int ret; + + if (!qcom_minidump_valid_region(region)) + return -EINVAL; + + mutex_lock(&md->md_lock); + ret = qcom_md_region_register(region); + + mutex_unlock(&md->md_lock); + return ret; +} + +/** + * qcom_minidump_region_unregister() - Unregister region from APSS Minidump table. + * @region: minidump region. + * + * Return: On success, it returns 0 and negative error value on failure. + */ +int qcom_minidump_region_unregister(const struct qcom_minidump_region *region) +{ + int ret; + + if (!qcom_minidump_valid_region(region)) + return -EINVAL; + + mutex_lock(&md->md_lock); + ret = qcom_md_region_unregister(region); + + mutex_unlock(&md->md_lock); + return ret; +} + + +static int qcom_apss_md_table_init(struct minidump_subsystem *mdss_toc) +{ + struct minidump_ss_data *mdss_data; + + mdss_data = devm_kzalloc(md->dev, sizeof(*mdss_data), GFP_KERNEL); + if (!mdss_data) + return -ENOMEM; + + mdss_data->md_ss_toc = mdss_toc; + mdss_data->md_regions = devm_kcalloc(md->dev, MAX_NUM_ENTRIES, + sizeof(*mdss_data->md_regions), + GFP_KERNEL); + if (!mdss_data->md_regions) + return -ENOMEM; + + mdss_toc = mdss_data->md_ss_toc; + mdss_toc->regions_baseptr = cpu_to_le64(virt_to_phys(mdss_data->md_regions)); + mdss_toc->enabled = cpu_to_le32(MINIDUMP_SS_ENABLED); + mdss_toc->status = cpu_to_le32(1); + mdss_toc->region_count = cpu_to_le32(0); + + /* Tell bootloader not to encrypt the regions of this subsystem */ + mdss_toc->encryption_status = cpu_to_le32(MINIDUMP_SS_ENCR_DONE); + mdss_toc->encryption_required = cpu_to_le32(MINIDUMP_SS_ENCR_NOTREQ); + + md->apss_data = mdss_data; + + return 0; +} + +int qcom_smem_md_init(struct device *dev) +{ + struct minidump_global_toc *mdgtoc; + size_t size; + int ret; + + md = devm_kzalloc(dev, sizeof(*md), GFP_KERNEL); + + md->dev = dev; + + mdgtoc = qcom_smem_get(QCOM_SMEM_HOST_ANY, SBL_MINIDUMP_SMEM_ID, &size); + if (IS_ERR(mdgtoc)) { + ret = PTR_ERR(mdgtoc); + dev_err(md->dev, "Couldn't find minidump smem item %d\n", ret); + } + + if (size < sizeof(*mdgtoc) || !mdgtoc->status) { + ret = -EINVAL; + dev_err(md->dev, "minidump table is not initialized %d\n", ret); + } + + mutex_init(&md->md_lock); + + ret = qcom_apss_md_table_init(&mdgtoc->subsystems[MINIDUMP_APSS_DESC]); + if (ret) + dev_err(md->dev, "apss minidump initialization failed %d\n", ret); + return ret; +} diff --git a/drivers/soc/qcom/smem_pstore.c b/drivers/soc/qcom/smem_pstore.c new file mode 100644 index 000000000000..a322a320e435 --- /dev/null +++ b/drivers/soc/qcom/smem_pstore.c @@ -0,0 +1,112 @@ +// SPDX-License-Identifier: GPL-2.0-only +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static LIST_HEAD(apss_md_rlist); +struct md_region_list { + struct qcom_minidump_region md_region; + struct list_head list; +}; + +static struct qcom_smem_pstore_context { + struct pstore_device_info dev; +} oops_ctx; + +static int register_smem_region(const char *name, int id, void *vaddr, + phys_addr_t paddr, size_t size) +{ + struct qcom_minidump_region *md_region; + int ret; + + struct md_region_list *mdr_list = + kzalloc(sizeof(*mdr_list), GFP_KERNEL); + if (!mdr_list) + return -ENOMEM; + md_region = &mdr_list->md_region; + + scnprintf(md_region->name, sizeof(md_region->name), "K%d%.8s", id, name); + md_region->virt_addr = vaddr; + md_region->phys_addr = paddr; + md_region->size = size; + ret = qcom_minidump_region_register(md_region); + if (ret < 0) { + pr_err("failed to register region in minidump: err: %d\n", ret); + return ret; + } + + list_add(&mdr_list->list, &apss_md_rlist); + return 0; +} + +static int unregister_smem_region(void *vaddr, + phys_addr_t paddr, size_t size) +{ + int ret = -ENOENT; + struct md_region_list *mdr_list; + struct md_region_list *tmp; + + list_for_each_entry_safe(mdr_list, tmp, &apss_md_rlist, list) { + struct qcom_minidump_region *region; + + region = &mdr_list->md_region; + if (region->virt_addr == vaddr) { + ret = qcom_minidump_region_unregister(region); + list_del(&mdr_list->list); + goto unregister_smem_region_exit; + } + } + +unregister_smem_region_exit: + pr_err("failed to unregister region in minidump: err: %d\n", ret); + + return ret; +} + +static int qcom_smem_register_dmr(char *name, int id, void *area, size_t size) +{ + return register_smem_region(name, id, area, virt_to_phys(area), size); +} + +static int qcom_smem_unregister_dmr(void *area, size_t size) +{ + return unregister_smem_region(area, virt_to_phys(area), size); +} + +int qcom_register_pstore_smem(struct device *dev) +{ + int ret; + + struct qcom_smem_pstore_context *ctx = &oops_ctx; + + ctx->dev.flags = PSTORE_FLAGS_DMAPPED; + ctx->dev.zone.register_dmr = qcom_smem_register_dmr; + ctx->dev.zone.unregister_dmr = qcom_smem_unregister_dmr; + ctx->dev.zone.dmapped_cnt = 2; + + ret = register_pstore_smem_device(&ctx->dev); + if (ret) + dev_warn(dev, "Could not register pstore smem device."); + + return 0; +} + +void qcom_unregister_pstore_smem(void) +{ + struct qcom_smem_pstore_context *ctx = &oops_ctx; + + unregister_pstore_smem_device(&ctx->dev); +} diff --git a/include/linux/soc/qcom/smem.h b/include/linux/soc/qcom/smem.h index f946e3beca21..376822f13a4f 100644 --- a/include/linux/soc/qcom/smem.h +++ b/include/linux/soc/qcom/smem.h @@ -17,4 +17,47 @@ int qcom_smem_get_feature_code(u32 *code); int qcom_smem_bust_hwspin_lock_by_host(unsigned int host); +#ifdef CONFIG_QCOM_SMEM_PSTORE +int qcom_register_pstore_smem(struct device *dev); +void qcom_unregister_pstore_smem(void); + +#define MINIDUMP_MAX_NAME_LENGTH 12 + +/** + * struct qcom_minidump_region - Minidump region information + * + * @name: Minidump region name + * @virt_addr: Virtual address of the entry. + * @phys_addr: Physical address of the entry to dump. + * @size: Number of bytes to dump from @address location, + * and it should be 4 byte aligned. + */ +struct qcom_minidump_region { + char name[MINIDUMP_MAX_NAME_LENGTH]; + void *virt_addr; + phys_addr_t phys_addr; + size_t size; +}; + +int qcom_minidump_region_unregister(const struct qcom_minidump_region *region); +int qcom_minidump_region_register(const struct qcom_minidump_region *region); + +int qcom_smem_md_init(struct device *dev); + +#else + +static inline int qcom_register_pstore_smem(struct device *dev) +{ + return 0; +} + +static inline void qcom_unregister_pstore_smem(void) +{ +} + +static inline int qcom_smem_md_init(struct device *dev) +{ + return 0; +} +#endif #endif From patchwork Mon Feb 17 10:17:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eugen Hristev X-Patchwork-Id: 13977495 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (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 42A41218AB3 for ; Mon, 17 Feb 2025 10:17:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739787479; cv=none; b=ZdAPpjlcoQv2UZu/SeVJGNINtUNKbiMDb/nLz+xg6LLI5YhvFEHAQp1z+dkYUiOwXQw28nPkCpPMU66gFWEYELt4PbFGKzZxJpK1NG5EACYpeGfuZQesEhh84mlEnrO7fkHWoGOyTEqepSis0IAEtuLf2SfrLniq0LqLkL8Zh7U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739787479; c=relaxed/simple; bh=u5QzLaMGCFkT6QzP4xgn658e+DtF0u9SlOsNS3Z0kwo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IK1jokLbmjQeDaddG7xuS/EGmVCRg5aS0KqnPCJweL08Kr4/5qV6nH/p7mZA995LxUcaengAP4eeySDzNzBzf1eJsMqayKSq4wzLHQ0chxozT6bdp35UbknRf8R2+rnPto0Dg74VtXg1CaVxSI6Jrx97DESUuzFMLG8y7qmjgLA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=j2d+EPkL; arc=none smtp.client-ip=209.85.208.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="j2d+EPkL" Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-5e033c2f106so2920768a12.3 for ; Mon, 17 Feb 2025 02:17:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739787473; x=1740392273; 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; bh=o2yIlVyyOPbQ4NJXMaimxxzGIHYKCdR1oZZmLPUjNQg=; b=j2d+EPkLrDxgowwfi3qhRIjWh3BxHHmKPmoHbK4IV0P+8SGyo9EQQIWVd48uMfhqS2 f7Kz649HjUrXieGFnC479UXFrUu+YnIyAMN19eow9Jt/CWSOaDI5q7QgaypOuGFvakVj IFUM8iH1DOXSw7fnVuEb3SLDWRIwpqdC8Q6DxK8YhJlXYqUredVfSnlAbNIHAxT6zE9/ dxoFpS41YZoz/wQvNEJ0+O3/zoHPLvDLvAkVLtp3vsj4KlnJK5Hb6yH8t7BTRSbJqtss srGGj2DXfBDjZU+Jq9/y3ESE3izbGb6LWueJAgyQz481kIm/3rXeciXfjbcIbLNLtVdm 7Ygw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739787473; x=1740392273; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=o2yIlVyyOPbQ4NJXMaimxxzGIHYKCdR1oZZmLPUjNQg=; b=sfeYukD0/xQ9R3zJBW6qBJlGfTa3XaVuWGllQRW/votiHKBpwTK9J5xm4JiY2RzdZd MRj1VkuOYJHLiqDBlt+eCQExzdPaZUkvgxoN8tbJarF1uzQrD0WzlFoM3qsTLtJ00iUa 7JRHqFc8q75cQpOB26n48Kag8brKgdWrnFHDEOG1dB1rE1y4pK9zzYBAN3WCtZ8GBt59 ZXwKstIFDfocRQFtikuYwz/Ujrter9dp2MnKaAupkG4kHt24qdcuKpaY7DLDMXxvj1bP uBsejS6/E5xVViXcsob5EBKurKCdczYO9brjFRFLBitj/GedcS0+gYLsfRRqCgZ41qWy vpQw== X-Forwarded-Encrypted: i=1; AJvYcCUv4gCspvr3suN39W2/7f6Wszmsb+vxAG+S9B6CBDUZxK0SJTrKziapILZHZTGz3aiPtqKiBFwDEdFigY9y8WI=@vger.kernel.org X-Gm-Message-State: AOJu0YzHTtlP4QeHcw5h7VgDOy9RJOquZLp+7E6Xi1xi5l7Xw88HxK2T TmEw2js1oKjhkbkGMzCI6xsvAHDmN3xicKjacZfq/wYg0nffhQABvslCl1xXD7k= X-Gm-Gg: ASbGncvIl4Xr/2DZJZoh8DTux4UDRJraCDgVviGwlm1AQIHd5Lh8s5qkg3DjsAIvUDn 56fTmdXW8zZ/f1I9zWq6Cjid5y/lnPsS38cG6Lp/twKr1NlPndobPD0MnVvPCy13c7We2lwxiz+ igqH/obxjap3qw61mHSZr3CY/hHR2m6NZM0AfnbCNcjlKpBIc6lEkWW0mYTJTPw9MntTW0rzWcX cqktR4p75MbxX63ePw+P0vBBtIk73NZnqNS/pQq9Q0q4ecIDOA68l1zd9ZubA7BRmV9XklphK+p diKdUhwpmA9UTVspqVI/EfNn X-Google-Smtp-Source: AGHT+IGpx0/whONuJWGo4HwkqVqYsCJmEUhrUJNrzL9FCk0mF7dow3SMs9U25x2XZBwWQZmzKpeEtw== X-Received: by 2002:a05:6402:5107:b0:5dc:ea7e:8c56 with SMTP id 4fb4d7f45d1cf-5e036139d68mr21109346a12.22.1739787473355; Mon, 17 Feb 2025 02:17:53 -0800 (PST) Received: from eugen-station.. ([82.76.24.202]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abb8b1767e8sm308583266b.174.2025.02.17.02.17.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 02:17:53 -0800 (PST) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org, kees@kernel.org Cc: linux-kernel@vger.kernel.org, johannes@sipsolutions.net, gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org, andersson@kernel.org, konradybcio@kernel.org, tony.luck@intel.com, gpiccoli@igalia.com, pmladek@suse.com, rostedt@goodmis.org, john.ogness@linutronix.de, senozhatsky@chromium.org, quic_mojha@quicinc.com, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Eugen Hristev Subject: [RFC][PATCH 05/10] pstore: implement core area registration Date: Mon, 17 Feb 2025 12:17:01 +0200 Message-ID: <20250217101706.2104498-6-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250217101706.2104498-1-eugen.hristev@linaro.org> References: <20250217101706.2104498-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-hardening@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Implement core area registration mechanism. Implement directly mapped zone corespoding to core areas. Signed-off-by: Eugen Hristev --- fs/pstore/platform.c | 67 ++++++++++++++++++++++++++++++++++++ fs/pstore/zone.c | 77 ++++++++++++++++++++++++++++++++++++++++++ include/linux/pstore.h | 16 +++++++++ 3 files changed, 160 insertions(+) diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c index e20e60b88727..32448d9dd316 100644 --- a/fs/pstore/platform.c +++ b/fs/pstore/platform.c @@ -68,6 +68,7 @@ static DECLARE_WORK(pstore_work, pstore_dowork); * the filesystem mount/unmount routines. */ static DEFINE_MUTEX(psinfo_lock); +static DEFINE_MUTEX(ps_dmr_lock); struct pstore_info *psinfo; static char *backend; @@ -99,6 +100,12 @@ MODULE_PARM_DESC(kmsg_bytes, "amount of kernel log to snapshot (in bytes)"); static void *compress_workspace; +static LIST_HEAD(rec_list); +struct rec_list_t { + struct pstore_record rec; + struct list_head list; +}; + /* * Compression is only used for dmesg output, which consists of low-entropy * ASCII text, and so we can assume worst-case 60%. @@ -271,6 +278,66 @@ void pstore_record_init(struct pstore_record *record, record->time = ns_to_timespec64(ktime_get_real_fast_ns()); } +int pstore_register_core_area(const char *handle, void *area, size_t size) +{ + struct rec_list_t *rec_element = kzalloc(sizeof (*rec_element), GFP_KERNEL); + struct pstore_record *record = &rec_element->rec; + int ret; + + if (!psinfo || !psinfo->register_dmr) { + pr_err("No pstore available ! Bailing out.\n"); + return -EAGAIN; + } + + pstore_record_init(record, psinfo); + record->type = PSTORE_TYPE_DMAPPED; + record->buf = area; + record->size = size; + + if (handle) { + record->priv = kmalloc(8, GFP_KERNEL); + strncpy(record->priv, handle, 8); + } + + mutex_lock(&ps_dmr_lock); + + ret = psinfo->register_dmr(record); + if (!ret) + list_add(&rec_element->list, &rec_list); + + mutex_unlock(&ps_dmr_lock); + return ret; +} +EXPORT_SYMBOL_GPL(pstore_register_core_area); + +int pstore_unregister_core_area(const char *handle, void *area, size_t size) +{ + struct rec_list_t *rec_element, *tmp; + int ret; + + if (!psinfo || !psinfo->unregister_dmr) + return -EAGAIN; + + mutex_lock(&ps_dmr_lock); + list_for_each_entry_safe(rec_element, tmp, &rec_list, list) { + struct pstore_record *record; + + record = &rec_element->rec; + + if (record->buf == area) { + ret = psinfo->unregister_dmr(record); + list_del(&rec_element->list); + mutex_unlock(&ps_dmr_lock); + return 0; + } + } + + mutex_unlock(&ps_dmr_lock); + return 0; + +} +EXPORT_SYMBOL_GPL(pstore_unregister_core_area); + /* * callback from kmsg_dump. Save as much as we can (up to kmsg_bytes) from the * end of the buffer. diff --git a/fs/pstore/zone.c b/fs/pstore/zone.c index affa4370208c..f9e2dc4252ea 100644 --- a/fs/pstore/zone.c +++ b/fs/pstore/zone.c @@ -35,6 +35,7 @@ struct psz_buffer { uint32_t sig; atomic_t datalen; atomic_t start; + void *data_ptr; uint8_t data[]; }; @@ -822,6 +823,38 @@ static int notrace psz_kmsg_write(struct psz_context *cxt, return 0; } +static int notrace psz_register_dmr_record(struct pstore_zone *zone, + struct pstore_record *record) +{ + struct pstore_zone_info *info = pstore_zone_cxt.pstore_zone_info; + int ret; + + if (!info->register_dmr) + return -ENOTSUPP; + + zone->buffer->data_ptr = record->buf; + atomic_set(&zone->buffer->datalen, record->size); + + ret = info->register_dmr(record->priv, record->id, record->buf, + record->size); + if (!ret) + atomic_set(&zone->dirty, true); + return ret; +} + +static int psz_unregister_dmr_zone(struct pstore_zone *zone) +{ + struct pstore_zone_info *info = pstore_zone_cxt.pstore_zone_info; + if (!info->unregister_dmr) + return -ENOTSUPP; + + info->unregister_dmr(zone->buffer->data_ptr, + atomic_read(&zone->buffer->datalen)); + + atomic_set(&zone->dirty, false); + return 0; +} + static int notrace psz_record_write(struct pstore_zone *zone, struct pstore_record *record) { @@ -906,6 +939,48 @@ static int notrace psz_pstore_write(struct pstore_record *record) } } +static int pstore_unregister_dmr(struct pstore_record *record) +{ + struct psz_context *cxt = record->psi->data; + int c = 0; + + if (!cxt->dmszs) + return -ENODEV; + + while (c < cxt->dmapped_max_cnt) { + if (!atomic_read(&cxt->dmszs[c]->dirty)) + continue; + + if (cxt->dmszs[c]->buffer->data_ptr == record->buf) + return psz_unregister_dmr_zone(cxt->dmszs[c]); + c++; + } + + return -ENOENT; +} + +static int pstore_register_dmr(struct pstore_record *record) +{ + struct psz_context *cxt = record->psi->data; + int c = 0; + + if (!cxt->dmszs) + return -ENODEV; + + while (c < cxt->dmapped_max_cnt) { + if (!atomic_read(&cxt->dmszs[c]->dirty)) + break; + c++; + } + + if (c == cxt->dmapped_max_cnt) + return -ENOSPC; + + record->id = c; + + return psz_register_dmr_record(cxt->dmszs[c], record); +} + static struct pstore_zone *psz_read_next_zone(struct psz_context *cxt) { struct pstore_zone *zone = NULL; @@ -1110,6 +1185,8 @@ static struct psz_context pstore_zone_cxt = { .read = psz_pstore_read, .write = psz_pstore_write, .erase = psz_pstore_erase, + .register_dmr = pstore_register_dmr, + .unregister_dmr = pstore_unregister_dmr, }, }; diff --git a/include/linux/pstore.h b/include/linux/pstore.h index 8360d94c96b6..85f3f964b268 100644 --- a/include/linux/pstore.h +++ b/include/linux/pstore.h @@ -290,4 +290,20 @@ pstore_ftrace_write_timestamp(struct pstore_ftrace_record *rec, u64 val) } #endif +#ifdef CONFIG_PSTORE +int pstore_register_core_area(const char *handle, void *area, size_t size); +int pstore_unregister_core_area(const char *handle, void *area, size_t size); +#else +static inline int pstore_register_core_area(const char *handle, void *area, + size_t size) +{ + return 0; +} +static inline int pstore_unregister_core_area(const char *handle, void *area, + size_t size) +{ + return 0; +} +#endif + #endif /*_LINUX_PSTORE_H*/ From patchwork Mon Feb 17 10:17:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eugen Hristev X-Patchwork-Id: 13977494 Received: from mail-ej1-f43.google.com (mail-ej1-f43.google.com [209.85.218.43]) (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 C9ABC218AA5 for ; Mon, 17 Feb 2025 10:17:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739787478; cv=none; b=iypMC5JY8HO3N/mR74BmigRSi2m0bOQFS1vvTf8IF3wgSrb1gfJ9hBW+V6fmq8pABj4gKcpKTGt+tTo3cBAqUybwtsWuHuxDq8FVJuHrsKYCNqZqenpo2lWUpCZpC8hr4FugySHw8CNFsQT1jmbSRgjeY2hWIfV6UyQOll3ibcY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739787478; c=relaxed/simple; bh=aIDoW7X3UEqmkRU5fd1ed1f7Yb48yUxmvjsG6JEXMy4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CWAYD9RfhnXknf5QbDMaXl0KwQtzfi+7qh1vb1hjTK8cguEnFj6bwl093+YqAiuF1BIoYSs6r3dw4d60voLT/qXYCh/VkhLLIuhThliMZBPbckwbwwkqMpi6SJD0oViyVmtM4E91e5giXtqxC/8MZ8fIwTvwtlyjmvX9xw/uPNc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=o8twVDZo; arc=none smtp.client-ip=209.85.218.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="o8twVDZo" Received: by mail-ej1-f43.google.com with SMTP id a640c23a62f3a-abb79af88afso297711866b.1 for ; Mon, 17 Feb 2025 02:17:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739787475; x=1740392275; 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; bh=pjqSIaqjo22M/fJ6WrzBYInBLUW49xWtc11H9nbdufw=; b=o8twVDZojukUFWL3S8iI2AP6UXMtrVpRVaVZH5UvvmTEpXcZO1UpLxeF/YDscsxnCB S+jjnSTM2IasEld2rvi7OfFnTKUwwPSYqTk+coYyqOpzyHziSAl9zl9ev9M3FstDb+5+ 6cErzq/sJAhoxcjpkzUqzAsC7sjlrUrsgoclQu4UtPVOQaI9hsjGQJM+gNY4bjgXnNXq 520EfVxXrR3v4tW+oAMjlHcgqhXKdqfbFznB/CwuROHoYjyRM1beA6qm27iN4iy2tif0 Bs/ZBIll+F39RX/vEk+4u5isoI7LTWYnz8UsU8QLOJSPKMibWBQMwpbEJxaN1dZnHue9 wutA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739787475; x=1740392275; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pjqSIaqjo22M/fJ6WrzBYInBLUW49xWtc11H9nbdufw=; b=c5fdm8oLEusd/ohq2Yqj53quvMoqq+7nfYNglToK/ocE0uQCkb+CFN3xBCHFiAIrtC Thv9e0CvbCfigVzp1iiaWlEyMxglARBaErpZpOu9JY4mh/sMIx3S0uXNmQBRWrLezszr rs7CN6XJBI+JlcUx0/kRIHkpxTXJ29w9vfyyxdu+sojdo2/tIXGvYSsG7jV6GwYkD4X+ I3xWumf4CzmZVpF8sV7SBjvH8jE4m43IfJBwOvlsTr4YkjbZHJwZHNd0GyHxjRM2ly/w ypWlGC5zUxiEVFc9Uau1najMDOm7MzLOSJCkCofjMQAy2wEBikbqDs38McGi4pQkqXA9 dddg== X-Forwarded-Encrypted: i=1; AJvYcCWsn9BMWKILWSAVH5xpS/IwRCSJUYFpMw5EoVLwpwIx9ipUcQqP4x1h25dhLSzm/QcNQRlTAgk79oSK+kw20sE=@vger.kernel.org X-Gm-Message-State: AOJu0YwoH0JBQNSBkxCt8u9QYXybCDAaC0HtO2DuXE+rEJOmFR5ERZH5 Vs1M5iUAEG/QhYFcsYnl97jybIb/ZVC/NHHb4BoSAs/mcn+fl5CZ6DwCYE3QHWY= X-Gm-Gg: ASbGncsjRB0+VLlua4tlxHht8lCYVRvTRSeZ1nt412D8mh+X0i9xulM+6Qc8j1Ogefu FXiorBg+QavALoHF+NwXiTbi8tx27VyfaUuAC+50njIQvrXrDurobounTgwOH2HmfD+gRgsv3mv M6EjCDYUZNwn87xilhomNjQYOfjKmjkqMdlM+oqN1tldONoXBWLuTBfi88n4owVPCnW5PSmTd1X mLB7IG0VgjvzTaTcQ8NXl1LBZxkFuy+DzdO7EslHpp/WGYEvmG4hXYx0omCGu3BYJM+2X3SliGN fHhqnjMkAsbu4io/MZo6MsCC X-Google-Smtp-Source: AGHT+IFlDyIupv/Dc3O4C3y1gwzt/272w46jucKO95aSvrTTvzjMkzKCPNIWu+2421TQveFqhl50lg== X-Received: by 2002:a17:907:26ce:b0:ab7:b878:e8bc with SMTP id a640c23a62f3a-abb70de288cmr1064938866b.38.1739787474939; Mon, 17 Feb 2025 02:17:54 -0800 (PST) Received: from eugen-station.. ([82.76.24.202]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abb8b1767e8sm308583266b.174.2025.02.17.02.17.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 02:17:54 -0800 (PST) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org, kees@kernel.org Cc: linux-kernel@vger.kernel.org, johannes@sipsolutions.net, gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org, andersson@kernel.org, konradybcio@kernel.org, tony.luck@intel.com, gpiccoli@igalia.com, pmladek@suse.com, rostedt@goodmis.org, john.ogness@linutronix.de, senozhatsky@chromium.org, quic_mojha@quicinc.com, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Eugen Hristev Subject: [RFC][PATCH 06/10] qcom: smem: enable smem pstore backend Date: Mon, 17 Feb 2025 12:17:02 +0200 Message-ID: <20250217101706.2104498-7-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250217101706.2104498-1-eugen.hristev@linaro.org> References: <20250217101706.2104498-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-hardening@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Enable smem pstore backend that registers regions into the minidump table. Signed-off-by: Eugen Hristev --- drivers/soc/qcom/smem.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/soc/qcom/smem.c b/drivers/soc/qcom/smem.c index 592819701809..f4d2646fcc0b 100644 --- a/drivers/soc/qcom/smem.c +++ b/drivers/soc/qcom/smem.c @@ -1236,11 +1236,21 @@ static int qcom_smem_probe(struct platform_device *pdev) if (IS_ERR(smem->socinfo)) dev_dbg(&pdev->dev, "failed to register socinfo device\n"); + ret = qcom_smem_md_init(&pdev->dev); + if (ret) + dev_info(&pdev->dev, "smem minidump backend init failed\n"); + + ret = qcom_register_pstore_smem(&pdev->dev); + if (ret) + dev_info(&pdev->dev, "smem pstore backend registration failed\n"); + return 0; } static void qcom_smem_remove(struct platform_device *pdev) { + qcom_unregister_pstore_smem(); + platform_device_unregister(__smem->socinfo); hwspin_lock_free(__smem->hwlock); From patchwork Mon Feb 17 10:17:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eugen Hristev X-Patchwork-Id: 13977496 Received: from mail-ej1-f42.google.com (mail-ej1-f42.google.com [209.85.218.42]) (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 6AEA1218AD2 for ; Mon, 17 Feb 2025 10:17:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739787480; cv=none; b=Q6dv8Eqs6wsktrYRuJSeDYAIdQIkNfXNF0wWs3we2nkP1m2LRDgImCA7C3fBgCSalz09fuCwZc4eIYWO+CGAfBxdssJMkqHaJK3oTQcXta0TbPgd1v0UpKQbyFMNIqmBfWHHKyFTXrLOdlMqb6NZDvNsKzOq96rkH8JGLt3bKNM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739787480; c=relaxed/simple; bh=61J2pu5l3ndGn9woBnkjvneIE/RD9R+0X2yrx5ajIWM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NPTEsYOs1hWLSjWznf6D9Wdiu3/uC8R18/uOQOpV9L+BLLHdMvNKjdzcZEui39+cGODHyPwFnNZSPDOXNG6g6Q1dUb1kTwHuV7316Ism28V6gtq1Y+z2SJhEKWuBtd6kdP1sr9ffZ6kNAFekRNNckSgzQaqZ7CFGkzyUOIponU0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=ZsEMpFNt; arc=none smtp.client-ip=209.85.218.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="ZsEMpFNt" Received: by mail-ej1-f42.google.com with SMTP id a640c23a62f3a-abb75200275so249018666b.3 for ; Mon, 17 Feb 2025 02:17:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739787477; x=1740392277; 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; bh=ldGwrx2cT3RoWK8xQPpncYSf7C74wmzaVDctYgnNzT8=; b=ZsEMpFNtgC8tqQQhhiNG9KGHmENdgB4rAu9TzSfsY1MSvj3kXgq+zR+OVmeyE23lfY hIOT3cC2fIbGcc3Hzbf1dVsmey8oQxNt9XMXlNncyUSDe1Rvj2UouxOZ4iGlTzGRBfoC pZksizHBgwUvweaz535oIlBw/CTWRn9nfeek0P3NytAJ/ck1PqSOG75pFOD7fYRIh3gG O6nwqs5eEGWqJfIuGCDSIw9uRuAMXV92lTqoOVNC9s8i3VuzuxUFB+lS3gs5+9o1ecq/ Leib4/k/6UMbNc6yq9iTHWf3RDatAVe5pYDPb+fGwOIwr77wjdmuRPqiVrJlBvBC5gUk uP5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739787477; x=1740392277; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ldGwrx2cT3RoWK8xQPpncYSf7C74wmzaVDctYgnNzT8=; b=kkwq1YPyyDpmDV4i3krN/kJLjwiSbV9OiG/WcVz5mT7HRg9EycNxY/HfWhdeQKdQp6 xLB7v+qJyg8L7mbtpWTAUdba0NJKvh0wPzekMZ5EcWbdKETStHJh7kUpACvOWk+EhBr6 RFm77lllMpNLTCuNUDvPSXvjpqpFVF4WD/HwupDdDc1oS+D9AexN+NMNQpO+MW7NQ1a8 ns2gOQO47FSk8PN7lJrcZE6CNUhn2VsOOXY4tXt9KztB/ev0GyDdZRrbu6eNlWtqF6n8 fCMVG8w1bFmoj41qdGbg8mexocxCkSV9ExSbdzvEFLcxFEU5Wmsuhzh0+cT1zBk4n2AN ZWEg== X-Forwarded-Encrypted: i=1; AJvYcCVK/TcmdJPN7T+qb8/+FPb8eGK7vhvhsLAsrbrTyz66QYvGFMntvj7ZL6yRYHYoBSkNNnuCcFte3OYezAxJBt0=@vger.kernel.org X-Gm-Message-State: AOJu0YwJmaaYUZaAWH/BYWFEFOcE758nwFMKTMg2LYnKRGyVFn2w+7qH a8E/gOSS4Dfz5ZeF+fvYI2LLzx1OpsxeQ3mn0StFcZK4oeg/dpjkTIjqchqt5/E= X-Gm-Gg: ASbGnct7977+dDIgpVoLGUr2VzT9UZgotU/w4o6iGDLJ3z/gy58A2WANUOt0hqnFMHA 7R1hyN2YLbTxKVL4BVYkIT16Z8ikKifXi547R61kJBkCwaKA+qwU9I03Zzr1tNwAsOdXQnE3SBA sjkNeY/grG6af4rxobvRaIuHHtobkXEPYcT6H3GIAwdI//EReaNVOnsDJ87JcmJxKS8M5r8Kzkq CWAEbSsVUJsLaWRSv6jADWmrB8oausDYTZg/eksnn2ca9eOX/QHgx6yrKLwBpWzxjyO5R1oq4wf wT2SPPndr6G9qOOgXdAFhmQ6 X-Google-Smtp-Source: AGHT+IGLJ6wBq1Q2Otx2cXUsLqwI686ZT/K4uXqflhPHhYRM3ByDKMZpdTFQUXVBYhqRHLkwN7a7fQ== X-Received: by 2002:a17:907:78b:b0:ab7:c115:68fd with SMTP id a640c23a62f3a-abb70e61a23mr916824766b.53.1739787476706; Mon, 17 Feb 2025 02:17:56 -0800 (PST) Received: from eugen-station.. ([82.76.24.202]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abb8b1767e8sm308583266b.174.2025.02.17.02.17.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 02:17:56 -0800 (PST) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org, kees@kernel.org Cc: linux-kernel@vger.kernel.org, johannes@sipsolutions.net, gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org, andersson@kernel.org, konradybcio@kernel.org, tony.luck@intel.com, gpiccoli@igalia.com, pmladek@suse.com, rostedt@goodmis.org, john.ogness@linutronix.de, senozhatsky@chromium.org, quic_mojha@quicinc.com, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Eugen Hristev Subject: [RFC][PATCH 07/10] printk: export symbols for buffer address and length functions Date: Mon, 17 Feb 2025 12:17:03 +0200 Message-ID: <20250217101706.2104498-8-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250217101706.2104498-1-eugen.hristev@linaro.org> References: <20250217101706.2104498-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-hardening@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 log_buf_addr_get() and log_buf_len_get() can be reused in another module, export the symbols. Signed-off-by: Eugen Hristev --- kernel/printk/printk.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 07668433644b..022947f9b61d 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -588,12 +588,14 @@ char *log_buf_addr_get(void) { return log_buf; } +EXPORT_SYMBOL_GPL(log_buf_addr_get); /* Return log buffer size */ u32 log_buf_len_get(void) { return log_buf_len; } +EXPORT_SYMBOL_GPL(log_buf_len_get); /* * Define how much of the log buffer we could take at maximum. The value From patchwork Mon Feb 17 10:17:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eugen Hristev X-Patchwork-Id: 13977497 Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) (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 18B07218EA8 for ; Mon, 17 Feb 2025 10:17:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739787481; cv=none; b=D0tSli0vwmgN9QP7Brv6DWnZT4WG/ILT8QFvM/KMfqXPpXfCqlbKJbiG9Smw9E8tMjNPC9dEzjVV3Q6E2b5IKuH2jitrxNyCb13pPUlDSaYrHgyf8DImhBhARZGumvLe+sMDV6MDjELq/3vop3UN4FcUgvDN9BKZxGqVicwzk7w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739787481; c=relaxed/simple; bh=6JLAQiXiBCTaZy1rpRUfOhG9JvPaEfv2VkDTKVoBVm8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=T5hK1NJva8+fE/nh0qL8hkgE9ANz0akllf+EoavBBloD9SgRQkSElmM/boDaZPreX9g6cRvRzRzUgVZAkqrVFcjJV1anyyoDO+ApLe9gULdFiPhyZqIV8RTtwkJF+z9qxDI+6bbzPd8zAFyV7kLi8LTa3QOKLZYWM1pmcIF8/bg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=sCKS6Tup; arc=none smtp.client-ip=209.85.218.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="sCKS6Tup" Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-abb8e405640so160943866b.0 for ; Mon, 17 Feb 2025 02:17:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739787478; x=1740392278; 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; bh=6Td102jvjcyxJvAztEsXWW/VUH0CMT8UhqkeVVK6uLU=; b=sCKS6Tuprl/dYZRp9WH3Ijo33jFNfIf/A37scAt5+zGyFA1t+uzX6VWzy2Up4AaaEP rIvRcQHGHZUbwSR5zhg8CbBGfkP8xJVOgV+XG1iaPVUnt7bdlbMIbxu+7E6hkJL95owb 4jakP3fTtCzUU08ui5gj3dUUZZlN8wqCS5xLsI68ZmyXObdD7fTiC/hzaqC5Pv835ARc x8umw/067y4wYYJOzbupwclrgqd2DynTVu1X/79YPj9TaEfcK1DI+qPy5it45oOXHoZD mQtENqCGQBZA4XZq0gV7F4UhlOqLU8UzNB+97CT4YxhBJyvf6M6TYMK+6+1uqR+Cauag 9xjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739787478; x=1740392278; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6Td102jvjcyxJvAztEsXWW/VUH0CMT8UhqkeVVK6uLU=; b=A2BYNYN8OUI3Bfe7bhUKhmtzsEDmWLv/gAN1b+9dUOECwHYmbW8H40o0CkVRcBPF1E fhP1KPNTacqVV3n8ILUlCAqvzwiWDPU1jPhgw+KW0SABsuP0Z7UAmYoKTb89+48WvysX V22+YVFPdYtt6T7jw+ABSyPyZc2wU3vjDiZoCIovPmHegCRTLx+RS+GbCcDFUijWRi3v GuzaOiqEFJOEdE51D73yVCeRSo9HrwNu9O/EAMcI9RxfQI4gDV3XxRjnlAk5wUjBGAn9 fhstLW6Rcxi7xK7DNzzxUtPBzTlWHI96n8s9+xusRjUXiEf9tfXh0ixgv1S+Jchh6VDt ajdQ== X-Forwarded-Encrypted: i=1; AJvYcCXuLs7VGEGzDBSKI/vb7nMR+bovK+hnrtkJVbmPPL4q/T1mEdIWxWrBY7HD8GicQUFFmzDD78YMdIDo1lhir90=@vger.kernel.org X-Gm-Message-State: AOJu0YzTf1oba/P3YE4XefQ/MmHnihnep9wIgNqOTJs5irpm/p5567G3 u6btIHv7UJY11AUro02aQiVRjVX6MaUnVMkmy9Ll50/7A3EWbNVH25VISvGOxY4= X-Gm-Gg: ASbGncvRxQaC8BjFwLis9e/CHD9hhG4Qse1YOKo0cebPG+zuYJRC1VR3c5s++piZzWF 2Wdmf4GRzkF8imuQaq+FpRfJC5IHRQIvx/U1ejF8JeyXzxZowXZ/DKFcb90sPXaeO0okZRpjrOT LNJmcCksA5Q/F6n5fbHCONmgf/inFYTmsrFWsEWiCnquUiyKxzq5aaDq4A459tspesl/CBxm6El bdj2wZ+HFTr04xYOEVt9ViiZ+Q9dUBTZaTAaZrP3IJ5Cjr0LcsaAyA1eThO6kKLssgugP6OLuKi /jYwbjp3YbXOJtgKR1/goZjP X-Google-Smtp-Source: AGHT+IHY65P+Xz4TNjemyphPqqQ9+ru/mohlrB5vFIKJf/R1MNkDOblIAzwWX9YVxAvz0IWpeGk+4w== X-Received: by 2002:a17:907:7752:b0:aa6:79fa:b47d with SMTP id a640c23a62f3a-abb7091cedcmr752835166b.1.1739787478322; Mon, 17 Feb 2025 02:17:58 -0800 (PST) Received: from eugen-station.. ([82.76.24.202]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abb8b1767e8sm308583266b.174.2025.02.17.02.17.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 02:17:57 -0800 (PST) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org, kees@kernel.org Cc: linux-kernel@vger.kernel.org, johannes@sipsolutions.net, gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org, andersson@kernel.org, konradybcio@kernel.org, tony.luck@intel.com, gpiccoli@igalia.com, pmladek@suse.com, rostedt@goodmis.org, john.ogness@linutronix.de, senozhatsky@chromium.org, quic_mojha@quicinc.com, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Eugen Hristev Subject: [RFC][PATCH 08/10] pstore: register kmsg into directly mapped zones if available Date: Mon, 17 Feb 2025 12:17:04 +0200 Message-ID: <20250217101706.2104498-9-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250217101706.2104498-1-eugen.hristev@linaro.org> References: <20250217101706.2104498-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-hardening@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 If dmapped zones are available, register the log buffer into one zone. Signed-off-by: Eugen Hristev --- fs/pstore/platform.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c index 32448d9dd316..9a5c1d6d5031 100644 --- a/fs/pstore/platform.c +++ b/fs/pstore/platform.c @@ -452,11 +452,22 @@ static void pstore_register_kmsg(void) kmsg_dump_register(&pstore_dumper); } +static int pstore_register_kmsg_dmapped(void) +{ + return pstore_register_core_area("dmesg", log_buf_addr_get(), + log_buf_len_get()); +} + static void pstore_unregister_kmsg(void) { kmsg_dump_unregister(&pstore_dumper); } +static int pstore_unregister_kmsg_dmapped(void) +{ + return pstore_unregister_core_area("dmesg", log_buf_addr_get(), + log_buf_len_get()); +} #ifdef CONFIG_PSTORE_CONSOLE static void pstore_console_write(struct console *con, const char *s, unsigned c) { @@ -582,6 +593,9 @@ int pstore_register(struct pstore_info *psi) pstore_dumper.max_reason = psinfo->max_reason; pstore_register_kmsg(); } + if (psi->flags & PSTORE_FLAGS_DMAPPED) + if (pstore_register_kmsg_dmapped()) + pr_warn("Registering kmsg as dmapped failed.\n"); if (psi->flags & PSTORE_FLAGS_CONSOLE) pstore_register_console(); if (psi->flags & PSTORE_FLAGS_FTRACE) @@ -628,6 +642,8 @@ void pstore_unregister(struct pstore_info *psi) pstore_unregister_console(); if (psi->flags & PSTORE_FLAGS_DMESG) pstore_unregister_kmsg(); + if (psi->flags & PSTORE_FLAGS_DMAPPED) + pstore_unregister_kmsg_dmapped(); /* Stop timer and make sure all work has finished. */ del_timer_sync(&pstore_timer); From patchwork Mon Feb 17 10:17:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eugen Hristev X-Patchwork-Id: 13977498 Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.52]) (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 9F0C1219A8E for ; Mon, 17 Feb 2025 10:18:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739787483; cv=none; b=EfyGp6hrCPoS8nrWAR0wcgh8/2/wDY6KGvLFl3UKMiLDtRP0mHUQvXSFQ/U3gGddJREvV35bW5Ogrv6mUyy08uvIOKuP+iwAEpgUkSAA9d8NGfZMYTRLU0fptr5I4NU/YgeXTPDClFna/hevNh/s4uSzGy7Xa2+r2OIsBGkWWjE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739787483; c=relaxed/simple; bh=CNpLokpmqxK7vPDH6UkXrNYj7YYXuynUbdaQ5h4wAQM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OHY6C0R+UTgwmRw+a1q5eR7xPc1tZMhZ/YacOuqJ1iDJyx2tMmjH4Fd4zmQtu0lnaBFP2WqQZqkHXZjsQZGJZKcQrl/Yj6sPZbkCBhtrHfOiuGnSmsaP3liQdRl2od53xLFIEsU8LdQ88Dpr0WJixLgBwmhz/6exVHDy/Yk3AAY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=pc5mzDyn; arc=none smtp.client-ip=209.85.218.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="pc5mzDyn" Received: by mail-ej1-f52.google.com with SMTP id a640c23a62f3a-abb97e15bcbso153956166b.0 for ; Mon, 17 Feb 2025 02:18:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739787480; x=1740392280; 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; bh=S3eOW8UrFuxRaUp3//DxYdvLP38s+Fnhi3jsogW/ejs=; b=pc5mzDyniinfOd1in2GkaK0Fp6HaIaDEwOduwxetcvHN0BwowymNhe2d8ZXcIUFabD NaWeA9L56HLnDC0QH2nS6DY82hXS4E400Oj1CjDMUv+UvEmbtvo4igP8AVNrFyLpXTZg OPHYeJylTyP6DysKSlW+dorkAFVZxO08qw8bf40jFxlC18WV2kSBO9WXO0oe/ycKpDdn L9VjlOhks7Y4pKKRCyc8gh+gy2UVMUIhUvTNz0DcbfLvSbQZfEi0dtVvwQF4UUex/1aE 6n/XgZr/kUMSADmZglzQCFoRmhjkGL9YpXZTriUxVYb2G5a8cMbJ8ulQvbiu/yFBgi8S ad8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739787480; x=1740392280; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=S3eOW8UrFuxRaUp3//DxYdvLP38s+Fnhi3jsogW/ejs=; b=ItG5xy/KGZ6/o24LB9DAbWsGByyIkkf8HNvxnbd9k6ZAy+fryIYIW951bZwrfJyKUm P98sHOqhoQlmoP+WpKZpUVtqRCQX1qFU4XWjZ7cnhHAHQatxZh+5RpAbCYxK9fXhsbbd JQLPAxNYzP7IPid8OpONNXeSM/Z5jg8xm6vtHXQcK7eDILMOM3XbMDbVPfpwS54A8gGb m7IalPhFkSXvRWbXcn3fwXPHCMDiLgl25su1aEVr81XWIirD3G7pUOQMOBQidaWEPUKq kjSSlC/ycdZpq131KVZTlD8f7LxH56kRhDh9Y42H/CQO+MmOz37uWOZRSVLXOTZEykVv n70A== X-Forwarded-Encrypted: i=1; AJvYcCUacf9xo8HrbkYnTcAiGHZeOsCzRtZ21AtSaKo1ogohuXWpj9RAg6SuZev/4/ur2xAqm6Bw0nHB3D+5svzbZ9c=@vger.kernel.org X-Gm-Message-State: AOJu0Yy/ExrxcaTQDfv68AEJl8qWCvl2o1zXUdCf1wBhMHGTWJApT9fn XSCzazWXuI6+6TWiEN1MONIwy86Qdu09iQSe9ORQ2ChnZpAlUj/Ka3A0LchEImrH+lJT+kKkCGx AJeI= X-Gm-Gg: ASbGncs9ALocduM/wt5pk+HopxgtpQ6dhusrKWwBnLhtBJYK+x8n69JHpBA4nXMYCGr NwbwgBykiaWsYXQVmaUjHfAjyzUwTlVQRXDxEQ/nONFd/itJjXFdI3M4UWNVk+NDm9biGsgkH3m C2jF2CRtlxvbp9G2S2jFGRQY0je8LamXNYQ32og2b2DIpIGnCwJNoB1gp42YDn2p0aj6wpnsx2T sDoG99dPjkt/ME03iPKOC2ESPvrS+2TgsvlJIIJbqNkPZaLicAt6SozXSHMJUCp4wfRpdBw5Rhj LVPHwEVYXVbok4NPpgMyzgRj X-Google-Smtp-Source: AGHT+IFMyTV+7dHiqvFGQ0qFOxy54cnyzBe3bzzybDkILWKhJuv8kUgpRDn4pTMEScsdo+ewcWeQ8g== X-Received: by 2002:a17:907:7f27:b0:ab2:da92:d0bc with SMTP id a640c23a62f3a-abb70c01ecemr899083166b.3.1739787479826; Mon, 17 Feb 2025 02:17:59 -0800 (PST) Received: from eugen-station.. ([82.76.24.202]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abb8b1767e8sm308583266b.174.2025.02.17.02.17.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 02:17:59 -0800 (PST) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org, kees@kernel.org Cc: linux-kernel@vger.kernel.org, johannes@sipsolutions.net, gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org, andersson@kernel.org, konradybcio@kernel.org, tony.luck@intel.com, gpiccoli@igalia.com, pmladek@suse.com, rostedt@goodmis.org, john.ogness@linutronix.de, senozhatsky@chromium.org, quic_mojha@quicinc.com, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Eugen Hristev Subject: [RFC][PATCH 09/10] devcoredump: add devcd_{un}register_core_area API Date: Mon, 17 Feb 2025 12:17:05 +0200 Message-ID: <20250217101706.2104498-10-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250217101706.2104498-1-eugen.hristev@linaro.org> References: <20250217101706.2104498-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-hardening@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Add API for registering device core area for saving into pstore. Signed-off-by: Eugen Hristev --- drivers/base/devcoredump.c | 13 +++++++++++++ include/linux/devcoredump.h | 3 +++ 2 files changed, 16 insertions(+) diff --git a/drivers/base/devcoredump.c b/drivers/base/devcoredump.c index 2a0e0b2fdb98..2cf17b148c5a 100644 --- a/drivers/base/devcoredump.c +++ b/drivers/base/devcoredump.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -76,6 +77,18 @@ static struct devcd_entry *dev_to_devcd(struct device *dev) return container_of(dev, struct devcd_entry, devcd_dev); } +int devcd_register_core_area(struct device *dev, void *area, size_t size) +{ + return pstore_register_core_area(dev->driver->name, area, size); +} +EXPORT_SYMBOL_GPL(devcd_register_core_area); + +int devcd_unregister_core_area(struct device *dev, void *area, size_t size) +{ + return pstore_unregister_core_area(dev->driver->name, area, size); +} +EXPORT_SYMBOL_GPL(devcd_unregister_core_area); + static void devcd_dev_release(struct device *dev) { struct devcd_entry *devcd = dev_to_devcd(dev); diff --git a/include/linux/devcoredump.h b/include/linux/devcoredump.h index 377892604ff4..9d80e4ac91ff 100644 --- a/include/linux/devcoredump.h +++ b/include/linux/devcoredump.h @@ -69,6 +69,9 @@ void dev_coredumpsg(struct device *dev, struct scatterlist *table, size_t datalen, gfp_t gfp); void dev_coredump_put(struct device *dev); + +int devcd_register_core_area(struct device *, void *, size_t); +int devcd_unregister_core_area(struct device *, void *, size_t); #else static inline void dev_coredumpv(struct device *dev, void *data, size_t datalen, gfp_t gfp) From patchwork Mon Feb 17 10:17:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eugen Hristev X-Patchwork-Id: 13977499 Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.50]) (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 24B8421A426 for ; Mon, 17 Feb 2025 10:18:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739787485; cv=none; b=iMo7bMzNQhxUgPFcsso3s4GrzKjMDfLSiDEPnXaiV1gxN9x7BAiFvuHac+Pa/ImyQOxmvnUEY9NLM1UYfWtk/scZa+/WVmHKAQucWg/fxLv+W3SiBqsUSo2l/FrwOUOyi6YHcUaDbkg30o9NnUpUyM5g2r4K7pb2nQ+fcwC0jSs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739787485; c=relaxed/simple; bh=H1Q/+IWyWi+vB9ilQ6BLrSUry9GYCCCUwBI0kz8T7RA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZCgVQhANoUolWwD8DLrMb4cG/l5Dzclh4N9J4xk0WX1Z3phPSuz2mzcunobikVnTzi+om7ZkIoZToGhWwpUfalPkq8Rk2XimWYSjvWWRK1UhZdBgh8LtHK7HaxIjfOUIegSB1qdjwLOGTR0ZgQ3/VgHQ9edhCfi/OI53tj3QrII= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=j6jcOYWM; arc=none smtp.client-ip=209.85.218.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="j6jcOYWM" Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-abb705e7662so333250866b.0 for ; Mon, 17 Feb 2025 02:18:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739787481; x=1740392281; 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; bh=bOx/QjhnUzr5iZf43d5r89IsS2FOdAlXvdjY2fxKvfY=; b=j6jcOYWMI+xBtGufFxtNgFXkcWHfBITO7ir/tJj4DdFAtVlkTQO72/L3+0sCKJg0xH BwfZtRHLBchmHXbktX6cEsV0ganx0LddNHdEsnEQEpLgnE1JOD4lnHLVAyCNv4mawObA V1njXv86+puXsxF1HH18+YIDGe8IgNsyi0Gy/l82d5LdYIrnVUAdwovpfisz01eMyMS6 FwYQ1kAsHuS8KtNfIF/tQsMWDJsFk39noEwsiyenNvp8qhKy2p/NLVg7uokL4nt1rftN /ZXUlSoxGUYPWictch6imohZ8QbTXB4x3a6HvU6wuEbXbwXXqwIIYn4C+yIQ3fTjiG48 A3eQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739787481; x=1740392281; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=bOx/QjhnUzr5iZf43d5r89IsS2FOdAlXvdjY2fxKvfY=; b=Ffa5gV0763Pc1iEvLuaBXkv18sYnH+kdyr2T2UkA5iHIxMkPIjr8SEPMIEWPmRBYrd Kfoq5BusSV3N1tkGzgdqTl7cC0GuvYbrRH1M6GMmTCheJw4SowMLnZV5ofvwNtB9Gxdk PT1HgFOlk9WnaR9WOes8QuDqPAQwUQD5Ec2d6T9u8yC2/hHCNYUjooSLba6jHdelWW14 t1uO/4YCfHWDxhJLRhsZXglP4P/DEY4NTJMNzk2NLZSv2nTsBpvqTeSHlz+HBdTpAQzc tYARQ46v20X2D8Gihsrg5MByOUn/i8P6EzvJiqNwx0+l6uibTMZEOgJvcakoSdMX+LnM VY1Q== X-Forwarded-Encrypted: i=1; AJvYcCXbMDOoe/EXoADhp0ai9wwB00yOQp37REP2db9CgHmsKF6lWvz1DNW4zIaSK5Cclk2kkONgFW2JKDSkNYBc8Go=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/LOEfve2cq3P9F6Xu66QkuN0+B81D2c7KkPqrDfOvJ/GmRTwD 9yIlhgu18tZwk9cmhAVM4yaDN3w6adecrbYXbe2o7//i04CeBVQaCrxrCmgcqss= X-Gm-Gg: ASbGncv45nWEdkx5+Hw6IGKoDeW5O+/g8mUO+g7uhmNnC7V5ECVfL51uMsvJ7GmgdbH sCXdv+0UWK0O9QoFPW6UjUcDOI+Q3B+be/KSgBEp/Afyf9PBzTNIA2xcYQ5o5pveMJr3HW+jcND UWgm1jezHKCXwE3H9ZXuH5D0L7/LToxm5D9+CVGkvEnTJF3PB7qMfg/+SeCLCBI866/zQ9rJoCQ XIGml+SZ+eMAOZO93aHMr+onDsj+ldnsjkdksZprvA9y1A4B2IfnKPEaGqO/l5MYjPCrdJyPw78 mr1+jug+8SfyOSF2gzKXDibW X-Google-Smtp-Source: AGHT+IEyhYoBsYp2nsZUxaNrWoEJIkJcEzeW3uR5U89aJyr/W0mS2FbZhC0xUYWaFE0athJ0Fx91Xg== X-Received: by 2002:a17:906:4fd0:b0:ab6:fe30:f49e with SMTP id a640c23a62f3a-abb70cd5108mr714909166b.28.1739787481314; Mon, 17 Feb 2025 02:18:01 -0800 (PST) Received: from eugen-station.. ([82.76.24.202]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abb8b1767e8sm308583266b.174.2025.02.17.02.17.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 02:18:01 -0800 (PST) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org, kees@kernel.org Cc: linux-kernel@vger.kernel.org, johannes@sipsolutions.net, gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org, andersson@kernel.org, konradybcio@kernel.org, tony.luck@intel.com, gpiccoli@igalia.com, pmladek@suse.com, rostedt@goodmis.org, john.ogness@linutronix.de, senozhatsky@chromium.org, quic_mojha@quicinc.com, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Eugen Hristev Subject: [RFC][PATCH 10/10] rng: qcom_rng: EXAMPLE: registering dev structure Date: Mon, 17 Feb 2025 12:17:06 +0200 Message-ID: <20250217101706.2104498-11-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250217101706.2104498-1-eugen.hristev@linaro.org> References: <20250217101706.2104498-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-hardening@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Proof of concept on how devcd register core area works. Signed-off-by: Eugen Hristev --- drivers/crypto/qcom-rng.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/crypto/qcom-rng.c b/drivers/crypto/qcom-rng.c index 0685ba122e8a..a1509609f50c 100644 --- a/drivers/crypto/qcom-rng.c +++ b/drivers/crypto/qcom-rng.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -32,11 +33,13 @@ #define QCOM_TRNG_QUALITY 1024 struct qcom_rng { + char start[10]; struct mutex lock; void __iomem *base; struct clk *clk; struct hwrng hwrng; struct qcom_rng_match_data *match_data; + char end[10]; }; struct qcom_rng_ctx { @@ -192,6 +195,10 @@ static int qcom_rng_probe(struct platform_device *pdev) if (IS_ERR(rng->base)) return PTR_ERR(rng->base); + /* Setting some markers to easily recognize them afterwards */ + strcpy(rng->start, "MD_RNG_ST"); + strcpy(rng->end, "MD_RNG_en"); + rng->clk = devm_clk_get_optional(&pdev->dev, "core"); if (IS_ERR(rng->clk)) return PTR_ERR(rng->clk); @@ -218,6 +225,8 @@ static int qcom_rng_probe(struct platform_device *pdev) } } + devcd_register_core_area(&pdev->dev, rng, sizeof(*rng)); + return ret; fail: crypto_unregister_rng(&qcom_rng_alg); @@ -228,6 +237,8 @@ static void qcom_rng_remove(struct platform_device *pdev) { crypto_unregister_rng(&qcom_rng_alg); + devcd_unregister_core_area(&pdev->dev, qcom_rng_dev, + sizeof(*qcom_rng_dev)); qcom_rng_dev = NULL; }