41 lines
1.4 KiB
Diff
41 lines
1.4 KiB
Diff
|
From 0fcdbacd8b06c24f5761a0cf9cb0c43cad05c19b Mon Sep 17 00:00:00 2001
|
||
|
From: Thomas Watson <twatson52@icloud.com>
|
||
|
Date: Mon, 26 Feb 2024 19:51:12 -0600
|
||
|
Subject: [PATCH] fs/fcntl: accept more values as F_DUPFD_CLOEXEC args
|
||
|
|
||
|
libwebrtc doesn't pass anything as the arg to this function so the
|
||
|
minimum fd ends up as random garbage. If it's bigger than the maximum
|
||
|
fd, which is likely, then the duplication fails, and libwebrtc breaks.
|
||
|
|
||
|
The previous patch (081abc5fa701738699705a6c0a41c824df77cb37) rejects
|
||
|
args >= 1024 (the default soft max fd) and instead subtitutes a minimum
|
||
|
fd of 0 to allow such requests to succeed.
|
||
|
|
||
|
However, gnulib's test suite can pass the following values and expects
|
||
|
them to fail; this patch prevents those from succeeding:
|
||
|
* -1 (hard-coded)
|
||
|
* 1024 (`ulimit -n` value by default)
|
||
|
* 1048576 (`ulimit -n` value in Nix build sandbox)
|
||
|
|
||
|
Hopefully the garbage values libwebrtc passes do not match very often.
|
||
|
---
|
||
|
fs/fcntl.c | 2 +-
|
||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/fs/fcntl.c b/fs/fcntl.c
|
||
|
index f18f87419445..65a6861476ec 100644
|
||
|
--- a/fs/fcntl.c
|
||
|
+++ b/fs/fcntl.c
|
||
|
@@ -326,7 +326,7 @@ static long do_fcntl(int fd, unsigned int cmd, unsigned long arg,
|
||
|
err = f_dupfd(argi, filp, 0);
|
||
|
break;
|
||
|
case F_DUPFD_CLOEXEC:
|
||
|
- if (arg >= 1024)
|
||
|
+ if ((arg > 1024) && (argi != 1048576) && (argi != -1))
|
||
|
argi = 0; /* Lol libwebrtc */
|
||
|
err = f_dupfd(argi, filp, O_CLOEXEC);
|
||
|
break;
|
||
|
--
|
||
|
2.43.0
|
||
|
|