1. 05 Dec, 2014 1 commit
  2. 03 Dec, 2014 1 commit
    • Vamsikrishna Bhagi's avatar
      Bug #19688008 CREATE_ASYMMETRIC_PUB_KEY: CRASHES IN OPENSSL · cb9d0deb
      Vamsikrishna Bhagi authored
                    CODE
      
      Problem: UDF doesn't handle the arguments properly when they
               are of string type due to a misplaced break.
               The length of arguments is also not set properly
               when the argument is NULL.
      
      Solution: Fixed the code by putting the break at right place
                and setting the argument length to zero when the
                argument is NULL.
      cb9d0deb
  3. 28 Nov, 2014 2 commits
  4. 26 Nov, 2014 1 commit
    • V S Murthy Sidagam's avatar
      Bug #16869534 QUERYING SUBSET OF COLUMNS DOESN'T USE TABLE CACHE; OPENED_TABLES I · aed8369e
      V S Murthy Sidagam authored
      Description: When querying a subset of columns from the information_schema.TABLES
      
      Analysis: When information about tables is collected for statements like
      "SELECT ENGINE FROM I_S.TABLES" we do not perform full-blown table opens
      in SE, instead we only use information from table shares from the Table
      Definition Cache or .FRMs. Still in order to simplify I_S implementation
      mock TABLE objects are created from TABLE_SHARE during this process.
      This is done by calling open_table_from_share() function with special
      arguments. Since this function always increments "Opened_tables" counter,
      calls to it can be mistakingly interpreted as full-blown table opens in SE.
      
      Note that claim that "'SELECT ENGINE FROM I_S.TABLES' statement doesn't
      use Table Cache" is nevertheless factually correct. But it misses the
      point, since such statements a) don't use full-blown TABLE objects and
      therefore don't do table opens b) still use Table Definition Cache.
      
      Fix: We are now incrementing the counter when db_stat(i.e open flags for ha_open(
      
      we have considered an optimization which would use TABLE objects from
      Table Cache when available instead of constructing mock TABLE objects,
      but found it too intrusive for stable releases.
      aed8369e
  5. 24 Nov, 2014 1 commit
    • Nisha Gopalakrishnan's avatar
      BUG#11747548: DETECT ORPHAN TEMP-POOL FILES, AND HANDLE GRACEFULLY · 5a587b6d
      Nisha Gopalakrishnan authored
      Analysis:
      --------
      Certain queries using intrinsic temporary tables may fail due to
      name clashes in the file name for the temporary table when the
      'temp-pool' enabled.
      
      'temp-pool' tries to reduce the number of different filenames used for
      temp tables by allocating them from small pool in order to avoid
      problems in the Linux kernel by using a three part filename:
      <tmp_file_prefix>_<pid>_<temp_pool_slot_num>.
      The bit corresponding to the temp_pool_slot_num is set in the bit
      map maintained for the temp-pool when it used for the file name.
      It is cleared after the temp table is deleted for re-use.
      
      The 'create_tmp_table()' function call under error condition
      tries to clear the same bit twice by calling 'free_tmp_table()'
      and 'bitmap_lock_clear_bit()'. 'free_tmp_table()' does a delete
      of the table/file and clears the bit by calling the same function
      'bitmap_lock_clear_bit()'.
      
      The issue reported can be triggered under the timing window mentioned
      below for an error condition while creating the temp table:
      a) THD1: Due to an error clears the temp pool slot number used by it
         by calling 'free_tmp_table'.
      b) THD2: In the process of creating the temp table by using an unused
         slot number in the bit map.
      c) THD1: Clears the slot number used THD2 by calling
        'bitmap_lock_clear_bit()' after completing the call 'free_tmp_table'.
      d) THD3: Uses the slot number used the THD2 since it is freed by THD1.
         When it tries to create the temp file using that slot number,
         an error is reported since it is currently in use by THD2.
         [The error: Error 'Can't create/write to file
         '/tmp/#sql_277e_0.MYD' (Errcode: 17)']
      
      Another issue which may occur in 5.6 and trunk is that:
      When the open temporary table fails after its creation(due to ulimit
      or OOM error), the file is not deleted. Thus further attempts to use
      the same slot number in the 'temp-pool' results in failure.
      
      Fix:
      ---
      a) Under the error condition calling the 'bitmap_lock_clear_bit()'
         function to clear the bit is unnecessary since 'free_tmp_table()'
         deletes the table/file and clears the bit. Hence removed the
         redundant call 'bitmap_lock_clear_bit()' in 'create_tmp_table()'
         This prevents the timing window under which the issue reported
         can be seen.
      
      b) If open of the temporary table fails, then the file is deleted
         thus allowing the temp-pool slot number to be utilized for the
         subsequent temporary table creation.
      
      c) Also if the attempt to create temp table fails since it already
         exists, the temp-pool slot for it is marked as used, to avoid
         the problem from re-appearing.
      5a587b6d
  6. 17 Nov, 2014 1 commit
  7. 12 Nov, 2014 1 commit
  8. 11 Nov, 2014 2 commits
  9. 10 Nov, 2014 1 commit
    • Arun Kuruvila's avatar
      Bug#17599258:- ERROR 1160 (08S01): GOT AN ERROR WRITING · a9b61b00
      Arun Kuruvila authored
                     COMMUNICATION PACKETS; FEDERATED TABLE
      
      Description:- Execution of FLUSH TABLES on a federated
      table which has been idle for wait_timeout (on the remote
      server) + tcp_keepalive_time, fails with an error,
      "ERROR 1160 (08S01): Got an error writing communication
      packets."
      
      Analysis:- During FLUSH TABLE execution the federated
      table is closed which will inturn close the federated
      connection. While closing the connection, federated server
      tries to communincate with the remote server. Since the
      connection was idle for wait_timeout(on the remote server)+
      tcp_keepalive_time, the socket gets closed. So this
      communication fails because of broken pipe and the error is
      thrown. But federated connections are expected to reconnect
      silently. And also it cannot reconnect because the 
      "auto_reconnect" variable is set to 0 in "mysql_close()".
      
      Fix:- Before closing the federated connection, in
      "ha_federated_close()", a check is added which will verify
      wheather the connection is alive or not. If the connection
      is not alive, then "mysql->net.error" is set to 2 which
      will indicate that the connetion is broken. Also the
      setting of "auto_reconnect" variable to 0 is delayed and is
      done after "COM_QUIT" command.
            
      NOTE:- For reproducing this issue, "tcp_keepalive_time" has
      to be set to a smaller value. This value is set in the
      "/proc/sys/net/ipv4/tcp_keepalive_time" file in Unix
      systems. So we need root permission for changing it, which
      can't be done through mtr test. So submitting the patch
      without mtr test.
      a9b61b00
  10. 06 Nov, 2014 2 commits
    • Jon Olav Hauglid's avatar
      Bug#19974500: SERVER 5.5 / DEBUG DOESN\'T COMPILE WITH GCC 4.9.1 · 5a59bf7a
      Jon Olav Hauglid authored
      Fix broken gcc 4.9.1 debug build by removing end of line noise.
      
      In 5.6+ this issue was already fixed by:
      ------------------------------------------------------------
      revno: 3091
      committer: Davi Arnaut <davi.arnaut@oracle.com>
      branch nick: mysql-trunk
      timestamp: Mon 2011-05-16 11:30:54 -0300
      message:
        Fix warnings emitted by Clang.
      5a59bf7a
    • Kent Boortz's avatar
      Bug #18957951 RPMBUILD DEPENDENCY SCANNER ADDS DEPENDENCY ON NON-EXISTING PERL "HOSTNAMES" · bd7e5aba
      Kent Boortz authored
      When building RPMs and using the "rpmbuild" automatic scanning for
      Perl dependencies, it might interpret "use hostnames" in the
      "mysql_config.pl" script usage comment as a Perl "use" statement.
      And then makes the resulting RPMs depends on a non-existing module
      Perl "hostnames". The comment was changed to prevent this.
      bd7e5aba
  11. 04 Nov, 2014 2 commits
  12. 03 Nov, 2014 2 commits
  13. 30 Oct, 2014 1 commit
  14. 29 Oct, 2014 1 commit
    • Annamalai Gurusami's avatar
      Bug #19908343 SERVER CRASHES WHEN EXECUTING ALTER TABLE · 42742426
      Annamalai Gurusami authored
      Problem:
      
      In the function dict_foreign_remove_from_cache(), the rb tree was updated
      without actually verifying whether the given foreign key object is there in the
      rb tree or not.  There can be an existing foreign key object with the same id 
      in the rb tree, which must not be removed.  Such a scenario comes when an
      attempt is made to add a foreign key object with a duplicate identifier.
      
      Solution:
      
      When the foreign key object is removed from the dictionary cache, ensure
      that the foreign key object removed from the rbt is the correct one.
      
      rb#7168 approved by Jimmy and Marko.
      42742426
  15. 27 Oct, 2014 1 commit
    • Marko Makela's avatar
      Bug#19584379 Reporting corruption may corrupt the innodb data dictionary · 352b6bc9
      Marko Makela authored
      dict_set_corrupted(): Use the canonical way of searching for
      less-than-equal (PAGE_CUR_LE) and then checking low_match.
      
      The code that was introduced in MySQL 5.5.17 in
          Bug#11830883 SUPPORT "CORRUPTED" BIT FOR INNODB TABLES AND INDEXES
      could position the cursor on the page supremum, and then attempt
      to overwrite non-existing 7th field of the 1-field supremum record.
      
      Approved by Jimmy Yang
      352b6bc9
  16. 23 Oct, 2014 1 commit
  17. 21 Oct, 2014 3 commits
  18. 20 Oct, 2014 1 commit
  19. 17 Oct, 2014 1 commit
    • Arun Kuruvila's avatar
      Bug #14486004 MYSQL_SETPERMISSION DOES NOT QUOTE USER NAMES · bb14cc03
      Arun Kuruvila authored
      Description: Certain operations using the client tool
      'mysql\_setpermisson' which uses username of the format 
      "xxx-yyy" results in a syntax error.
      
      Analysis: The user name variable ( $user ) was not quoted
      properly in the 'mysql\_setpermission' script. As a result,
      while granting user privileges for a user with username of
      the format 'xxx-yyy', results in a syntax error.
      
      Fix: The escape sequence has been applied for the user
      variable in the script file.
      
      Note: Test case is not added for this fix.
      'mysql\_setpermission' executable resides in different
      directories on pb2 machines and on local boxes. Hence the 
      test case cannot be made generic.
      bb14cc03
  20. 13 Oct, 2014 1 commit
    • Jon Olav Hauglid's avatar
      Bug#17633291: SET PROPER COMPILE OPTIONS FOR CLANG · 8b64f825
      Jon Olav Hauglid authored
      Bug#17959689: MAKE GCC AND CLANG GIVE CONSISTENT COMPILATION WARNINGS
      Bug#18313717: ENABLE -WERROR IN MAINTANER MODE WHEN COMPILING WITH CLANG
      Bug#18510941: REMOVE CMAKE WORKAROUNDS FOR OLDER VERSIONS OF OS X/XCODE
        
      Backport from mysql-5.6 to mysql-5.5
      8b64f825
  21. 08 Oct, 2014 2 commits
    • Venkatesh Duggirala's avatar
      Bug #18808072 MYSQLBINLOG USES LOCALTIME() TO PRINT EVENTS, CAUSES KERNEL MUTEX CONTENTION · a3cc647d
      Venkatesh Duggirala authored
      Problem: For every event read, mysqlbinlog calls localtime() which in turn
      calls stat(/etc/localtime) which is causing kernel mutex contention.
      
      Analysis and Fix:
      localtime() calls stat(/etc/localtime) for every instance of the call
      where as localtime_r() the reentrant version was optimized to store
      the read only tz internal structure. Hence it will not call
      stat(/etc/localtime). It will call only once at the beginning.
      The mysql server is calling localtime_r() and mysqlbinlog tool is
      one place where we are still using localtime().
      
      Once the process (mysqlbinlog) is started if timezone is changed
      it will be not picked up the the process and it will continue
      with the same values as the beginning of the process. This
      behavior is in-lined with mysql server.
      
      Also adding localtime_r() and gmtime_r() support for windows.
      a3cc647d
    • Sujatha Sivakumar's avatar
      Bug#19145698: READ OUT OF BOUNDS ISSUE · 0d0c59ff
      Sujatha Sivakumar authored
      Problem:
      ========
      In a master slave replication if a slave receives a
      Start_log_event_v3 the payload is expected to be of fixed
      size. If a payload which is smaller than the fixed size is
      received it causes a read out of bounds issue.
      
      Analysis:
      ========
      According to documentation the fixed data part of
      Start_log_event_v3 looks as shown below.
      
      2 bytes: The binary log format version
      50 bytes: The MySQL server's version
      4 bytes: Timestamp in seconds when this event was created
      
      Since the payload is expected to be of fixed size, therefore
      ST_SERVER_VER_LEN (50) bytes are memcpy'ed into
      server_version. But if a malicious master sends a shorter
      payload it causes a read out of bounds issue.
      
      Fix:
      ===
      In Start_log_event_v3 event's constructor a check has been
      added which expects the minimum payload length to be of size
      common_header_len + ST_COMMON_HEADER_LEN_OFFSET bytes. If a
      malicious packet of lesser length is received it will be
      considered as an invalid event.
      0d0c59ff
  22. 06 Oct, 2014 1 commit
  23. 02 Oct, 2014 1 commit
  24. 29 Sep, 2014 1 commit
  25. 26 Sep, 2014 1 commit
  26. 24 Sep, 2014 1 commit
    • Bill Qu's avatar
      Bug #15868071 USING SET GLOBAL SQL_LOG_BIN SHOULD NOT BE ALLOWED · 5693b1e4
      Bill Qu authored
      Normally, SET SESSION SQL_LOG_BIN is used by DBAs to run a
      non-conflicting command locally only, ensuring it does not
      get replicated.
      Setting GLOBAL SQL_LOG_BIN would not require all sessions to
      disconnect. When SQL_LOG_BIN is changed globally, it does not
      immediately take effect for any sessions. It takes effect by
      becoming the session-level default inherited at the start of
      each new session, and this setting is kept and cached for the
      duration of that session. Setting it intentionally is unlikely
      to have a useful effect under any circumstance; setting it
      unintentionally, such as while intending to use SET [SESSION]
      is potentially disastrous. Accidentally using SET GLOBAL
      SQL_LOG_BIN will not show an immediate effect to the user,
      instead not having the desired session-level effect, and thus
      causing other potential problems with local-only maintenance
      being binlogged and executed on slaves; And transactions from
      new sessions (after SQL_LOG_BIN is changed globally) are not
      binlogged and replicated, which would result in irrecoverable
      or difficult data loss.
      This is the regular GLOBAL variables way to work, but in
      replication context it does not look right on a working server
      (with connected sessions) 'set global sql_log_bin' and none of
      that connections is affected. Unexperienced DBA after noticing
      that the command did "nothing" will change the session var and
      most probably won't unset the global var, causing new sessions
      to not be binlog.
      Setting GLOBAL SQL_LOG_BIN allows DBA to stop binlogging on all
      new sessions, which can be used to make a server "replication
      read-only" without restarting the server. But this has such big
      requirements, stop all existing connections, that it is more
      likely to make a mess, it is too risky to allow the GLOBAL variable.
      
      The statement 'SET GLOBAL SQL_LOG_BIN=N' will produce an error
      in 5.5, 5.6 and 5.7. Reading the GLOBAL SQL_LOG_BIN will produce
      a deprecation warning in 5.7.
      5693b1e4
  27. 23 Sep, 2014 1 commit
  28. 18 Sep, 2014 1 commit
    • Annamalai Gurusami's avatar
      Bug #19306524 FAILING ASSERTION WITH TEMP TABLE FOR A PROCEDURE CALLED · db78f29b
      Annamalai Gurusami authored
      FROM A FUNCTION
      
      Scenario:
      
      In a stored procedure, CREATE TABLE statement is not allowed.  But an
      exception is provided for CREATE TEMPORARY TABLE.  We can create a temporary
      table in a stored procedure.
      
      Let there be two stored functions f1 and f2 and two stored procedures p1 and
      p2.  Their properties are as follows:
      
      . stored function f1() calls stored procedure p1().
      . stored function f2() calls stored procedure p2().
      . stored procedure p1() creates temporary table t1.
      . stored procedure p2() does DML on t1.
      
      Consider the following situation:
      
      1.  Autocommit mode is on. 
      2.  select f1()
      3.  select f2()
      
      Step 2:  In this step, t1 would be created via p1().  A table level transaction
      lock would have been taken.  The ::external_lock() would not have been called
      on this table.  At the end of step 2, because of autocommit mode on, this table
      level lock will be released.
      
      Step 3:  When we execute DML on table t1 via p2() we have two problems:
      
      Problem 1:
      
      The function ha_innobase::external_lock() would have been called but since
      it is a select query no table level locks would have been taken.  Hence the
      following assert will fail:
      
      ut_ad(lock_table_has(thr_get_trx(thr), index->table, LOCK_IX));
      
      Solution:
      
      The solution would be to identify this situation and take a table level lock
      and use the proper lock type prebuilt->select_lock_type = LOCK_X for DML
      operations.
      
      Problem 2:
      
      Another problem is that in step 3, ha_innobase::open() is never called on
      the table t1.  
      
      Solution:
      
      The solution would be to identify this situation and call re-init the handler
      of table t1.
      
      rb#6429 approved by Krunal.
      db78f29b
  29. 17 Sep, 2014 1 commit
    • Annamalai Gurusami's avatar
      Bug #17852083 PRINT A WARNING WHEN DDL HAS AN ERROR IN INNODB_STRICT_MODE = 1 · 44fd241a
      Annamalai Gurusami authored
      Problem:
      
      Creation of a table fails when innodb_strict_mode is enabled, but the same
      table is created without any warning when innodb_strict_mode is enabled.
      
      Solution:
      
      If creation of a table fails with an error when innodb_strict_mode is
      enabled, it must issue a warning when innodb_strict_mode is disabled.
      
      rb#6723 approved by Krunal.
      44fd241a
  30. 16 Sep, 2014 1 commit
    • Praveenkumar Hulakund's avatar
      Bug#19070633 - POSSIBLE ACCESS TO FREED MEMORY IN IS_FREE_LOCK() · 508c74ac
      Praveenkumar Hulakund authored
                      AND IS_USED_LOCK().
      
      Analysis:
      -----------
      In functions Item_func_is_free_lock::val_int() and 
      Item_func_is_used_lock::val_int(), for the specified user lock
      name, pointer to its "User_level_lock" object is obtained from hash
      "hash_user_locks". Mutex "LOCK_user_locks" is acquired for this
      and released immediately. And we are accessing members of
      User_level_lock after releasing the mutex. If same user lock is
      deleted(released) from concurrent thread then accessing members
      results in invalid(freed) memory access issue.
      
      Deleting of user lock is also protected from the mutex
      "LOCK_user_locks". Since this mutex is released in "val_int" 
      functions mentioned above, delete operation proceeds while concurrent
      thread tries to access its members.
      
      With the test case, valgrind reports invalid read issues in val_int
      functions.
      
      Fix:
      -----------
      To fix this issue, in "val_int" function of classes
      "Item_func_is_free_lock" and "Item_func_is_used_lock", now releasing
      mutex "LOCK_user_locks" after accessing User_level_lock members.
      508c74ac
  31. 11 Sep, 2014 2 commits