diff options
author | Tobias Stoeckmann <tobias@stoeckmann.org> | 2017-01-06 23:33:16 +0100 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2017-01-08 03:50:56 +0100 |
commit | 95d9a85ca3e662388d5fa7ef1937d1c3fbe2dcd5 (patch) | |
tree | b871fcae903881d5fa4db8a8c3519928a5a89fa2 | |
parent | fd010406c03923065ff9b835472f3f174e1c722d (diff) | |
download | ffmpeg-95d9a85ca3e662388d5fa7ef1937d1c3fbe2dcd5.tar.gz |
ffserver: local OOB write with custom program name
When the command line for children is created, it is assumed that
my_program_name always ends with "ffserver", which doesn't have to
be true if ffserver is called through a symbolic link.
In such a case, it could be that not enough space for "ffmpeg" is
available at the end, leading to a buffer overflow.
One example would be:
$ ln -s /usr/bin/ffserver ~/f; ~/f
As this is only a local buffer overflow, i.e. is based on a weird
program call, this has NO security impact.
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r-- | ffserver.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/ffserver.c b/ffserver.c index 02a583464b..8b819b6934 100644 --- a/ffserver.c +++ b/ffserver.c @@ -495,20 +495,22 @@ static void start_children(FFServerStream *feed) return; } - pathname = av_strdup (my_program_name); + slash = strrchr(my_program_name, '/'); + if (!slash) { + pathname = av_mallocz(sizeof("ffmpeg")); + } else { + pathname = av_mallocz(slash - my_program_name + sizeof("ffmpeg")); + if (pathname != NULL) { + memcpy(pathname, my_program_name, slash - my_program_name); + } + } if (!pathname) { http_log("Could not allocate memory for children cmd line\n"); return; } - /* replace "ffserver" with "ffmpeg" in the path of current - * program. Ignore user provided path */ + /* use "ffmpeg" in the path of current program. Ignore user provided path */ - slash = strrchr(pathname, '/'); - if (!slash) - slash = pathname; - else - slash++; - strcpy(slash, "ffmpeg"); + strcat(pathname, "ffmpeg"); for (; feed; feed = feed->next) { |