Skip to content

Commit 1373136

Browse files
committed
Make env/arg sanity check failure messages more useful
This change doesn't alter any checks, but it gives more specific errors when a sanity check of env vars or argv does not pass, which can point to limits to raise or at least give us better detailed bug reports. Signed-off-by: Hank Leininger <[email protected]> Bug: #3678 Bug: #3851 Bug: #4633
1 parent 9a81078 commit 1373136

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

src/firejail/main.c

+8-4
Original file line numberDiff line numberDiff line change
@@ -935,6 +935,10 @@ static void run_builder(int argc, char **argv) {
935935
if (setresuid(-1, getuid(), getuid()) != 0)
936936
errExit("setresuid");
937937

938+
if (env_get("LD_PRELOAD") != NULL)
939+
{
940+
fprintf(stderr, "run_builder: LD_PRELOAD is: '%s'\n", env_get("LD_PRELOAD"));
941+
}
938942
assert(env_get("LD_PRELOAD") == NULL);
939943
assert(getenv("LD_PRELOAD") == NULL);
940944
umask(orig_umask);
@@ -1003,18 +1007,18 @@ int main(int argc, char **argv, char **envp) {
10031007
fprintf(stderr, "Error: argv is invalid\n");
10041008
exit(1);
10051009
} else if (argc >= MAX_ARGS) {
1006-
fprintf(stderr, "Error: too many arguments\n");
1010+
fprintf(stderr, "Error: too many arguments: argc (%d) >= MAX_ARGS (%d)\n", argc, MAX_ARGS);
10071011
exit(1);
10081012
}
10091013

10101014
// sanity check for arguments
10111015
for (i = 0; i < argc; i++) {
10121016
if (*argv[i] == 0) {
1013-
fprintf(stderr, "Error: too short arguments\n");
1017+
fprintf(stderr, "Error: too short arguments: argv[%d] is empty\n", i);
10141018
exit(1);
10151019
}
10161020
if (strlen(argv[i]) >= MAX_ARG_LEN) {
1017-
fprintf(stderr, "Error: too long arguments\n");
1021+
fprintf(stderr, "Error: too long arguments: argv[%d] len (%d) >= MAX_ARG_LEN (%d)\n", i, strlen(argv[i]), MAX_ARG_LEN);
10181022
exit(1);
10191023
}
10201024
}
@@ -1025,7 +1029,7 @@ int main(int argc, char **argv, char **envp) {
10251029

10261030
// sanity check for environment variables
10271031
if (i >= MAX_ENVS) {
1028-
fprintf(stderr, "Error: too many environment variables\n");
1032+
fprintf(stderr, "Error: too many environment variables: >= MAX_ENVS (%d)\n", MAX_ENVS);
10291033
exit(1);
10301034
}
10311035

src/firejail/run_symlink.c

+4
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ void run_symlink(int argc, char **argv, int run_as_is) {
7676
a[i + 2] = argv[i + 1];
7777
}
7878
a[i + 2] = NULL;
79+
if (env_get("LD_PRELOAD") != NULL)
80+
{
81+
fprintf(stderr, "run_symlink: LD_PRELOAD is: '%s'\n", env_get("LD_PRELOAD"));
82+
}
7983
assert(env_get("LD_PRELOAD") == NULL);
8084
assert(getenv("LD_PRELOAD") == NULL);
8185
execvp(a[0], a);

0 commit comments

Comments
 (0)