From nobody Fri Dec 19 18:46:33 2025 Received: from mail-wr1-f73.google.com (mail-wr1-f73.google.com [209.85.221.73]) (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 343B631C595 for ; Mon, 13 Oct 2025 15:39:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760370000; cv=none; b=qktFaw3NugOfAnwLJ3NybX80JoD+2feU/qKm9sCy05ohMDKmUEe98tIcyRDaV+FSAG9ypWiyNeXt4AjVUdHwx/F9/wAEYfAvePoXaUyv0CMIzIgH9/mYxm2jrB9uqnWQFZyzAh1Tyd27xZRSiUs+is0Sn34NxOt9dCWVBD5zBcQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760370000; c=relaxed/simple; bh=qWYTuEu4IG9GCT7DjS/hH5Ft/AQYcQO5Boog+C14wCc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=W9VbNlJgKMTKOK9lJbTmnw73baz1/+At/XOMHjxrBRXGnbSjo2n/jukM0UZd5WnXoqyFA/m35MQ6hs6JRlICffPyOkuqXwsTOj6urDm4E/QCucJts13wbvggLPAZjS75ndmmWbxVpO6LZjxcMXnQVtsmXdNdT5qKZVtYXT9NkKU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--sidnayyar.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=wSTb07DZ; arc=none smtp.client-ip=209.85.221.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--sidnayyar.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="wSTb07DZ" Received: by mail-wr1-f73.google.com with SMTP id ffacd0b85a97d-3f42b54d159so4768122f8f.2 for ; Mon, 13 Oct 2025 08:39:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1760369996; x=1760974796; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=EWqoEOZl6L4UgifcuVH8Vvw1RztpD/4r7yVFa1CMC6A=; b=wSTb07DZc1jMbUWpnaVe7yVdz6j3xUJ1419LXaEz6dFZd5WxEEo12pnpzqy8Gcu2VE XZcCAkEBdNgt7PN5jszViZ9yhurTzR/wZkbmmSVUUMhIHXyMP7kNp4EvuCSkwUzxSnJI +woNVO2taJvhNZQWQmZyGDGqQzy/5Pvcb2e96ieSn38Ch879Un/jMx4LaFvA7Vs9Bw8E yM4XJxOUZCMGfMk6X/BZo1aurOlcCKQdP6h/HSMzHi+WU943VQUFMX5WLEoO9/T00A6g 82s7KTgl7q4Fttk5O7713NbiGLvPLNOIxGQt8qMpZtPF2bx/H0m8AiJ3fxjRVjomy/8D r/RQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760369996; x=1760974796; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=EWqoEOZl6L4UgifcuVH8Vvw1RztpD/4r7yVFa1CMC6A=; b=AVokfYnc7Eva7Y6DKvoKnzUdm6du6QSPojalfdRJ5T5DZL/2c74xwR/MH4PcgoUTWw EbQvGRVFXuRRDcHg25KBK+BnO1lpLySJlPGYv742EDgypFaTh9MDTwr2QZCeDb9vwR1v TdSd+SOd5GOCuKJr+UXBldz7icAFaGMVGeVNbJRjtdMeBJKqeCTKQm7p+T8md849XSoT jP0ntMv66KzJmLTRmaTcPZWvNJF6FG80mIyilqlfjW7C4uE+07t8J3f43HzWRGafA6nB 8w4x1DAlxspc4Sa3q3Q0nw9ixySgti3dkEv04l9Eyf6WEWirNBwsPl/ryj+sKDy4dc/8 DmQA== X-Forwarded-Encrypted: i=1; AJvYcCXZo0cWQPkzUs13GZYA09jqUnl8xZhF+y+Lh7ntE0fdd4tS7LQIALmc4R2WSgXwVAvdIoM3k1KN7PSNMLI=@vger.kernel.org X-Gm-Message-State: AOJu0Yw8WULBf3pu27os8Kbn1M7S5vpFnAHXR7dOylh5Rayqf0B2r8/s J4+kuMbHDEbJgGbIbYUI9mN3Lt3wRxFzMzC0pD1qX3miiyehspjmWAdE3s78RcdYXc3hGUI8Mah XQvVxX4+WMEwnWVCjkA== X-Google-Smtp-Source: AGHT+IHLek4r1lwro3GQIO4ppkzexXFiEHQSVL/Za4DDoRCAzgIf53fcpusHRbOINss/Tpngpku8rgJ4Go3IiS4= X-Received: from wrpk16.prod.google.com ([2002:adf:f5d0:0:b0:3fc:7d28:6438]) (user=sidnayyar job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:4901:b0:426:d51c:4d71 with SMTP id ffacd0b85a97d-426d51c4e7emr6015254f8f.8.1760369996504; Mon, 13 Oct 2025 08:39:56 -0700 (PDT) Date: Mon, 13 Oct 2025 15:39:18 +0000 In-Reply-To: <20251013153918.2206045-1-sidnayyar@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20251013153918.2206045-1-sidnayyar@google.com> X-Mailer: git-send-email 2.51.0.740.g6adb054d12-goog Message-ID: <20251013153918.2206045-11-sidnayyar@google.com> Subject: [PATCH v2 10/10] module loader: enforce symbol import protection From: Siddharth Nayyar To: petr.pavlu@suse.com Cc: arnd@arndb.de, linux-arch@vger.kernel.org, linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org, linux-modules@vger.kernel.org, mcgrof@kernel.org, nathan@kernel.org, nicolas.schier@linux.dev, samitolvanen@google.com, sidnayyar@google.com, maennich@google.com, gprocida@google.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The module loader will reject unsigned modules from loading if such a module attempts to import a symbol which has the import protection bit set in the kflagstab entry for the symbol. Signed-off-by: Siddharth Nayyar Reviewed-by: Petr Pavlu --- kernel/module/internal.h | 1 + kernel/module/main.c | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/kernel/module/internal.h b/kernel/module/internal.h index 061161cc79d9..98faaf8900aa 100644 --- a/kernel/module/internal.h +++ b/kernel/module/internal.h @@ -108,6 +108,7 @@ struct find_symbol_arg { const u32 *crc; const struct kernel_symbol *sym; enum mod_license license; + bool is_protected; }; =20 /* modules using other modules */ diff --git a/kernel/module/main.c b/kernel/module/main.c index f5f9872dc070..c27df62a68f5 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -380,6 +380,7 @@ static bool find_exported_symbol_in_section(const struc= t symsearch *syms, fsa->crc =3D symversion(syms->crcs, sym - syms->start); fsa->sym =3D sym; fsa->license =3D (sym_flags & KSYM_FLAG_GPL_ONLY) ? GPL_ONLY : NOT_GPL_ON= LY; + fsa->is_protected =3D sym_flags & KSYM_FLAG_PROTECTED; =20 return true; } @@ -1267,6 +1268,13 @@ static const struct kernel_symbol *resolve_symbol(st= ruct module *mod, goto getname; } =20 + if (fsa.is_protected && !mod->sig_ok) { + pr_warn("%s: Cannot use protected symbol %s\n", + mod->name, name); + fsa.sym =3D ERR_PTR(-EACCES); + goto getname; + } + err =3D ref_module(mod, fsa.owner); if (err) { fsa.sym =3D ERR_PTR(err); @@ -1550,7 +1558,7 @@ static int simplify_symbols(struct module *mod, const= struct load_info *info) break; =20 ret =3D PTR_ERR(ksym) ?: -ENOENT; - pr_warn("%s: Unknown symbol %s (err %d)\n", + pr_warn("%s: Unresolved symbol %s (err %d)\n", mod->name, name, ret); break; =20 --=20 2.51.0.740.g6adb054d12-goog