Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=frugalware-current.git;a=commitdiff;h=261ff6cff9e80294d4ebe9a3a70c007fc15b4c23

commit 261ff6cff9e80294d4ebe9a3a70c007fc15b4c23
Author: kikadf <[email protected]>
Date:   Thu Mar 13 09:51:57 2014 +0100

icedtea-web-1.4.1-2-x86_64

* Fix CVE-2013-6493

diff --git a/source/xapps/icedtea-web/CVE-2013-6493.patch 
b/source/xapps/icedtea-web/CVE-2013-6493.patch
new file mode 100644
index 0000000..cbfef36
--- /dev/null
+++ b/source/xapps/icedtea-web/CVE-2013-6493.patch
@@ -0,0 +1,246 @@
+Description: fix info disclosure via insecure temporary directory use
+Origin: backport, 
http://icedtea.classpath.org/hg/release/icedtea-web-1.4/rev/35f4d27451fd
+Origin: backport, 
http://icedtea.classpath.org/hg/release/icedtea-web-1.4/rev/1ae3613c82f2
+Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2013-6493
+
+Index: icedtea-web-1.4.1/plugin/icedteanp/IcedTeaNPPlugin.cc
+===================================================================
+--- icedtea-web-1.4.1.orig/plugin/icedteanp/IcedTeaNPPlugin.cc 2014-03-04 
14:51:03.000000000 -0500
++++ icedtea-web-1.4.1/plugin/icedteanp/IcedTeaNPPlugin.cc      2014-03-04 
14:55:00.683576417 -0500
+@@ -38,6 +38,9 @@
+
+ // System includes.
+ #include <dlfcn.h>
++#include <unistd.h>
++#include <fcntl.h>
++#include <dirent.h>
+ #include <errno.h>
+ #include <libgen.h>
+ #include <stdio.h>
+@@ -133,6 +136,7 @@
+
+ // Data directory for plugin.
+ static std::string data_directory;
++static DIR *data_directory_descriptor;
+
+ // Fully-qualified appletviewer default  executable and rt.jar
+ static const char* appletviewer_default_executable = ICEDTEA_WEB_JRE 
"/bin/java";
+@@ -206,7 +210,7 @@
+ NPError get_cookie_info(const char* siteAddr, char** cookieString, uint32_t* 
len);
+ NPError get_proxy_info(const char* siteAddr, char** proxy, uint32_t* len);
+ void consume_message(gchar* message);
+-void start_jvm_if_needed();
++NPError start_jvm_if_needed();
+ static void appletviewer_monitor(GPid pid, gint status, gpointer data);
+ void plugin_send_initialization_message(char* instance, gulong handle,
+                                                int width, int height,
+@@ -281,7 +285,21 @@
+       return appletviewer_default_rtjar;
+ }
+
+-
++static void cleanUpDir(){
++  //free data_directory descriptor
++  if (data_directory_descriptor != NULL) {
++    closedir(data_directory_descriptor);
++  }
++  //clean up pipes directory
++  PLUGIN_DEBUG ("Removing runtime directory %s \n", data_directory.c_str());
++  int removed = rmdir(data_directory.c_str());
++  if (removed != 0) {
++    PLUGIN_ERROR_THREE ("Failed to remove runtime directory %s, because of  
%s \n", data_directory.c_str(), strerror(errno));
++  } else {
++    PLUGIN_DEBUG ("Removed runtime directory %s \n", data_directory.c_str());
++  }
++  data_directory_descriptor = NULL;
++}
+ /*
+  * Find first member in GHashTable* depending on version of glib
+  */
+@@ -346,6 +364,7 @@
+   gchar* cookie_info = NULL;
+
+   NPObject* npPluginObj = NULL;
++  NPError startup_error = NPERR_NO_ERROR;
+
+   if (!instance)
+     {
+@@ -364,7 +383,7 @@
+     }
+
+   // start the jvm if needed
+-  start_jvm_if_needed();
++  startup_error = start_jvm_if_needed();
+
+   // Initialize data->instance_id.
+   //
+@@ -436,7 +455,7 @@
+ }
+
+ // Starts the JVM if it is not already running
+-void start_jvm_if_needed()
++NPError start_jvm_if_needed()
+ {
+
+   // This is asynchronized function. It must
+@@ -451,7 +470,7 @@
+   if (jvm_up)
+   {
+       PLUGIN_DEBUG("JVM is up. Returning.\n");
+-      return;
++      return  NPERR_NO_ERROR;
+   }
+
+   PLUGIN_DEBUG("No JVM is running. Attempting to start one...\n");
+@@ -619,10 +638,12 @@
+   g_free (in_pipe_name);
+   in_pipe_name = NULL;
+
++  cleanUpDir();
+  done:
+
+   // Now other threads may re-enter.. unlock the mutex
+   g_mutex_unlock(vm_start_mutex);
++  return np_error;
+
+ }
+
+@@ -1899,53 +1920,30 @@
+   // Make sure the plugin data directory exists, creating it if
+   // necessary.
+
+-  const char* tmpdir_env = getenv("TMPDIR");
+-  if (tmpdir_env != NULL && g_file_test (tmpdir_env,
+-                    (GFileTest) (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)))
+-    {
+-      data_directory = tmpdir_env;
+-    }
+-  else if (g_file_test (P_tmpdir,
+-                    (GFileTest) (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)))
+-    {
+-      data_directory = P_tmpdir;
+-    }
+-  else
+-    {
+-      // If TMPDIR and P_tmpdir do not exist, try /tmp directly
+-      data_directory = "/tmp";
+-    }
+-
+-  data_directory += "/icedteaplugin-";
+-  if (getenv("USER") != NULL)
+-      data_directory += getenv("USER");
+-
++  data_directory = IcedTeaPluginUtilities::getRuntimePath() + 
"/icedteaplugin-";
++  if (getenv("USER") != NULL) {
++    data_directory = data_directory + getenv("USER") + "-";
++  }
++  data_directory += "XXXXXX";
+   // Now create a icedteaplugin subdir
+-  if (!g_file_test (data_directory.c_str(),
+-                    (GFileTest) (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)))
+-    {
+-      int file_error = 0;
+-
+-      file_error = g_mkdir (data_directory.c_str(), 0700);
+-      if (file_error != 0)
+-        {
+-          PLUGIN_ERROR_THREE ("Failed to create data directory",
+-                          data_directory.c_str(),
+-                          strerror (errno));
+-          return NPERR_GENERIC_ERROR;
+-        }
+-    }
+-
++  char fileNameX[data_directory.length()+1];
++  std::strcpy (fileNameX, data_directory.c_str());
++  char * fileName = mkdtemp(fileNameX);
++  if (fileName == NULL) {
++    PLUGIN_ERROR_THREE ("Failed to create data directory %s, %s\n",
++                        data_directory.c_str(),
++                        strerror (errno));
++    return NPERR_GENERIC_ERROR;
++  }
++  data_directory = std::string(fileName);
+
+-  // If data directory doesn't exist by this point, bail
+-  if (!g_file_test (data_directory.c_str(),
+-                    (GFileTest) (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)))
+-    {
+-      PLUGIN_ERROR_THREE ("Temp directory does not exist: ",
+-                          data_directory.c_str(),
+-                          strerror (errno));
++  //open uniques icedteaplugin subdir for one single run
++  data_directory_descriptor = opendir(data_directory.c_str());
++  if (data_directory_descriptor == NULL) {
++      PLUGIN_ERROR_THREE ("Failed to open data directory %s %s\n",
++                      data_directory.c_str(), strerror (errno));
+       return NPERR_GENERIC_ERROR;
+-    }
++  }
+
+   // Set appletviewer_executable.
+   PLUGIN_DEBUG("Executing java at %s\n", get_plugin_executable().c_str());
+@@ -2128,6 +2126,8 @@
+   delete plugin_to_java_bus;
+   //delete internal_bus;
+
++  cleanUpDir();
++
+   PLUGIN_DEBUG ("NP_Shutdown return\n");
+
+   return NPERR_NO_ERROR;
+Index: icedtea-web-1.4.1/plugin/icedteanp/IcedTeaPluginUtils.cc
+===================================================================
+--- icedtea-web-1.4.1.orig/plugin/icedteanp/IcedTeaPluginUtils.cc      
2014-03-04 14:51:03.000000000 -0500
++++ icedtea-web-1.4.1/plugin/icedteanp/IcedTeaPluginUtils.cc   2014-03-04 
14:51:39.227571022 -0500
+@@ -1074,6 +1074,36 @@
+ }
+
+
++std::string IcedTeaPluginUtilities::getTmpPath(){
++  const char* tmpdir_env = getenv("TMPDIR");
++  if (tmpdir_env != NULL && g_file_test (tmpdir_env,
++                    (GFileTest) (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)))
++  {
++    return std::string(tmpdir_env);
++  }
++  else if (g_file_test (P_tmpdir,
++                    (GFileTest) (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)))
++  {
++    return std::string(P_tmpdir);
++  }
++  else
++  {
++    // If TMPDIR and P_tmpdir do not exist, try /tmp directly
++    return "/tmp";
++  }
++}
++
++std::string IcedTeaPluginUtilities::getRuntimePath(){
++ const char* rntdir_env = getenv("XDG_RUNTIME_DIR");
++  if (rntdir_env != NULL && g_file_test (rntdir_env,
++                    (GFileTest) (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)))
++  {
++    return std::string(rntdir_env);
++  }
++  return IcedTeaPluginUtilities::getTmpPath();
++}
++
++
+ /******************************************
+  * Begin JavaMessageSender implementation *
+  ******************************************
+Index: icedtea-web-1.4.1/plugin/icedteanp/IcedTeaPluginUtils.h
+===================================================================
+--- icedtea-web-1.4.1.orig/plugin/icedteanp/IcedTeaPluginUtils.h       
2014-03-04 14:51:03.000000000 -0500
++++ icedtea-web-1.4.1/plugin/icedteanp/IcedTeaPluginUtils.h    2014-03-04 
14:51:39.231571022 -0500
+@@ -277,7 +277,8 @@
+         /*cutting whitespaces from end and start of string*/
+         static void trim(std::string& str);
+         static bool file_exists(std::string filename);
+-
++        static std::string getTmpPath();
++        static std::string getRuntimePath();
+ };
+
+ /*
diff --git a/source/xapps/icedtea-web/FrugalBuild 
b/source/xapps/icedtea-web/FrugalBuild
index bb32bbf..8aeafaf 100644
--- a/source/xapps/icedtea-web/FrugalBuild
+++ b/source/xapps/icedtea-web/FrugalBuild
@@ -2,9 +2,11 @@
# Maintainer: Marius Cirsta <[email protected]>
# Contributor: Miklos Vajna <[email protected]>

+options+=('asneeded')
+
pkgname=icedtea-web
pkgver=1.4.1
-pkgrel=1
+pkgrel=2
pkgdesc="Provides a Free Software web browser plugin running applets written in 
Java."
url="http://icedtea.classpath.org/wiki/IcedTea-Web";
depends=('openjre' 'gtk+2')
@@ -16,6 +18,12 @@ up2date="Flasttar 
http://icedtea.classpath.org/download/source/";
source=(http://icedtea.classpath.org/download/source/icedtea-web-$pkgver.tar.gz)
sha1sums=('7118be4d4fcca941e828279f5a2a8f944c0b7ae7')

+# FSA fix ***
+source=(${source[@]} CVE-2013-6493.patch)
+sha1sums=(${sha1sums[@]} 'c8e7238289e0c4c2bb798f85d8bc3df97645de3b')
+# ***********
+
+
build()
{
Fmkdir /usr/lib/jvm/java-7-openjdk/jre/share/icedtea-web
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to