From nobody Thu Oct 2 07:43:57 2025 Received: from mail-qt1-f180.google.com (mail-qt1-f180.google.com [209.85.160.180]) (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 2A1BB31B81A for ; Thu, 18 Sep 2025 20:11:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758226302; cv=none; b=mp+xAtQRoY3NaZn43qmZRpuoDd1V6x06NdS1Pxc64p/d+EMCwJn91tysTfAjpL3KzyA5lg77/26eNHcwXEP6tsf9IisKhGe7oxZmrLxXwWU6EsQfnLF9YmfIcmJ4SCnTr1pP3zqo3TAB7Lt1/FQ5ocCOJN0yCjQDj4O29qKl6Ig= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758226302; c=relaxed/simple; bh=MlzkbCzxBnkF0Ot5onCFMHUEUOT6VSHs/kNPIgP/+S4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NTr/0HEhtn/HrJOlRJaF/XJ2TxQKImPuCnC+dDZZ5qaZJLipUDlFXVBVmtNvl/IFbWYquULn2zH3lbaJawb/225MUoEIPtihKAAoI9HwFzAItf/I1RTPLL4wf3Y01ujQokhVKVlHt3wZQYMzzhOuGLh05hVoMtQbnoNIzZk6C9U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=eM02LC/a; arc=none smtp.client-ip=209.85.160.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="eM02LC/a" Received: by mail-qt1-f180.google.com with SMTP id d75a77b69052e-4b5f3e06ba9so27786771cf.1 for ; Thu, 18 Sep 2025 13:11:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758226300; x=1758831100; 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=WhfQTSFAJZS9gqyA7ko5YffZgh1O242sf4VUlqQppZ0=; b=eM02LC/axWmr3jPeOA08ELiKDGqjZNpRcV7k4H1oFtooYPItDtxlLJSuKSh0lhQO8D llHgYBMJ9TejkpkYA3Pct7MQJ3hzDoPczGJorm0zPCfQ/adUAhiFxdjbeMBPsRcUHvMe hs0sKRJOfdbuOQTzemhZQmnRQJZQ4ZwQvpxS8t9a8GU+tFTUinhbpIiRSK7lbtoZTmI/ xDdP0KXWjjZUeVMmYWj14L6oPRXRyMWYKl96x3ObZYgFqfIkY6wARZhFSLkMKvKuey/i dW6X2FsFQrR6mGQWm3bj6ubypfH5BS30WRMo/+RGAxABobih94f+7Jd3WCWOUmVF3ROD 6qJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758226300; x=1758831100; 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=WhfQTSFAJZS9gqyA7ko5YffZgh1O242sf4VUlqQppZ0=; b=fx7WEY47gst+ZljO2+3H+6GzTBCcKqXxRiwGp/RHbRil+9cBoUbugCCUi6ZWV4w32R Z93uuxHAdPGx3SPYvpV1wR6fy7rEfgk25s4IevusMrX83HXX8JVFQ8vnVECKncHC74qC EKsVOjZ6Ry6t2W5Ms6PLcF9598aw4jso0sDqSu05YmdniwLu/BxH7ZvpfUjualsJ3uPo 3+stl0zuJWDuG7DijfiBX3yEt0U0fB4TQlhv3QjP4CsKIoF7+xMLOqbEWRTNNIc9ivBv hVDCZddlhbhyfX7qyW11fpEgjzjxDX0F7I6ZHEL60qtjd9ZJRjiIht0FOUF+DDL57VLu 3QFg== X-Forwarded-Encrypted: i=1; AJvYcCWZnVGWlW1Dr5aJqz0tRbULzVCtbgjXDKXmnmNJfi1eGygrRhRkZjELHbXsr1MYxOZod1tTLdfBtiKzp4k=@vger.kernel.org X-Gm-Message-State: AOJu0YyVJWKayW4s9JeJWAt6W6O3v46hYB1vz/EDC6qzhS2Iu16prQ1W OPU4BXinXTv+0F4t3fE3/Ee4eyougPg3DA5nh8fwSLLqXw+sLgDp1P81 X-Gm-Gg: ASbGncvKOwJ3tOTxLW100Bh8I7u4rZ9vAm98lEumemhw+xUHmOCk3D6Bviviwb4YRfl KYwCuLvRLZsKwwIrvYWfJm+awACyg1qdENVNQmF4duob6/8+RiroheP90qNV1P2CZNzWomwFfs1 qWc5/6CGkH9d0+LzPftRG/yUCQfDMqbVoZ6RqaBuWL1CBBT6T59QKHJMKBxvYOX6Fm4i+HnAYkB rQduwfjKTqHyZle1ik7N0rvDPeADk2A9anVD4/6/cupx+wJ++GmgXYX5LeSuP8IFKxSkL0h9D3R daz4AW+6iQ4QCQ2loT00ZjWJ5ivYV5eQAJggl9SnM4fFjzf6287z7ezU0whks/XrkYXTKJBhdzy bsz/VbwfV2GtdVYvtPjRGDytmT27A4iewFSEDyK++5my+ X-Google-Smtp-Source: AGHT+IH78xMwfYsunN2DfRqB0zpQ4ad+WkU0hv4qihFufyAmnZbwnOXpnB024qM+pbW7ssyAVZOIjQ== X-Received: by 2002:a05:622a:1892:b0:4b7:acab:852b with SMTP id d75a77b69052e-4bdad82345amr55746341cf.26.1758226299961; Thu, 18 Sep 2025 13:11:39 -0700 (PDT) Received: from jl.umd.edu ([129.2.89.30]) by smtp.gmail.com with ESMTPSA id af79cd13be357-83630299579sm222392985a.41.2025.09.18.13.11.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Sep 2025 13:11:39 -0700 (PDT) From: julian-lagattuta To: Luis Chamberlain , Petr Pavlu Cc: Sami Tolvanen , Daniel Gomez , linux-modules@vger.kernel.org, linux-kernel@vger.kernel.org, julian-lagattuta Subject: [PATCH 1/6] module: store init_pid and idempotent in module Date: Thu, 18 Sep 2025 16:11:06 -0400 Message-ID: <20250918201109.24620-4-julian.lagattuta@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20250918201109.24620-2-julian.lagattuta@gmail.com> References: <20250918201109.24620-2-julian.lagattuta@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: julian-lagattuta --- include/linux/module.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/linux/module.h b/include/linux/module.h index 5faa1fb1f4b4..5ac5f4992fe8 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -599,6 +599,10 @@ struct module { #ifdef CONFIG_DYNAMIC_DEBUG_CORE struct _ddebug_info dyndbg_info; #endif +#ifdef CONFIG_MODULE_FORCE_UNLOAD + struct pid *init_pid; + struct idempotent *idempotent; +#endif } ____cacheline_aligned __randomize_layout; #ifndef MODULE_ARCH_INIT #define MODULE_ARCH_INIT {} --=20 2.45.2 From nobody Thu Oct 2 07:43:57 2025 Received: from mail-qk1-f172.google.com (mail-qk1-f172.google.com [209.85.222.172]) (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 0CDCF31BC9A for ; Thu, 18 Sep 2025 20:11:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758226310; cv=none; b=kCojc9FeaHuWR/f7KK9uvTlK1kSl8KYQgIFikc21Bb+KG5+5Dqajc4BE8SJCCUBy2D1qBWlUgfi5fX1PSDrVptfBpzEwcUzM9ckKAL0gNZ7dtKCVjHop6n5DQVNemCwmpMjENs/LIRbE62Q2rD5rFUUs79MaB37l7JQcY9wobho= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758226310; c=relaxed/simple; bh=xcR27DgUHeac1UO/LafHZkAbGSP81kY7tVhXIxQM9N0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fm+MFRk1ktaxDCAH8Xu0AExcQSnBEa6gq2xklLAeWKywxC3O+3gyO9JY6XeMPaV7ToHGR/VZjvULOHYAl9kKrw/c3WsXAPv7PVp6VdIA7U7T8Dn+XzkylDIK2qPdRKjhEZofdOWG3Cow4/iDHp3Bv9oQt3iMQ6EdrJ64EXnIfxU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=e+Ro4nRO; arc=none smtp.client-ip=209.85.222.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="e+Ro4nRO" Received: by mail-qk1-f172.google.com with SMTP id af79cd13be357-80e33b9e2d3so135287885a.2 for ; Thu, 18 Sep 2025 13:11:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758226308; x=1758831108; 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=dVRvfHclUUY1pRn1PMztmNjAxV0w17FZcTRiIRd7CH4=; b=e+Ro4nROgqn8gP+xHpmJUX53wN24biU88J0RueJ+zODdgAhEILjcouPuF+awaGawsR TRvk1qazjptZqH00KvhOES5EcMBbrVkWCGlHIrpd21fgtKKPp61W3TsbrXyYB1bogfNq f97jq8ODQQm+nvzAI8YVEb8teG5CXj8f17nZHI6XxOLqlJWFV/IwLVJqrFj9ycRU/3tm FJtlMaYs/zcpXmumLcml4tqINYf/vvqRhBzqIUh68pM4gkwCtTXDyQ/MxflngwGbvL4S h6uoOOrQGY+OhBdH5dmjYqo1b3xcpr7kRCDext9sntzGs6a7+EWVm7bCT8l6XiABWqMC 2dOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758226308; x=1758831108; 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=dVRvfHclUUY1pRn1PMztmNjAxV0w17FZcTRiIRd7CH4=; b=k7SgJxsYb0q4mWypiDbPZi8sIrjW72tdDgRxXq7XIyjQ4kisicuW7a0LUqCPFAfXGI zRGKDKD6SfvQWZ/7Ck2hb2xSynn5e0uwNCC0dbcbPE8KcrFieE1goNGnY6pKjSh5biGi mQMw0ROdTDymUou66inozN3ualMVdSu2NqoFrHo8AI8kozlpQsXumk1e9j95yDmqhKQx 1fcz96tc+5QAbvXbBiLuiMbuDEI4NUXPIi3P/MhBdCcfAfPk92XUPLr+Rq9TvWuulfQD R4aizSYcVlKdYXzE9SN9nQ4K8Wno7kWIV6WTmqCY6UakkoFrI7H/4bfNTdsj4WI3ZIfO CbMw== X-Forwarded-Encrypted: i=1; AJvYcCX1ITOUB2mwx+UJRBX2FLBHlR2ItV0tcRoE3S4L7DH9UdbSkMYq76TSsN/KUt21MVIkAYZOznfb01NoG3o=@vger.kernel.org X-Gm-Message-State: AOJu0YxD/P3oyMw75Zih3KckI7CTQnYpR8VEbLBdGegCbxT68zmAJUA5 OpbB8pU5MjyY3u3GxNw2w61WRXWP/wm0/F3iQ8j275gcLcHEpBe2RPCQ X-Gm-Gg: ASbGnctdqhwuJLhTxZJDWsrhoGtAVz801zMBQ0i6Jv6FqAlSr7wVaIDIubyifPCBeV0 8ISCu0W4Bf7nLjeLTteRhZMCFOXDAAzPiSckr8TrOb5rZCIVKujy2izXicHwv9RFuv15R0NIh06 ZIRcgFZh5vYDj/b+zqDvHOQ0SdWxP5tl6Idu3ta9SC4Jhy5WizKKcYJvDDX4mi7uz81+uW+EAiD bqzTnMslPggeb5hgA05NLwm0gmn3404nUgYENHvpPg49PAno4PmIenJEe7KF6MylvCDRySs8otB tKd9it0GF7D3ziktsAyKnCYhlFIbAO5w4cb3QuA9jr/Ikcucimh0yuPKS0iR0/hTTLe+2kQ8O6F dVyypHGk21/dD2aMqsLQmn4YuxyjeaBoxxwXxjeRznTh4 X-Google-Smtp-Source: AGHT+IHYC/NSK53/g1XHZ5kdkJoReRJmpekcCbpFeReJoVfuqw51mHVuSFDUMgsBJLVY8HG6rbnB6g== X-Received: by 2002:a05:620a:28c3:b0:82a:50c5:6138 with SMTP id af79cd13be357-83bab47050fmr111769685a.40.1758226307725; Thu, 18 Sep 2025 13:11:47 -0700 (PDT) Received: from jl.umd.edu ([129.2.89.30]) by smtp.gmail.com with ESMTPSA id af79cd13be357-83630299579sm222392985a.41.2025.09.18.13.11.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Sep 2025 13:11:47 -0700 (PDT) From: julian-lagattuta To: Luis Chamberlain , Petr Pavlu Cc: Sami Tolvanen , Daniel Gomez , linux-modules@vger.kernel.org, linux-kernel@vger.kernel.org, julian-lagattuta Subject: [PATCH 2/6] module: detect if init crashed and unload Date: Thu, 18 Sep 2025 16:11:08 -0400 Message-ID: <20250918201109.24620-6-julian.lagattuta@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20250918201109.24620-2-julian.lagattuta@gmail.com> References: <20250918201109.24620-2-julian.lagattuta@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Store idempotent and init_pid in struct module. Signed-off-by: julian-lagattuta --- kernel/module/main.c | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/kernel/module/main.c b/kernel/module/main.c index 413ac6ea3702..2277c53aef2e 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -752,6 +752,7 @@ SYSCALL_DEFINE2(delete_module, const char __user *, nam= e_user, char name[MODULE_NAME_LEN]; char buf[MODULE_FLAGS_BUF_SIZE]; int ret, forced =3D 0; + bool did_init_crash __maybe_unused =3D false; =20 if (!capable(CAP_SYS_MODULE) || modules_disabled) return -EPERM; @@ -778,8 +779,11 @@ SYSCALL_DEFINE2(delete_module, const char __user *, na= me_user, } =20 /* Doing init or already dying? */ - if (mod->state !=3D MODULE_STATE_LIVE) { - /* FIXME: if (force), slam module count damn the torpedoes */ + if (mod->state =3D=3D MODULE_STATE_GOING || + (mod->state !=3D MODULE_STATE_LIVE && + !IS_ENABLED(CONFIG_MODULE_FORCE_UNLOAD)) + ) { + if (mod->state =3D=3D MODULE_STATE_GOING) pr_debug("%s already dying\n", mod->name); ret =3D -EBUSY; goto out; @@ -795,6 +799,21 @@ SYSCALL_DEFINE2(delete_module, const char __user *, na= me_user, } } =20 +#ifdef CONFIG_MODULE_FORCE_UNLOAD + if (mod->state =3D=3D MODULE_STATE_COMING) { + struct task_struct *init_process =3D get_pid_task(mod->init_pid, PIDTYPE= _PID); + + /* Did the init process die? */ + if (init_process) { + put_task_struct(init_process); + ret =3D -EBUSY; + goto out; + } else { + did_init_crash =3D true; + } + } +#endif + ret =3D try_stop_module(mod, flags, &forced); if (ret !=3D 0) goto out; @@ -1380,6 +1399,10 @@ static void free_module(struct module *mod) mod->state =3D MODULE_STATE_UNFORMED; mutex_unlock(&module_mutex); =20 +#ifdef CONFIG_MODULE_FORCE_UNLOAD + if (mod->init_pid) + put_pid(mod->init_pid); +#endif /* Arch-specific cleanup. */ module_arch_cleanup(mod); =20 @@ -3044,6 +3067,11 @@ static noinline int do_init_module(struct module *mo= d) ftrace_free_mem(mod, mod->mem[MOD_INIT_TEXT].base, mod->mem[MOD_INIT_TEXT].base + mod->mem[MOD_INIT_TEXT].size); mutex_lock(&module_mutex); +#ifdef CONFIG_MODULE_FORCE_UNLOAD + put_pid(mod->init_pid); + mod->init_pid =3D NULL; + mod->idempotent =3D NULL; +#endif /* Drop initial reference. */ module_put(mod); trim_init_extable(mod); @@ -3474,6 +3502,10 @@ static int load_module(struct load_info *info, const= char __user *uargs, if (codetag_load_module(mod)) goto sysfs_cleanup; =20 +#ifdef CONFIG_MODULE_FORCE_UNLOAD + mod->init_pid =3D get_pid(task_pid(current)); + mod->idempotent =3D info->idempotent; +#endif /* Get rid of temporary copy. */ free_copy(info, flags); =20 --=20 2.45.2 From nobody Thu Oct 2 07:43:57 2025 Received: from mail-qk1-f178.google.com (mail-qk1-f178.google.com [209.85.222.178]) (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 962BC31BC86 for ; Thu, 18 Sep 2025 20:11:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758226316; cv=none; b=e5bUtkboV6xmJKB9IrKYk6byxD7B2STuKrvgYC7CR7n2zVrAR7hAAK4Dz28JzkoMJDhi35obb0r2iYJzACcxlMItwbmZrEiISNqObF9glJ9BjLvd/wAEqHjw9dICjIRdvibNRcdNMPkUWnBRHeJWJd0yJp7e+Bg1GE8dccptd8Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758226316; c=relaxed/simple; bh=siBuLk9zH13tO8g4aEZ+ghf0JyGMCIvgX+eqmUGKzyk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DEFVVUIt7b4phme73NnrKX1bEbHH+ZaRu6ouXyUns8PIYfZienSa0V+N1frDSnpqsl5XIyHlkQBrxkMEdyuQFieZQsisVkG+H9uQa06XogLW/ll9v4aI5jkNRO6Ct8CzTzJGIL7Sd3iNSpUODERhU9XD0kPZVGPbJ2ebvaJo65E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=hz6ACzkx; arc=none smtp.client-ip=209.85.222.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="hz6ACzkx" Received: by mail-qk1-f178.google.com with SMTP id af79cd13be357-807e414bf03so169491785a.0 for ; Thu, 18 Sep 2025 13:11:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758226313; x=1758831113; 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=OkokmLK2YiSj3gWXRJKv9HJ55buXfb9b0NJavRjgMIM=; b=hz6ACzkx4smi0DRDlJTI7dRtumrJDaeUm7Vbiix4KsvYmQQ8Dw9oLqUS7vg2r8HZhy h1AnxnADb9AaM6TYPQUq1WHeqBfpcJtDZiKeTPRif9MTUB92opADdp4g8itlk2g2chgr LAvFRT/C7lS0d2uirYtZhj+xDMmMshWcmua9tL6Z2ZpXyY0KA5iwMvajI1jYDxsx/TPm 53+cJYlXqLE8aSwmDelCWlqdFZecTdWd7oktQBYz28pwKJcHteHcN1/J0INQhMdUXLXV zqKjonYUmszPHzz4Yjo9wL9TLdBURTFY+LjTiTzHgj1WZfW4Ga8b3pRLifRBTcm4csQC BhPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758226313; x=1758831113; 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=OkokmLK2YiSj3gWXRJKv9HJ55buXfb9b0NJavRjgMIM=; b=SBiT5ZcGKXQ8kNnU2RJA2DAcHBFY7/KKWqxXDVYcvTm4KEP/jR9fQRAS3UTnz6BRyG GccPT0oeKBsiC2C6JBUv3fKPKHUeSQAxSFEWRio2uy3TFWUcEylsCnS6HvMN9tG+PYUO xyt7tG+dC7WMnAKyzpito/xfsw52dzVJG3ab3PVL+C6dU0IGAQrHI3RDxmN2ru+EmvHJ 5rrPp7L2WFpmz0DsYsA9fhX4sX0IoaFQB3/iuWd83pmTYAFP6tpl2dVFMRZguKmFKJw9 bQDdj2XZqXEy1/emDDkl4MKPlDcWqVrzKiz/xvbGCTGKqIhwLOJnyXGTf7BAgmw0YKuM 0pcA== X-Forwarded-Encrypted: i=1; AJvYcCV8kAV20A7g6USQ2ZmWRMyHhHXzPi1THQXo5Rna9DD3xljgz4q8JwX7M+stzpCAil3ZpjDa4F9953ceoFo=@vger.kernel.org X-Gm-Message-State: AOJu0YzPmSQhU79kmMCE8lDRD6YPEi/nGN5UPhdz5IyuE/3ko61mWZv2 ksG7SSmirsMKo/xkwCD+jbvMRnzI57/DK10BjSq27h2t4E4MmCakTqco X-Gm-Gg: ASbGncubrQaMMIMeZFU+2wbZ+NQtamK8+IBf9jRIYSH2u3LbF18ECfgLHtB382K+Eep +Zx7OQzTV04jrNTogsJfuBUOw0MKUns/HBOrxmT9h7ZOfLlnx/paIDsKwuYBEW3oD9uiX+fX9Wh zNqsILZUOYswOuuhHFMtWDvMPfErAQmFjTToKt4MK4kajvX+kUKoMN3geOUoWA67jUmLBy+sE89 w5LEgFuxguHhcnwVsmVEEhF3RR7HSGls8HCHf/UFBr5RkVGAzWy/C2JPTOb5YSbjoiTW5MvIcdS 9fM6V4qYha2Xp2cgTqi6JAe5T7kAWIASADVa629oHg0kDlqjWWQumTRsre8b5geWkMofHddWif5 R0A9jXBnYVC45Jldvo/EKrPbhFkL0WpPFjL4ue3hui12P X-Google-Smtp-Source: AGHT+IFiZ8Cmf7lfrKrgivPhlQMvgZpgNrmFHwpmbuo6oJXmpmGCmmDQeFJT+qUdMU9Hw5uXjfq0ng== X-Received: by 2002:a05:620a:4d52:b0:801:eb0:c0d9 with SMTP id af79cd13be357-83ba371e8cemr92937585a.32.1758226313542; Thu, 18 Sep 2025 13:11:53 -0700 (PDT) Received: from jl.umd.edu ([129.2.89.30]) by smtp.gmail.com with ESMTPSA id af79cd13be357-83630299579sm222392985a.41.2025.09.18.13.11.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Sep 2025 13:11:52 -0700 (PDT) From: julian-lagattuta To: Luis Chamberlain , Petr Pavlu Cc: Sami Tolvanen , Daniel Gomez , linux-modules@vger.kernel.org, linux-kernel@vger.kernel.org, julian-lagattuta Subject: [PATCH 3/6] module: move freeinit allocation to avoid memory leak Date: Thu, 18 Sep 2025 16:11:10 -0400 Message-ID: <20250918201109.24620-8-julian.lagattuta@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20250918201109.24620-2-julian.lagattuta@gmail.com> References: <20250918201109.24620-2-julian.lagattuta@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" move freeinit allocation after do_one_initcall in case do_one_initcall cras= hes. Otherwise, freeinit would leak memory after every initalization of a crashe= d module. I could not find a reason for why freeinit allocation happened before do_on= e_initcall. Signed-off-by: julian-lagattuta --- kernel/module/main.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/kernel/module/main.c b/kernel/module/main.c index 2277c53aef2e..2825ac177c62 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -3021,21 +3021,13 @@ static noinline int do_init_module(struct module *m= od) } #endif =20 - freeinit =3D kmalloc(sizeof(*freeinit), GFP_KERNEL); - if (!freeinit) { - ret =3D -ENOMEM; - goto fail; - } - freeinit->init_text =3D mod->mem[MOD_INIT_TEXT].base; - freeinit->init_data =3D mod->mem[MOD_INIT_DATA].base; - freeinit->init_rodata =3D mod->mem[MOD_INIT_RODATA].base; =20 do_mod_ctors(mod); /* Start the module */ if (mod->init !=3D NULL) ret =3D do_one_initcall(mod->init); if (ret < 0) { - goto fail_free_freeinit; + goto fail; } if (ret > 0) { pr_warn("%s: '%s'->init suspiciously returned %d, it should " @@ -3045,6 +3037,14 @@ static noinline int do_init_module(struct module *mo= d) dump_stack(); } =20 + freeinit =3D kmalloc(sizeof(*freeinit), GFP_KERNEL); + if (!freeinit) { + ret =3D -ENOMEM; + goto fail; + } + freeinit->init_text =3D mod->mem[MOD_INIT_TEXT].base; + freeinit->init_data =3D mod->mem[MOD_INIT_DATA].base; + freeinit->init_rodata =3D mod->mem[MOD_INIT_RODATA].base; /* Now it's a first class citizen! */ mod->state =3D MODULE_STATE_LIVE; blocking_notifier_call_chain(&module_notify_list, @@ -3123,8 +3123,6 @@ static noinline int do_init_module(struct module *mod) =20 return 0; =20 -fail_free_freeinit: - kfree(freeinit); fail: /* Try to protect us from buggy refcounters. */ mod->state =3D MODULE_STATE_GOING; --=20 2.45.2 From nobody Thu Oct 2 07:43:57 2025 Received: from mail-qt1-f172.google.com (mail-qt1-f172.google.com [209.85.160.172]) (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 5B85331CA62 for ; Thu, 18 Sep 2025 20:11:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758226320; cv=none; b=WgawllbDKuHNsa9Jzkw+GjCfGSIC90T4gqUukX5ShWwWJFmFJ9MLVmp3l5PjRicrkwzhEF68rTMQe86fmAeK1eP3vGvBQLQ5xqZ2Ey/7Cd+pvZ7msNA2qcjcqyCrPMFj/rwyf/EIlunkZKXxxoLuHxQOCNeIX/5ZuVY50Nn2b3o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758226320; c=relaxed/simple; bh=AFi5DdFh+/5V7snMBQ64aoxQDVUz9zY0bbZXem3ZDAk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WgJpn5J7sJXVM9lGaeemozBsGhs/jH334jL5p+zhGfy9JL53BJ6D4f06fJV6H/AUcl/KjfaTm2aObcHwsK64wNZFdT4MB2b8yCWeYpYPEolnNvNdz42ANUak/ba8EwHW6ZKrHd0OWD1FapD5TiUr0g3bD5l6gJy5tZ2OtLBilug= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GabhOFbQ; arc=none smtp.client-ip=209.85.160.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GabhOFbQ" Received: by mail-qt1-f172.google.com with SMTP id d75a77b69052e-4b7a8ceace8so15850441cf.3 for ; Thu, 18 Sep 2025 13:11:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758226317; x=1758831117; 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=fB4PMKHGHfIKWZXnYg77rpKZoRif5ebNQQe0AWVulAI=; b=GabhOFbQf05nWi8MUpex3yUBwd3ocOMgamaZE18yDOsFm0O7E4pXc1WFhkS8niuHNR qElAX1WYGam39Ccz2KOjp8QVPxJlXQkl8R+iXAdBs2ytya8L8kBuEvZ/VZyofPTisQvV PCnojukgIHy8XlBsqM8OPigVlGCthiOUIbLVdJrbK23esbshjO5g5QoFJfloHST2cQKd lN94LT3FaoOUxqZDYjry4R17fR3wCR7J/diy29DF6IbKLmS/j9LfZpKbSxJyTjWMPI1G w0rSf+BUXfbS4cmwP5KQdge0CVXvi7lx4IVKnQNeLWnUVFvL+Exh4487WNket0ArOfpM Ql+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758226317; x=1758831117; 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=fB4PMKHGHfIKWZXnYg77rpKZoRif5ebNQQe0AWVulAI=; b=OJuvJdgeynZa2bE74JzXW0oaLxM+ggBHxlgUSK4LlmQV8AY5M9EUa/gK7Fr2FYB56x Yk9xZMdNIX8dJUKU32R9HRqZ4nIqE2HjdwGGBYIAETCsk89mzdOIcesYylWc4PCKOrCz 9ASELxSO0lwDqwzi8/Un8YKTOPzBsRYDW+HNCflf4GkWcZNSkWnLxAtftqRIUJrmFMVm w7ujo9mBDAO2WvJV5OgSiAPyV3BVH62TBBQJci8tSO5E6fZR58cBK94xVIVlL/64eLkE tPyyd+KRA9XGvJ/6JZotAVCVQdlepymkFRfc5ZXxPgVhTvOvS5YMPg51GSJ3jc+O5dSR 80cg== X-Forwarded-Encrypted: i=1; AJvYcCVTq5L5L+FN2u2YDtg0Dn9Q0irl9NMVyMEDdTxKfq6LCBItMhkuKbS4HWbWwG+iiNA0o8bVmOTnQ5QRiBk=@vger.kernel.org X-Gm-Message-State: AOJu0Yx9PhmtF6nh/devGH2mLNojXPMOpWLRMwfVa039eFbizvokFNF4 GWKtud4IUCbAkvdlSRUIU2KnqLihkemE0HgTMYeIaGbXppZXIsHuCqyc X-Gm-Gg: ASbGnct1Kawkry86vv9iE+ZzRxOnP79F8aJ6sFcSPFsyG7AFmsgHJSP1ppYyy4PFOMb nZE6iFDtHkTAObMmKEekhuGesdHxG2pajX9sV51Kw7jKUQ3HXajEZlY4fX3tQZNLuuwdNz87qIx EZa2L1D/AZA7IN6BTZpMEUkA2kc0/zYv/frWjZjpjHhd9ammCWCvKdBsB29/YnJV0bUXs7/HbIv PAcq12dZAbUrN7a94auaHiapwRqpB8//e0lxyv92A42B/PQd6QGR6xyEp3j3GufRzwV0DQlZEf1 DgYadLSUEo83I/pFGx0fewUxPzUGcVN3X1FAHDN3nVgvHNnIGWsABRVlNYcATMOtFDHTwlOnn5c zyOjBJy243MX6VvN4kd8gsnFNY6Liqm5sKUDHcCe9UdJt X-Google-Smtp-Source: AGHT+IH6ghb5zeNlCjOlURltdRO0PpOlpaN5aQ8ddhGkViobigXgjnQAIiFPcPqWg/SNpo204yM6Yw== X-Received: by 2002:ac8:5dd1:0:b0:4b3:4457:feca with SMTP id d75a77b69052e-4c06fc18407mr7944931cf.6.1758226317292; Thu, 18 Sep 2025 13:11:57 -0700 (PDT) Received: from jl.umd.edu ([129.2.89.30]) by smtp.gmail.com with ESMTPSA id af79cd13be357-83630299579sm222392985a.41.2025.09.18.13.11.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Sep 2025 13:11:56 -0700 (PDT) From: julian-lagattuta To: Luis Chamberlain , Petr Pavlu Cc: Sami Tolvanen , Daniel Gomez , linux-modules@vger.kernel.org, linux-kernel@vger.kernel.org, julian-lagattuta Subject: [PATCH 4/6] module: move idempotent allocation to heap Date: Thu, 18 Sep 2025 16:11:12 -0400 Message-ID: <20250918201109.24620-10-julian.lagattuta@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20250918201109.24620-2-julian.lagattuta@gmail.com> References: <20250918201109.24620-2-julian.lagattuta@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" struct idempotent is normally allocated on the stack. If init crashes during a finit_module syscall and then the module is unload= ed, reloading the module causes issues. This is because the struct idempotent s= tored in the list becomes stale after the crash. Therefore idempotent is stored on the heap and placed inside the struct mod= ule=20 to be completed by delete_module. I am open to the idea of only storing it in the heap when=20 CONFIG_MODULE_FORCE_UNLOAD is enabled; however, simple seemed better. Signed-off-by: julian-lagattuta --- kernel/module/main.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/kernel/module/main.c b/kernel/module/main.c index 2825ac177c62..217185dbc3c1 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -3650,6 +3650,8 @@ static int idempotent_complete(struct idempotent *u, = int ret) complete(&pos->complete); } spin_unlock(&idem_lock); + + kfree(u); return ret; } =20 @@ -3666,13 +3668,19 @@ static int idempotent_complete(struct idempotent *u= , int ret) */ static int idempotent_wait_for_completion(struct idempotent *u) { + int ret; + if (wait_for_completion_interruptible(&u->complete)) { spin_lock(&idem_lock); if (!hlist_unhashed(&u->entry)) hlist_del(&u->entry); spin_unlock(&idem_lock); } - return u->ret; + ret =3D u->ret; + + kfree(u); + + return ret; } =20 static int init_module_from_file(struct file *f, const char __user * uargs= , int flags) @@ -3705,21 +3713,26 @@ static int init_module_from_file(struct file *f, co= nst char __user * uargs, int =20 static int idempotent_init_module(struct file *f, const char __user * uarg= s, int flags) { - struct idempotent idem; + struct idempotent *idem; + + idem =3D kmalloc(sizeof(*idem), GFP_KERNEL); + if (!idem) + return -ENOMEM; + =20 if (!(f->f_mode & FMODE_READ)) return -EBADF; =20 /* Are we the winners of the race and get to do this? */ - if (!idempotent(&idem, file_inode(f))) { - int ret =3D init_module_from_file(f, uargs, flags); - return idempotent_complete(&idem, ret); + if (!idempotent(idem, file_inode(f))) { + int ret =3D init_module_from_file(f, uargs, flags, idem); + return idempotent_complete(idem, ret); } =20 /* * Somebody else won the race and is loading the module. */ - return idempotent_wait_for_completion(&idem); + return idempotent_wait_for_completion(idem); } =20 SYSCALL_DEFINE3(finit_module, int, fd, const char __user *, uargs, int, fl= ags) --=20 2.45.2 From nobody Thu Oct 2 07:43:57 2025 Received: from mail-qk1-f172.google.com (mail-qk1-f172.google.com [209.85.222.172]) (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 8339C31CA62 for ; Thu, 18 Sep 2025 20:12:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758226326; cv=none; b=uOmTTm2f4BCGZ75H12D1degMbcc3xB0jf6MkUAy9r1Gl9mv/Uj+f2Z17dVQePogJibG4aqqTzBKdIsZIxZm4yPjtAyLrK6BY+prj/K73AowDxKNbVmI1cm2YXpPn1CUWOXIA6tG8/B9x2aib0Gnzh7S0hT0c0ZoHAWDOJt5uEYM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758226326; c=relaxed/simple; bh=PvPtlt1c4VJyn8dLTiCc0gxKvb+VLZbvk3Y+VTRwjo4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YKZcofevM7Lf7d/PPNxZIpH9OWHyhmMqB8kIxBlRq64QTsQtjdj8dxPde9iVhfLgfaCiXIVfgIblFafM2yr6KU8NNlvhbeoEfWPJ6ifbOzVHfJ7lxPxl9eKBR7PraYi3i/YyBQBlhtWXmWhEiISt4WIpf64E9NwNJHSW7/rYmvo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Oq9oZLJY; arc=none smtp.client-ip=209.85.222.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Oq9oZLJY" Received: by mail-qk1-f172.google.com with SMTP id af79cd13be357-811ab6189cfso139340885a.2 for ; Thu, 18 Sep 2025 13:12:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758226323; x=1758831123; 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=LP02yHuvyiZWCyd9gSrmQ/IvvtpIZejTIOWn2O6TonY=; b=Oq9oZLJYyNyStlrlLeRCxVQ1FZyaM0MADesNu91TMEzQ3UKsC8hPVl0eEH/v6GTn7w gaLm3GrsJLHnYKnON7W1R18cqsMyYYFLa24vOMnXI972208ZNQWG6cu07GDs8Aln51V1 QSi+MkP0r7Yv8+yY6qbx2xD9pDp8gTtp8lpGBMTG2g519BqCtO2pzxMEXzc7/qYifSlc hWVGmmZVFPmFiekxZ6fRzfVOnvgkS8jah15O9nJulhZy8hDzGUeP9zzDFOiLmly0ifMI BpTOXmLo7tSuC2jNoRgksHPvbQ3QEWPjw8whyxDxlDSGJ5XBHkl97GhgbEwl1krKKHzi 8MQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758226323; x=1758831123; 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=LP02yHuvyiZWCyd9gSrmQ/IvvtpIZejTIOWn2O6TonY=; b=r/wszN1C90S6OHr1xYFBCC9kabsDyH+seMy7YSbSxo6yOhwVQJLHpwb0tN8u+cclmL e4M2SnvW3bs5o9OjrUPf8AJbJipum12J+vkWd2rDDbSmojqoNLcESKILyItuwiAU5OaA YFg+LRcTbjxG+JH0izZ9fpBIgfR/x/lJXqN4V5uE1JNXWhpt1+/Fo8ccrCvFNwTlRDlP AHgSJsfZdHVccbv8CUEL6F7h6cY3XLZBbs6nY6WFoYbwYIx9YG4ZnIHtIVuNGlm6k8yv XAnLJSA5j+riWJfSFdu3aGT3QORyXraexcYWu/1U63v7UNPx9//fEMFYUOxmzDkzkdD5 jumA== X-Forwarded-Encrypted: i=1; AJvYcCVKG5rZvpay5ho8g0PMqgtOmMdyk5x0hNa9jfnDHe/lCeVu861/aa2tnwUsRfwk9nswQ5BKW9C+U+G1JO0=@vger.kernel.org X-Gm-Message-State: AOJu0YwCM9pWiby2FhdesF1HVC0XDG4C8OaQSpugVClF4Bp2WVAuVOCP Z4PkmICKKu4UtyYdPzQiZLYxeA/Q2MNcoqdkBSyhO0sBiSI+He1mgnvU X-Gm-Gg: ASbGncuHwyqByVETiHWecP0z2KCbCGU1qpbmCXAnpvkCuI//IdgxsVWvqxwHbVoF8Tu cwkePEsuovc4x6/BkoYzW0FHv7b6zLiBr+dJGfe9xC1rdKofuy7O95bpyXUn+zL2+rPe6NtFOSd geU1rP1TyerpXKF1yO/cmrgLRQVACJv996BUSZ9XVNkV3D5yxFFbmt1t7BsQtJW5a58z6pmMiBj Zz50G7uRStMFNc9DUO0hJqgnhoWjsPoXkhhL7xbzzVeRPIeTUyhz0eflTAVR8zbMR8vBF1qDYmA KMWL+GMVrzB7Btyy7Uy8+WLKWmsRwuRB5uH3cTnIiHLDD8UT9PCa1CXIfoUswuhk7yhRfB0Vie0 bdzKFqaaLxDcr/uaiH4a5LgJGF19VNuU54+S0hpXWU7un X-Google-Smtp-Source: AGHT+IHYupFZHDTKkw+QZ4v0Cz2P4eNnX3kBd8iRs0HvVEup+i6PcnJJH0MCFFeUfABRPeGNsKeS5Q== X-Received: by 2002:a05:620a:1a8c:b0:80d:a8d5:9857 with SMTP id af79cd13be357-83bab74d395mr104333885a.43.1758226322335; Thu, 18 Sep 2025 13:12:02 -0700 (PDT) Received: from jl.umd.edu ([129.2.89.30]) by smtp.gmail.com with ESMTPSA id af79cd13be357-83630299579sm222392985a.41.2025.09.18.13.12.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Sep 2025 13:12:01 -0700 (PDT) From: julian-lagattuta To: Luis Chamberlain , Petr Pavlu Cc: Sami Tolvanen , Daniel Gomez , linux-modules@vger.kernel.org, linux-kernel@vger.kernel.org, julian-lagattuta Subject: [PATCH 5/6] module: store and complete idempotent upon force unloading Date: Thu, 18 Sep 2025 16:11:14 -0400 Message-ID: <20250918201109.24620-12-julian.lagattuta@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20250918201109.24620-2-julian.lagattuta@gmail.com> References: <20250918201109.24620-2-julian.lagattuta@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move idempotent definition up and add idempotent_complete declaration. Add idempotent to struct load_info which gets passed into load_module and then stored in the struct module. run idempotent_complete after module is unloaded and give EBUSY to any process waiting for the module to finish initializing via finit_module. Signed-off-by: julian-lagattuta --- kernel/module/internal.h | 3 +++ kernel/module/main.c | 29 +++++++++++++++++++++-------- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/kernel/module/internal.h b/kernel/module/internal.h index 8d74b0a21c82..43f537475859 100644 --- a/kernel/module/internal.h +++ b/kernel/module/internal.h @@ -89,6 +89,9 @@ struct load_info { unsigned int vers_ext_crc; unsigned int vers_ext_name; } index; +#ifdef CONFIG_MODULE_FORCE_UNLOAD + struct idempotent* idempotent; +#endif }; =20 enum mod_license { diff --git a/kernel/module/main.c b/kernel/module/main.c index 217185dbc3c1..256e30259bcf 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -80,6 +80,17 @@ static void do_free_init(struct work_struct *w); static DECLARE_WORK(init_free_wq, do_free_init); static LLIST_HEAD(init_free_list); =20 + +struct idempotent { + const void *cookie; + struct hlist_node entry; + struct completion complete; + int ret; +}; + +static int idempotent_complete(struct idempotent *u, int ret); + + struct mod_tree_root mod_tree __cacheline_aligned =3D { .addr_min =3D -1UL, }; @@ -784,7 +795,7 @@ SYSCALL_DEFINE2(delete_module, const char __user *, nam= e_user, !IS_ENABLED(CONFIG_MODULE_FORCE_UNLOAD)) ) { if (mod->state =3D=3D MODULE_STATE_GOING) - pr_debug("%s already dying\n", mod->name); + pr_debug("%s already dying\n", mod->name); ret =3D -EBUSY; goto out; } @@ -833,6 +844,11 @@ SYSCALL_DEFINE2(delete_module, const char __user *, na= me_user, strscpy(last_unloaded_module.name, mod->name); strscpy(last_unloaded_module.taints, module_flags(mod, buf, false)); =20 +#ifdef CONFIG_MODULE_FORCE_UNLOAD + if (did_init_crash && mod->idempotent) + idempotent_complete(mod->idempotent, -EBUSY); +#endif + free_module(mod); /* someone could wait for the module in add_unformed_module() */ wake_up_all(&module_wq); @@ -3591,12 +3607,6 @@ SYSCALL_DEFINE3(init_module, void __user *, umod, return load_module(&info, uargs, 0); } =20 -struct idempotent { - const void *cookie; - struct hlist_node entry; - struct completion complete; - int ret; -}; =20 #define IDEM_HASH_BITS 8 static struct hlist_head idem_hash[1 << IDEM_HASH_BITS]; @@ -3683,7 +3693,7 @@ static int idempotent_wait_for_completion(struct idem= potent *u) return ret; } =20 -static int init_module_from_file(struct file *f, const char __user * uargs= , int flags) +static int init_module_from_file(struct file *f, const char __user * uargs= , int flags, struct idempotent *idempotent __maybe_unused) { struct load_info info =3D { }; void *buf =3D NULL; @@ -3707,6 +3717,9 @@ static int init_module_from_file(struct file *f, cons= t char __user * uargs, int info.hdr =3D buf; info.len =3D len; } +#ifdef CONFIG_MODULE_FORCE_UNLOAD + info.idempotent =3D idempotent; +#endif =20 return load_module(&info, uargs, flags); } --=20 2.45.2 From nobody Thu Oct 2 07:43:57 2025 Received: from mail-qk1-f178.google.com (mail-qk1-f178.google.com [209.85.222.178]) (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 17FD931D72D for ; Thu, 18 Sep 2025 20:12:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758226328; cv=none; b=NtdB6QjM5qd5QSRVWw4iYHkr2gRG6UOEFbO5b3lI5LYMB/gcuCSgtFZkzFBhxmjMmhEItxaF9r9LnJJrG2ait/pf89VFhrno+tfYbgrIqpHWVJ6DBhOYY0jq6PfJKCSiNdlK1005rDIBNGUsYh7R1weUSzug8J1LY4jdBKPUbw4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758226328; c=relaxed/simple; bh=ny1wrXLDh3RsyooyRx8m8um2skd/fs2vW4vIYfk/ANU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sYA8RUYCwvHjxYnRlcvHmY3b35s/bSBtgpx4zUfzKyUkr11gHijyQYpDU8djfGB9/SMeIaJEAQnsbWa99xo+gwuidxXG76jEGrzL97nCZehAKBOOJ+8ZSSDZoCymWss5PniDh/Ac2K4M3gIr1IVK9KLvvqDwvLapnNFVE7TE7Rg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=XLsGYu0D; arc=none smtp.client-ip=209.85.222.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XLsGYu0D" Received: by mail-qk1-f178.google.com with SMTP id af79cd13be357-8173e8effa1so97237385a.0 for ; Thu, 18 Sep 2025 13:12:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758226326; x=1758831126; 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=cpKJ4FYn851/u3+mSRW1KYRDrW2vMaNsMXQSquJ7H/s=; b=XLsGYu0DdShuSsoaSUFUO0WHrhEeMSiFGSrJfsdtDlY6e/NZcWcQWzeykzfG0LR7nU USt/7f+gFcm0PvuwOPwWgmhr1w33+ge11hVGWYM9a/qSLucA6yslo+FrUXyvi06A3aOl k3gDZ9IIx57rPtdrL9Y8zyvBMmWdSmm2BzmNlpAt32T7FkOFpo79viDJqj6ls7FMDLtb IAU1w4yQQIeKmzW3bOeSimp2jrmpiXeLC+fLstz6mhhYj2se42ZW5mnC7kjC1d9hqyNE QBRwyQZeGAFf4x2vwsl38pueWvh0FSb1E8uVYhRJpfKN2GYNS4fYTnozWFRikHJWNXEZ Kc+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758226326; x=1758831126; 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=cpKJ4FYn851/u3+mSRW1KYRDrW2vMaNsMXQSquJ7H/s=; b=SbhKbmBUK/6WEHoP4fqKfNuANmN2sqcIopuEWi267NMMVEcHWQmsnR3F84vh10ZXEB NPz+H3TVkZtqZ2gkW2gWAmEnmpqRcv2hvmMxsKPmqCp/W7gLviBtujqkbS3qc6i6C4Md gHt+4fK6Xf11UU2znCb7I/vL/zVfnxtHE4uPHCzeogxaDVfUGlFSTdlDNLndh7ku+knt Wj9HLZPONPs6gdZvwNW764+rjBF4sdq/DB+NKCue7v3lBKwa4biDQE9Eh07CFG4Hck7i lO52U2vKi2KyxaqgY+81qO04SLg4GiQNe1vOtFYYBRtu5FjXEfGLZlRyxi2Gn9W6xNmV mGgw== X-Forwarded-Encrypted: i=1; AJvYcCWxGvauk9RECUOAj2oCC0lONoUFm+jBGLMdeKlkwhb2q65bi0nndSgDGNdGuOzc57mBDEyC4jVkZgdaWFE=@vger.kernel.org X-Gm-Message-State: AOJu0YzgpcK9Nuv+iOwK6CoE0cFldHgylIQshqPkkDUKscE84iqjCHCM bk9QOkpGqHs62tOqMJp6qNfFWZlieM+pvXx7i14SUfsuvdRCa0sRu9Uk X-Gm-Gg: ASbGncseM8mGlRdOr5gwzHRwF4ttUlm4AobKh9ygysA7SaFZKXXgPA+PgObjIxJ9/u4 b0MlsWbt9ekzAog431xNay7+/mxGhzGtSGR1lRiHPIcT6kVAJ4VaHOogE21M/dxUjGSnOqXwbea zZ+Z9R7jOK//ojrE3GQza1sFVN9muPovtNf1vS7dvOSySAeQ83aLR6F+QQQTCtYKbIRPgFPo9cN EXnVvqv/sBphN/zUEwZ3oRMr1GOawMhGRaUSd4cfiyvzZmnlXOhViUGMX4zc6Dybdj6YmI6xEqh ZIWVP3kbvJxDNgP6aSx7Sf7CllvLdvAHjxX7s7SjkVYwl0QjIOj4Y5rS6g9xlbpLm8skGwFrQXi dUw3tcUdpSAedGFo9oetxZDeFHi2atEe6XZzz4WAszOPchJUDoK42UX0= X-Google-Smtp-Source: AGHT+IHO+x7rpttILqBrr+bkLB4ACuWoLHRLLqhfpvVqyGjEJFvteQaJ5DbjiRTmgT2eKE95zYRvdQ== X-Received: by 2002:a05:620a:12da:b0:82b:15c1:5a3d with SMTP id af79cd13be357-83ba2e7eb61mr109879285a.1.1758226326112; Thu, 18 Sep 2025 13:12:06 -0700 (PDT) Received: from jl.umd.edu ([129.2.89.30]) by smtp.gmail.com with ESMTPSA id af79cd13be357-83630299579sm222392985a.41.2025.09.18.13.12.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Sep 2025 13:12:05 -0700 (PDT) From: julian-lagattuta To: Luis Chamberlain , Petr Pavlu Cc: Sami Tolvanen , Daniel Gomez , linux-modules@vger.kernel.org, linux-kernel@vger.kernel.org, julian-lagattuta Subject: [PATCH 6/6] module: comment describing new codepath Date: Thu, 18 Sep 2025 16:11:16 -0400 Message-ID: <20250918201109.24620-14-julian.lagattuta@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20250918201109.24620-2-julian.lagattuta@gmail.com> References: <20250918201109.24620-2-julian.lagattuta@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" added comment so future authors know about this codepath Signed-off-by: julian-lagattuta --- kernel/module/main.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/kernel/module/main.c b/kernel/module/main.c index 256e30259bcf..f4ce431163fa 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -3220,6 +3220,11 @@ static int module_patient_check_exists(const char *n= ame, */ if (old && old->state =3D=3D MODULE_STATE_LIVE) return -EEXIST; + + /*=20 + * Can occur if the module was forcefully unloaded after + * its initcall crashed. + */ return -EBUSY; } =20 --=20 2.45.2