From nobody Tue Nov 03 09:02:05 2026 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4jJjHx65cLz6yPvB for ; Tue, 03 Nov 2026 09:02:05 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4jJjHx4S9vz4K7p for ; Tue, 03 Nov 2026 09:02:05 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793696525; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ja0dNnOwl6Cvso0RWqg/SqRpkY9Ukt52DdnLPe9qPnE=; b=ik0CArh+P9pvw/FOc8jNopajb76w5OmzOjJ6KtFpBq21gvFJ8v6C0WncxZVah4faSoH1CW qFJxWaR1kYLVbK2Q9OrfxpUxCw0LrRQlbehHmIlsvd5ijmjxQCqohc/PENYaaQg9kzdGrX K03e9bdoxBERjvu5t4Jm/Q2lT3ObNWSY+hckyzMB5q5m2mijThFkb6maw+g8GIZnYuIv8q XNYzIGs/JbwCK6X5JB5QazWv8WiaKaEWP4knJ+G9gO+vODVTDWe5Q9FNXCQA9WW+5cfHcs o56sbYk5oNamvg+BAjTHMJFbzZQFCbaTdSHWP2Z/9+2MFAPT/Qq2bmn3ccsCyg== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1793696525; b=IxowPVw0YDEd2cc6XXJ9EwD8/XwbJQH4FGiQnTaVjShUSWIXFh5KbqlwRjv3rCYTYSXca5 Hrny6enuFTdZV6nSQvxLd7qxM5QZG/scd1tm9Tk/bxejFpCMVD1rQirfqo2oG4JxP4FwrL Pqi3+CnDj/pP1OlgR+N1fZJDWL5uZL54jxooHhe+7+0q+b8uSppO/5AacG8C2Sz+Y1W9kA NQP3XzBuN68erBSU/X7FVa/iOL+BF4lsM7w9M6XGnxJZoUsDoSKDsT6fw9Y2kSRP5d5Rvt QJ0ha64TzT9TATKOpueuvxXzMXBEiJbiGg+TJxUd0+oNdtwPZA4fMMXIPUq0oQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793696525; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ja0dNnOwl6Cvso0RWqg/SqRpkY9Ukt52DdnLPe9qPnE=; b=Qy/1m6yxCzpxpJxleSzBdim2fK7RhuaCSt7y/w/ksYOwFHag/RrsNCXGrICoPO/QWHVmgZ Ah6xwESK52vP2pcNj2Tln0nCM3I/2Y3ZOiwh2wyyek1ySBTGi4G/bkkjyuaQARVsHvrNvB AWp+/knjtNyUiH/SwdyfyFfOQrIbnM88ceWYxkwJ/WSHG8fRHZ/y7d0pYsakI9qsd52VgP tejwtNLVb3mMc0dvMGWuWMSZ0mWxwS9FZOd7YwrRCFQcsoDZe6Vwctm3PWmHzmBF6xsdkQ J7tl72T0T3GsHejWBzMqGPqFuBl1udjN0ZXo7z9VRh9APIFsI8ZFopE30/Rurg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4jJjHx3kjZz1PDw for ; Tue, 03 Nov 2026 09:02:05 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 44d06 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 03 Nov 2026 09:02:05 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: ae5ad9c6a79b - stable/15 - amd64: do not allow to set IOPL to 3 when FRED is used List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org List-Id: Commits to the stable branches of the FreeBSD src repository List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: ae5ad9c6a79b29b7092323b3bc284fa3f21c213d Auto-Submitted: auto-generated Date: Tue, 03 Nov 2026 09:02:05 +0000 Message-Id: <6ae9a30d.44d06.17553ae0@gitrepo.freebsd.org> The branch stable/15 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=ae5ad9c6a79b29b7092323b3bc284fa3f21c213d commit ae5ad9c6a79b29b7092323b3bc284fa3f21c213d Author: Konstantin Belousov AuthorDate: 2026-10-27 09:10:09 +0000 Commit: Konstantin Belousov CommitDate: 2026-11-03 09:01:14 +0000 amd64: do not allow to set IOPL to 3 when FRED is used (cherry picked from commit 5bc997b6f5b1265ff28d11405eb980bf471c3db4) --- sys/amd64/amd64/io.c | 16 ++++++++++++---- sys/amd64/linux/linux_machdep.c | 3 +++ sys/amd64/linux32/linux32_machdep.c | 3 +++ sys/dev/syscons/syscons.c | 3 +++ sys/dev/vt/vt_core.c | 3 +++ 5 files changed, 24 insertions(+), 4 deletions(-) diff --git a/sys/amd64/amd64/io.c b/sys/amd64/amd64/io.c index 6c36d5fb20e1..ba34675c0cc5 100644 --- a/sys/amd64/amd64/io.c +++ b/sys/amd64/amd64/io.c @@ -31,21 +31,29 @@ #include #include +#include #include int iodev_open(struct thread *td) { - - td->td_frame->tf_rflags |= PSL_IOPL; + /* + * SDM rev. 93 vol.3 8.4.2.1 Loading and Checking the Return State: + * Checking IOPL ensures that, when FRED transitions are + * enabled, IOPL is always 0 when CPL = 3. + * + * As result, io(4) cannot enable the IOPL for usermode on FRED. + */ + if (!fred) + td->td_frame->tf_rflags |= PSL_IOPL; return (0); } int iodev_close(struct thread *td) { - - td->td_frame->tf_rflags &= ~PSL_IOPL; + if (!fred) + td->td_frame->tf_rflags &= ~PSL_IOPL; return (0); } diff --git a/sys/amd64/linux/linux_machdep.c b/sys/amd64/linux/linux_machdep.c index dc7f55f6f198..e22a3ed22c31 100644 --- a/sys/amd64/linux/linux_machdep.c +++ b/sys/amd64/linux/linux_machdep.c @@ -88,6 +88,9 @@ linux_iopl(struct thread *td, struct linux_iopl_args *args) return (error); if ((error = securelevel_gt(td->td_ucred, 0)) != 0) return (error); + /* See comment in sys/amd64/amd64/io.c. */ + if (fred && args->level != 0) + return (ENOSYS); td->td_frame->tf_rflags = (td->td_frame->tf_rflags & ~PSL_IOPL) | (args->level * (PSL_IOPL / 3)); diff --git a/sys/amd64/linux32/linux32_machdep.c b/sys/amd64/linux32/linux32_machdep.c index a9517b42a4d9..a62965308c33 100644 --- a/sys/amd64/linux32/linux32_machdep.c +++ b/sys/amd64/linux32/linux32_machdep.c @@ -332,6 +332,9 @@ linux_iopl(struct thread *td, struct linux_iopl_args *args) return (error); if ((error = securelevel_gt(td->td_ucred, 0)) != 0) return (error); + /* See comment in sys/amd64/amd64/io.c. */ + if (fred && args->level != 0) + return (ENOSYS); td->td_frame->tf_rflags = (td->td_frame->tf_rflags & ~PSL_IOPL) | (args->level * (PSL_IOPL / 3)); diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c index e9d664f51a1f..29892d4caa92 100644 --- a/sys/dev/syscons/syscons.c +++ b/sys/dev/syscons/syscons.c @@ -72,6 +72,7 @@ #if defined(__i386__) || defined(__amd64__) #include #include +#include #endif #if defined(__amd64__) || defined(__i386__) @@ -1338,6 +1339,8 @@ sctty_ioctl(struct tty *tp, u_long cmd, caddr_t data, struct thread *td) #ifdef __i386__ td->td_frame->tf_eflags |= PSL_IOPL; #elif defined(__amd64__) + if (fred) + return (EINVAL); td->td_frame->tf_rflags |= PSL_IOPL; #endif return 0; diff --git a/sys/dev/vt/vt_core.c b/sys/dev/vt/vt_core.c index 922b44028a23..f28515b0771a 100644 --- a/sys/dev/vt/vt_core.c +++ b/sys/dev/vt/vt_core.c @@ -61,6 +61,7 @@ #if defined(__i386__) || defined(__amd64__) #include #include +#include #endif static int vtterm_cngrab_noswitch(struct vt_device *, struct vt_window *); @@ -2937,6 +2938,8 @@ skip_thunk: #if defined(__i386__) td->td_frame->tf_eflags |= PSL_IOPL; #elif defined(__amd64__) + if (fred) + return (EINVAL); td->td_frame->tf_rflags |= PSL_IOPL; #endif return (0);