mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* Re: [PATCH] tools/power/x86/intel-speed-select: harden daemon pidfile open
       [not found] <0e8607ca-1275-4ee2-9539-0af0ec17ae90@smtp-relay.sendinblue.com>
@ 2026-04-23 18:44 ` srinivas pandruvada
  0 siblings, 0 replies; 3+ messages in thread
From: srinivas pandruvada @ 2026-04-23 18:44 UTC (permalink / raw)
  To: unknownbbqrx; +Cc: platform-driver-x86, linux-kernel

Thanks for this change.

Capitalize the first letter. here it will be "Harden daemon pidfile
open"

On Thu, 2026-04-23 at 20:16 +0300, unknownbbqrx wrote:
> 
> Avoid symlink-based pidfile clobbering by opening the pidfile with
> O_NOFOLLOW and validating it with fstat() before locking/writing.
> 
> The daemon currently uses a fixed pidfile path under /tmp. A local
> unprivileged user can pre-create a symlink at that path and cause a
> root-run daemon instance to write into an attacker-chosen file.
> 
> Signed-off-by: unknownbbqrx <dev@unknownbbqr.xyz>

Please follow sign-off guidelines
https://docs.kernel.org/process/submitting-patches.html


Thanks,
Srinivas

> ---
>  tools/power/x86/intel-speed-select/isst-daemon.c | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/power/x86/intel-speed-select/isst-daemon.c
> b/tools/power/x86/intel-speed-select/isst-daemon.c
> index 66df21b2b..4346b049d 100644
> --- a/tools/power/x86/intel-speed-select/isst-daemon.c
> +++ b/tools/power/x86/intel-speed-select/isst-daemon.c
> @@ -200,11 +200,21 @@ static void daemonize(char *rundir, char
> *pidfile)
>  	if (ret == -1)
>  		exit(EXIT_FAILURE);
>  
> -	pid_file_handle = open(pidfile, O_RDWR | O_CREAT, 0600);
> +	pid_file_handle = open(pidfile, O_RDWR | O_CREAT |
> O_NOFOLLOW, 0600);
>  	if (pid_file_handle == -1) {
>  		/* Couldn't open lock file */
>  		exit(1);
>  	}
> +
> +	{
> +		struct stat st;
> +
> +		if (fstat(pid_file_handle, &st) == -1)
> +			exit(1);
> +
> +		if (!S_ISREG(st.st_mode))
> +			exit(1);
> +	}
>  	/* Try to lock file */
>  #ifdef LOCKF_SUPPORT
>  	if (lockf(pid_file_handle, F_TLOCK, 0) == -1) {
> 
> base-commit: 2e68039281932e6dc37718a1ea7cbb8e2cda42e6
> prerequisite-patch-id: b61dd51dee390277603975bf729a687113185c3a
> prerequisite-patch-id: df28525061dd528875c7c75880b4684d80f4aa7d

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH] tools/power/x86/intel-speed-select: Harden daemon pidfile open
@ 2026-04-25 17:37 Srinivas Pandruvada
  0 siblings, 0 replies; 3+ messages in thread
From: Srinivas Pandruvada @ 2026-04-25 17:37 UTC (permalink / raw)
  To: hansg, ilpo.jarvinen
  Cc: platform-driver-x86, linux-kernel, Ali Ahmet MEMIS, Srinivas Pandruvada

From: Ali Ahmet MEMIS <dev@unknownbbqr.xyz>

Avoid symlink-based pidfile clobbering by opening the pidfile with
O_NOFOLLOW and validating it with fstat() before locking/writing.

The daemon currently uses a fixed pidfile path under /tmp. A local
unprivileged user can pre-create a symlink at that path and cause a
root-run daemon instance to write into an attacker-chosen file.

Fixes: 7fd786dfbd2c ("tools/power/x86/intel-speed-select: OOB daemon mode")
Signed-off-by: Ali Ahmet MEMIS <dev@unknownbbqr.xyz>
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
---
[Fixed commit message for long lines]

 tools/power/x86/intel-speed-select/isst-daemon.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/tools/power/x86/intel-speed-select/isst-daemon.c b/tools/power/x86/intel-speed-select/isst-daemon.c
index 66df21b2b573..acedb7432849 100644
--- a/tools/power/x86/intel-speed-select/isst-daemon.c
+++ b/tools/power/x86/intel-speed-select/isst-daemon.c
@@ -148,6 +148,7 @@ static void daemonize(char *rundir, char *pidfile)
 {
 	int pid, sid, i;
 	char str[10];
+	struct stat st;
 	struct sigaction sig_actions;
 	sigset_t sig_set;
 	int ret;
@@ -200,11 +201,17 @@ static void daemonize(char *rundir, char *pidfile)
 	if (ret == -1)
 		exit(EXIT_FAILURE);
 
-	pid_file_handle = open(pidfile, O_RDWR | O_CREAT, 0600);
+	pid_file_handle = open(pidfile, O_RDWR | O_CREAT | O_NOFOLLOW, 0600);
 	if (pid_file_handle == -1) {
 		/* Couldn't open lock file */
 		exit(1);
 	}
+
+	if (fstat(pid_file_handle, &st) == -1)
+		exit(1);
+
+	if (!S_ISREG(st.st_mode))
+		exit(1);
 	/* Try to lock file */
 #ifdef LOCKF_SUPPORT
 	if (lockf(pid_file_handle, F_TLOCK, 0) == -1) {
-- 
2.53.0


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH] tools/power/x86/intel-speed-select: harden daemon pidfile open
@ 2026-04-23 17:16 unknownbbqrx
  0 siblings, 0 replies; 3+ messages in thread
From: unknownbbqrx @ 2026-04-23 17:16 UTC (permalink / raw)
  To: srinivas.pandruvada; +Cc: platform-driver-x86, linux-kernel, unknownbbqrx


Avoid symlink-based pidfile clobbering by opening the pidfile with O_NOFOLLOW and validating it with fstat() before locking/writing.

The daemon currently uses a fixed pidfile path under /tmp. A local unprivileged user can pre-create a symlink at that path and cause a root-run daemon instance to write into an attacker-chosen file.

Signed-off-by: unknownbbqrx <dev@unknownbbqr.xyz>
---
 tools/power/x86/intel-speed-select/isst-daemon.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/tools/power/x86/intel-speed-select/isst-daemon.c b/tools/power/x86/intel-speed-select/isst-daemon.c
index 66df21b2b..4346b049d 100644
--- a/tools/power/x86/intel-speed-select/isst-daemon.c
+++ b/tools/power/x86/intel-speed-select/isst-daemon.c
@@ -200,11 +200,21 @@ static void daemonize(char *rundir, char *pidfile)
 	if (ret == -1)
 		exit(EXIT_FAILURE);
 
-	pid_file_handle = open(pidfile, O_RDWR | O_CREAT, 0600);
+	pid_file_handle = open(pidfile, O_RDWR | O_CREAT | O_NOFOLLOW, 0600);
 	if (pid_file_handle == -1) {
 		/* Couldn't open lock file */
 		exit(1);
 	}
+
+	{
+		struct stat st;
+
+		if (fstat(pid_file_handle, &st) == -1)
+			exit(1);
+
+		if (!S_ISREG(st.st_mode))
+			exit(1);
+	}
 	/* Try to lock file */
 #ifdef LOCKF_SUPPORT
 	if (lockf(pid_file_handle, F_TLOCK, 0) == -1) {

base-commit: 2e68039281932e6dc37718a1ea7cbb8e2cda42e6
prerequisite-patch-id: b61dd51dee390277603975bf729a687113185c3a
prerequisite-patch-id: df28525061dd528875c7c75880b4684d80f4aa7d
-- 
2.53.0




^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-04-25 17:37 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <0e8607ca-1275-4ee2-9539-0af0ec17ae90@smtp-relay.sendinblue.com>
2026-04-23 18:44 ` [PATCH] tools/power/x86/intel-speed-select: harden daemon pidfile open srinivas pandruvada
2026-04-25 17:37 [PATCH] tools/power/x86/intel-speed-select: Harden " Srinivas Pandruvada
  -- strict thread matches above, loose matches on Subject: below --
2026-04-23 17:16 [PATCH] tools/power/x86/intel-speed-select: harden " unknownbbqrx

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome