diff --git a/CVE-2015-3202.patch b/CVE-2015-3202.patch index 2bd930b..6e5cf08 100644 --- a/CVE-2015-3202.patch +++ b/CVE-2015-3202.patch @@ -1,55 +1,80 @@ - lib/mount_util.c | 23 +++++++++++++++++------ - 1 file changed, 17 insertions(+), 6 deletions(-) - ---- a/lib/mount_util.c -+++ b/lib/mount_util.c -@@ -97,10 +97,12 @@ static int add_mount(const char *prognam - goto out_restore; - } - if (res == 0) { -+ char *env = NULL; +--- ntfs-3g_ntfsprogs-2015.3.14/libfuse-lite/mount_util.c.ref 2015-03-14 15:10:12.000000000 +0100 ++++ ntfs-3g_ntfsprogs-2015.3.14/libfuse-lite/mount_util.c 2015-05-18 11:02:50.330654300 +0200 +@@ -66,6 +66,7 @@ + return -1; + } + if (res == 0) { ++ char *env = NULL; + char templ[] = "/tmp/fusermountXXXXXX"; + char *tmp; + +@@ -87,8 +88,8 @@ + exit(1); + } + rmdir(tmp); +- execl("/sbin/mount", "/sbin/mount", "-F", type, "-o", opts, +- fsname, mnt, NULL); ++ execle("/sbin/mount", "/sbin/mount", "-F", type, "-o", opts, ++ fsname, mnt, NULL, &env); + fprintf(stderr, "%s: failed to execute /sbin/mount: %s\n", progname, + strerror(errno)); + exit(1); +@@ -120,9 +121,16 @@ + return -1; + } + if (res == 0) { ++ char *env = NULL; + - sigprocmask(SIG_SETMASK, &oldmask, NULL); - setuid(geteuid()); -- execl("/bin/mount", "/bin/mount", "--no-canonicalize", "-i", -- "-f", "-t", type, "-o", opts, fsname, mnt, NULL); -+ execle("/bin/mount", "/bin/mount", "--no-canonicalize", "-i", -+ "-f", "-t", type, "-o", opts, fsname, mnt, NULL, &env); - fprintf(stderr, "%s: failed to execute /bin/mount: %s\n", - progname, strerror(errno)); - exit(1); -@@ -148,10 +150,17 @@ static int exec_umount(const char *progn - goto out_restore; - } - if (res == 0) { -+ char *env = NULL; + setuid(geteuid()); +- execl("/sbin/umount", "/sbin/umount", !lazy ? "-f" : NULL, mnt, +- NULL); ++ if (lazy) { ++ execle("/sbin/umount", "/sbin/umount", mnt, ++ NULL, &env); ++ } else { ++ execle("/sbin/umount", "/sbin/umount", "-f", mnt, ++ NULL, &env); ++ } + fprintf(stderr, "%s: failed to execute /sbin/umount: %s\n", progname, + strerror(errno)); + exit(1); +@@ -302,6 +310,7 @@ + return 0; + } + if (res == 0) { ++ char *env = NULL; + char templ[] = "/tmp/fusermountXXXXXX"; + char *tmp; + +@@ -325,8 +334,8 @@ + exit(1); + } + rmdir(tmp); +- execl("/bin/mount", "/bin/mount", "-i", "-f", "-t", type, "-o", opts, +- fsname, mnt, NULL); ++ execle("/bin/mount", "/bin/mount", "-i", "-f", "-t", type, "-o", opts, ++ fsname, mnt, NULL, &env); + fprintf(stderr, "%s: failed to execute /bin/mount: %s\n", progname, + strerror(errno)); + exit(1); +@@ -353,11 +362,18 @@ + return -1; + } + if (res == 0) { ++ char *env = NULL; + - sigprocmask(SIG_SETMASK, &oldmask, NULL); - setuid(geteuid()); -- execl("/bin/umount", "/bin/umount", "-i", rel_mnt, -- lazy ? "-l" : NULL, NULL); -+ if (lazy) { -+ execle("/bin/umount", "/bin/umount", "-i", rel_mnt, -+ "-l", NULL, &env); -+ } else { -+ execle("/bin/umount", "/bin/umount", "-i", rel_mnt, -+ NULL, &env); -+ } - fprintf(stderr, "%s: failed to execute /bin/umount: %s\n", - progname, strerror(errno)); - exit(1); -@@ -207,10 +216,12 @@ static int remove_mount(const char *prog - goto out_restore; - } - if (res == 0) { -+ char *env = NULL; -+ - sigprocmask(SIG_SETMASK, &oldmask, NULL); - setuid(geteuid()); -- execl("/bin/umount", "/bin/umount", "--no-canonicalize", "-i", -- "--fake", mnt, NULL); -+ execle("/bin/umount", "/bin/umount", "--no-canonicalize", "-i", -+ "--fake", mnt, NULL, &env); - fprintf(stderr, "%s: failed to execute /bin/umount: %s\n", - progname, strerror(errno)); - exit(1); \ No newline at end of file + if (setuid(geteuid())) + fprintf(stderr, "%s: failed to setuid : %s\n", progname, + strerror(errno)); +- execl("/bin/umount", "/bin/umount", "-i", mnt, lazy ? "-l" : NULL, +- NULL); ++ if (lazy) { ++ execle("/bin/umount", "/bin/umount", "-i", mnt, "-l", ++ NULL, &env); ++ } else { ++ execle("/bin/umount", "/bin/umount", "-i", mnt, ++ NULL, &env); ++ } + fprintf(stderr, "%s: failed to execute /bin/umount: %s\n", progname, + strerror(errno)); + exit(1);