From 0fcdbacd8b06c24f5761a0cf9cb0c43cad05c19b Mon Sep 17 00:00:00 2001 From: Thomas Watson 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