Skip to content
Snippets Groups Projects
  1. Jul 01, 2015
    • Tom Lane's avatar
      Fix broken link in documentation. · 49946f2b
      Tom Lane authored
      HP's web server has apparently become case-sensitive sometime recently.
      Per bug #13479 from Daniel Abraham.  Corrected link identified by Alvaro.
      49946f2b
  2. Jun 30, 2015
  3. Jun 27, 2015
  4. Jun 25, 2015
    • Tom Lane's avatar
      Fix the logic for putting relations into the relcache init file. · 88fab18a
      Tom Lane authored
      Commit f3b5565d was a couple of bricks shy
      of a load; specifically, it missed putting pg_trigger_tgrelid_tgname_index
      into the relcache init file, because that index is not used by any
      syscache.  However, we have historically nailed that index into cache for
      performance reasons.  The upshot was that load_relcache_init_file always
      decided that the init file was busted and silently ignored it, resulting
      in a significant hit to backend startup speed.
      
      To fix, reinstantiate RelationIdIsInInitFile() as a wrapper around
      RelationSupportsSysCache(), which can know about additional relations
      that should be in the init file despite being unknown to syscache.c.
      
      Also install some guards against future mistakes of this type: make
      write_relcache_init_file Assert that all nailed relations get written to
      the init file, and make load_relcache_init_file emit a WARNING if it takes
      the "wrong number of nailed relations" exit path.  Now that we remove the
      init files during postmaster startup, that case should never occur in the
      field, even if we are starting a minor-version update that added or removed
      rels from the nailed set.  So the warning shouldn't ever be seen by end
      users, but it will show up in the regression tests if somebody breaks this
      logic.
      
      Back-patch to all supported branches, like the previous commit.
      88fab18a
    • Tom Lane's avatar
      Docs: fix claim that to_char('FM') removes trailing zeroes. · 03655d21
      Tom Lane authored
      Of course, what it removes is leading zeroes.  Seems to have been a thinko
      in commit ffe92d15.  Noted by Hubert Depesz
      Lubaczewski.
      03655d21
  5. Jun 23, 2015
    • Tom Lane's avatar
      Improve inheritance_planner()'s performance for large inheritance sets. · e538e510
      Tom Lane authored
      Commit c03ad560 introduced a planner
      performance regression for UPDATE/DELETE on large inheritance sets.
      It required copying the append_rel_list (which is of size proportional to
      the number of inherited tables) once for each inherited table, thus
      resulting in O(N^2) time and memory consumption.  While it's difficult to
      avoid that in general, the extra work only has to be done for
      append_rel_list entries that actually reference subquery RTEs, which
      inheritance-set entries will not.  So we can buy back essentially all of
      the loss in cases without subqueries in FROM; and even for those, the added
      work is mainly proportional to the number of UNION ALL subqueries.
      
      Back-patch to 9.2, like the previous commit.
      
      Tom Lane and Dean Rasheed, per a complaint from Thomas Munro.
      e538e510
  6. Jun 22, 2015
    • Noah Misch's avatar
      Truncate strings in tarCreateHeader() with strlcpy(), not sprintf(). · 926efeb0
      Noah Misch authored
      This supplements the GNU libc bug #6530 workarounds introduced in commit
      54cd4f04.  On affected systems, a
      tar-format pg_basebackup failed when some filename beneath the data
      directory was not valid character data in the postmaster/walsender
      locale.  Back-patch to 9.1, where pg_basebackup was introduced.  Extant,
      bug-prone conversion specifications receive only ASCII bytes or involve
      low-importance messages.
      926efeb0
  7. Jun 20, 2015
  8. Jun 19, 2015
  9. Jun 15, 2015
  10. Jun 13, 2015
  11. Jun 12, 2015
    • Tom Lane's avatar
      Improve error message and hint for ALTER COLUMN TYPE can't-cast failure. · ae6ae424
      Tom Lane authored
      We already tried to improve this once, but the "improved" text was rather
      off-target if you had provided a USING clause.  Also, it seems helpful
      to provide the exact text of a suggested USING clause, so users can just
      copy-and-paste it when needed.  Per complaint from Keith Rarick and a
      suggestion from Merlin Moncure.
      
      Back-patch to 9.2 where the current wording was adopted.
      ae6ae424
  12. Jun 09, 2015
  13. Jun 08, 2015
    • Andres Freund's avatar
      Allow HotStandbyActiveInReplay() to be called in single user mode. · 18935145
      Andres Freund authored
      HotStandbyActiveInReplay, introduced in 061b079f, only allowed WAL
      replay to happen in the startup process, missing the single user case.
      
      This buglet is fairly harmless as it only causes problems when single
      user mode in an assertion enabled build is used to replay a btree vacuum
      record.
      
      Backpatch to 9.2. 061b079f was backpatched further, but the assertion
      was not.
      18935145
  14. Jun 07, 2015
    • Tom Lane's avatar
      Use a safer method for determining whether relcache init file is stale. · 3e69a73b
      Tom Lane authored
      When we invalidate the relcache entry for a system catalog or index, we
      must also delete the relcache "init file" if the init file contains a copy
      of that rel's entry.  The old way of doing this relied on a specially
      maintained list of the OIDs of relations present in the init file: we made
      the list either when reading the file in, or when writing the file out.
      The problem is that when writing the file out, we included only rels
      present in our local relcache, which might have already suffered some
      deletions due to relcache inval events.  In such cases we correctly decided
      not to overwrite the real init file with incomplete data --- but we still
      used the incomplete initFileRelationIds list for the rest of the current
      session.  This could result in wrong decisions about whether the session's
      own actions require deletion of the init file, potentially allowing an init
      file created by some other concurrent session to be left around even though
      it's been made stale.
      
      Since we don't support changing the schema of a system catalog at runtime,
      the only likely scenario in which this would cause a problem in the field
      involves a "vacuum full" on a catalog concurrently with other activity, and
      even then it's far from easy to provoke.  Remarkably, this has been broken
      since 2002 (in commit 78634044), but we had
      never seen a reproducible test case until recently.  If it did happen in
      the field, the symptoms would probably involve unexpected "cache lookup
      failed" errors to begin with, then "could not open file" failures after the
      next checkpoint, as all accesses to the affected catalog stopped working.
      Recovery would require manually removing the stale "pg_internal.init" file.
      
      To fix, get rid of the initFileRelationIds list, and instead consult
      syscache.c's list of relations used in catalog caches to decide whether a
      relation is included in the init file.  This should be a tad more efficient
      anyway, since we're replacing linear search of a list with ~100 entries
      with a binary search.  It's a bit ugly that the init file contents are now
      so directly tied to the catalog caches, but in practice that won't make
      much difference.
      
      Back-patch to all supported branches.
      3e69a73b
  15. Jun 05, 2015
    • Tom Lane's avatar
      Fix incorrect order of database-locking operations in InitPostgres(). · 04358dab
      Tom Lane authored
      We should set MyProc->databaseId after acquiring the per-database lock,
      not beforehand.  The old way risked deadlock against processes trying to
      copy or delete the target database, since they would first acquire the lock
      and then wait for processes with matching databaseId to exit; that left a
      window wherein an incoming process could set its databaseId and then block
      on the lock, while the other process had the lock and waited in vain for
      the incoming process to exit.
      
      CountOtherDBBackends() would time out and fail after 5 seconds, so this
      just resulted in an unexpected failure not a permanent lockup, but it's
      still annoying when it happens.  A real-world example of a use-case is that
      short-duration connections to a template database should not cause CREATE
      DATABASE to fail.
      
      Doing it in the other order should be fine since the contract has always
      been that processes searching the ProcArray for a database ID must hold the
      relevant per-database lock while searching.  Thus, this actually removes
      the former race condition that required an assumption that storing to
      MyProc->databaseId is atomic.
      
      It's been like this for a long time, so back-patch to all active branches.
      04358dab
  16. Jun 01, 2015
  17. May 29, 2015
    • Tom Lane's avatar
      Remove special cases for ETXTBSY from new fsync'ing logic. · 77642a81
      Tom Lane authored
      The argument that this is a sufficiently-expected case to be silently
      ignored seems pretty thin.  Andres had brought it up back when we were
      still considering that most fsync failures should be hard errors, and it
      probably would be legit not to fail hard for ETXTBSY --- but the same is
      true for EROFS and other cases, which is why we gave up on hard failures.
      ETXTBSY is surely not a normal case, so logging the failure seems fine
      from here.
      77642a81
  18. May 28, 2015
    • Tom Lane's avatar
      Fix fsync-at-startup code to not treat errors as fatal. · aa8377e6
      Tom Lane authored
      Commit 2ce439f3 introduced a rather serious
      regression, namely that if its scan of the data directory came across any
      un-fsync-able files, it would fail and thereby prevent database startup.
      Worse yet, symlinks to such files also caused the problem, which meant that
      crash restart was guaranteed to fail on certain common installations such
      as older Debian.
      
      After discussion, we agreed that (1) failure to start is worse than any
      consequence of not fsync'ing is likely to be, therefore treat all errors
      in this code as nonfatal; (2) we should not chase symlinks other than
      those that are expected to exist, namely pg_xlog/ and tablespace links
      under pg_tblspc/.  The latter restriction avoids possibly fsync'ing a
      much larger part of the filesystem than intended, if the user has left
      random symlinks hanging about in the data directory.
      
      This commit takes care of that and also does some code beautification,
      mainly moving the relevant code into fd.c, which seems a much better place
      for it than xlog.c, and making sure that the conditional compilation for
      the pre_sync_fname pass has something to do with whether pg_flush_data
      works.
      
      I also relocated the call site in xlog.c down a few lines; it seems a
      bit silly to be doing this before ValidateXLOGDirectoryStructure().
      
      The similar logic in initdb.c ought to be made to match this, but that
      change is noncritical and will be dealt with separately.
      
      Back-patch to all active branches, like the prior commit.
      
      Abhijit Menon-Sen and Tom Lane
      aa8377e6
    • Tom Lane's avatar
      Fix pg_get_functiondef() to print a function's LEAKPROOF property. · f3c67aad
      Tom Lane authored
      Seems to have been an oversight in the original leakproofness patch.
      Per report and patch from Jeevan Chalke.
      
      In passing, prettify some awkward leakproof-related code in AlterFunction.
      f3c67aad
    • Tom Lane's avatar
      Fix portability issue in isolationtester grammar. · 44674d07
      Tom Lane authored
      specparse.y and specscanner.l used "string" as a token name.  Now, bison
      likes to define each token name as a macro for the token code it assigns,
      which means those names are basically off-limits for any other use within
      the grammar file or included headers.  So names as generic as "string" are
      dangerous.  This is what was causing the recent failures on protosciurus:
      some versions of Solaris' sys/kstat.h use "string" as a field name.
      With late-model bison we don't see this problem because the token macros
      aren't defined till later (that is why castoroides didn't show the problem
      even though it's on the same machine).  But protosciurus uses bison 1.875
      which defines the token macros up front.
      
      This land mine has been there from day one; we'd have found it sooner
      except that protosciurus wasn't trying to run the isolation tests till
      recently.
      
      To fix, rename the token to "string_literal" which is hopefully less
      likely to collide with names used by system headers.  Back-patch to
      all branches containing the isolation tests.
      44674d07
  19. May 27, 2015
    • Tom Lane's avatar
      Remove configure check prohibiting threaded libpython on OpenBSD. · 1b145712
      Tom Lane authored
      According to recent tests, this case now works fine, so there's no reason
      to reject it anymore.  (Even if there are still some OpenBSD platforms
      in the wild where it doesn't work, removing the check won't break any case
      that worked before.)
      
      We can actually remove the entire test that discovers whether libpython
      is threaded, since without the OpenBSD case there's no need to know that
      at all.
      
      Per report from Davin Potts.  Back-patch to all active branches.
      1b145712
  20. May 24, 2015
    • Tom Lane's avatar
      Rename pg_shdepend.c's typedef "objectType" to SharedDependencyObjectType. · e1f1807c
      Tom Lane authored
      The name objectType is widely used as a field name, and it's pure luck that
      this conflict has not caused pgindent to go crazy before.  It messed up
      pg_audit.c pretty good though.  Since pg_shdepend.c doesn't export this
      typedef and only uses it in three places, changing that seems saner than
      changing the field usages.
      
      Back-patch because we're contemplating using the union of all branch
      typedefs for future pgindent runs, so this won't fix anything if it
      stays the same in back branches.
      e1f1807c
  21. May 22, 2015
    • Tom Lane's avatar
      Back-patch libpq support for TLS versions beyond v1. · b78fbfe6
      Tom Lane authored
      Since 7.3.2, libpq has been coded in such a way that the only SSL protocol
      it would allow was TLS v1.  That approach is looking increasingly obsolete.
      In commit 820f08ca we fixed it to allow TLS >= v1, but did not
      back-patch the change at the time, partly out of caution and partly because
      the question was confused by a contemporary server-side change to reject
      the now-obsolete SSL protocol v3.  9.4 has now been out long enough that
      it seems safe to assume the change is OK; hence, back-patch into 9.0-9.3.
      
      (I also chose to back-patch some relevant comments added by commit
      326e1d73, but did *not* change the server behavior; hence, pre-9.4
      servers will continue to allow SSL v3, even though no remotely modern
      client will request it.)
      
      Per gripe from Jan Bilek.
      b78fbfe6
  22. May 20, 2015
    • Tom Lane's avatar
      Last-minute updates for release notes. · baf379bf
      Tom Lane authored
      Revise description of CVE-2015-3166, in line with scaled-back patch.
      Change release date.
      
      Security: CVE-2015-3166
    • Tom Lane's avatar
      Revert error-throwing wrappers for the printf family of functions. · 221f7a94
      Tom Lane authored
      This reverts commit 16304a01, except
      for its changes in src/port/snprintf.c; as well as commit
      cac18a76 which is no longer needed.
      
      Fujii Masao reported that the previous commit caused failures in psql on
      OS X, since if one exits the pager program early while viewing a query
      result, psql sees an EPIPE error from fprintf --- and the wrapper function
      thought that was reason to panic.  (It's a bit surprising that the same
      does not happen on Linux.)  Further discussion among the security list
      concluded that the risk of other such failures was far too great, and
      that the one-size-fits-all approach to error handling embodied in the
      previous patch is unlikely to be workable.
      
      This leaves us again exposed to the possibility of the type of failure
      envisioned in CVE-2015-3166.  However, that failure mode is strictly
      hypothetical at this point: there is no concrete reason to believe that
      an attacker could trigger information disclosure through the supposed
      mechanism.  In the first place, the attack surface is fairly limited,
      since so much of what the backend does with format strings goes through
      stringinfo.c or psprintf(), and those already had adequate defenses.
      In the second place, even granting that an unprivileged attacker could
      control the occurrence of ENOMEM with some precision, it's a stretch to
      believe that he could induce it just where the target buffer contains some
      valuable information.  So we concluded that the risk of non-hypothetical
      problems induced by the patch greatly outweighs the security risks.
      We will therefore revert, and instead undertake closer analysis to
      identify specific calls that may need hardening, rather than attempt a
      universal solution.
      
      We have kept the portion of the previous patch that improved snprintf.c's
      handling of errors when it calls the platform's sprintf().  That seems to
      be an unalloyed improvement.
      
      Security: CVE-2015-3166
      221f7a94
  23. May 19, 2015
    • Heikki Linnakangas's avatar
      Fix off-by-one error in Assertion. · 58b2cf03
      Heikki Linnakangas authored
      The point of the assertion is to ensure that the arrays allocated in stack
      are large enough, but the check was one item short.
      
      This won't matter in practice because MaxIndexTuplesPerPage is an
      overestimate, so you can't have that many items on a page in reality.
      But let's be tidy.
      
      Spotted by Anastasia Lubennikova. Backpatch to all supported versions, like
      the patch that added the assertion.
      58b2cf03
  24. May 18, 2015
    • Alvaro Herrera's avatar
      Don't MultiXactIdIsRunning when in recovery · 97ff2a56
      Alvaro Herrera authored
      In 9.1 and earlier, it is possible for index_getnext() to try to examine
      a heap buffer for possible HOT-prune when in recovery; this causes a
      problem when a multixact is found in a tuple's Xmax, because
      GetMultiXactIdMembers refuses to run when in recovery, raising an error:
      	ERROR:  cannot GetMultiXactIdMembers() during recovery
      
      This can be solved easily by having MultiXactIdIsRunning always return
      false when in recovery, which is reasonable because a HOT standby cannot
      acquire further tuple locks nor update/delete tuples.
      
      (Note: it doesn't look like this specific code path has a problem in
      9.2, because instead of doing HeapTupleSatisfiesUpdate directly,
      heap_hot_search_buffer uses HeapTupleIsSurelyDead instead.  Still, there
      may be other paths affected by the same bug, for instance in pgrowlocks,
      and the multixact code hasn't changed; so apply the same fix
      throughout.)
      
      Apply this fix to 9.0 through 9.2.  In 9.3 the multixact code has been
      changed completely and is no longer subject to this problem.
      
      Per report from Marko Tiikkaja,
      https://www.postgresql.org/message-id/54EB3283.2080305@joh.to
      Analysis by Andres Freund
      97ff2a56
    • Tom Lane's avatar
      Stamp 9.2.11. · 520fecfa
      Tom Lane authored
      520fecfa
    • Robert Haas's avatar
      Fix error message in pre_sync_fname. · b9215bc5
      Robert Haas authored
      The old one didn't include %m anywhere, and required extra
      translation.
      
      Report by Peter Eisentraut. Fix by me. Review by Tom Lane.
      b9215bc5
    • Tom Lane's avatar
      Last-minute updates for release notes. · f1946b13
      Tom Lane authored
      Add entries for security issues.
      
      Security: CVE-2015-3165 through CVE-2015-3167
      f1946b13
    • Noah Misch's avatar
      pgcrypto: Report errant decryption as "Wrong key or corrupt data". · 0ba20043
      Noah Misch authored
      This has been the predominant outcome.  When the output of decrypting
      with a wrong key coincidentally resembled an OpenPGP packet header,
      pgcrypto could instead report "Corrupt data", "Not text data" or
      "Unsupported compression algorithm".  The distinct "Corrupt data"
      message added no value.  The latter two error messages misled when the
      decrypted payload also exhibited fundamental integrity problems.  Worse,
      error message variance in other systems has enabled cryptologic attacks;
      see RFC 4880 section "14. Security Considerations".  Whether these
      pgcrypto behaviors are likewise exploitable is unknown.
      
      In passing, document that pgcrypto does not resist side-channel attacks.
      Back-patch to 9.0 (all supported versions).
      
      Security: CVE-2015-3167
      0ba20043
    • Noah Misch's avatar
      Check return values of sensitive system library calls. · 01272d95
      Noah Misch authored
      PostgreSQL already checked the vast majority of these, missing this
      handful that nearly cannot fail.  If putenv() failed with ENOMEM in
      pg_GSS_recvauth(), authentication would proceed with the wrong keytab
      file.  If strftime() returned zero in cache_locale_time(), using the
      unspecified buffer contents could lead to information exposure or a
      crash.  Back-patch to 9.0 (all supported versions).
      
      Other unchecked calls to these functions, especially those in frontend
      code, pose negligible security concern.  This patch does not address
      them.  Nonetheless, it is always better to check return values whose
      specification provides for indicating an error.
      
      In passing, fix an off-by-one error in strftime_win32()'s invocation of
      WideCharToMultiByte().  Upon retrieving a value of exactly MAX_L10N_DATA
      bytes, strftime_win32() would overrun the caller's buffer by one byte.
      MAX_L10N_DATA is chosen to exceed the length of every possible value, so
      the vulnerable scenario probably does not arise.
      
      Security: CVE-2015-3166
      01272d95
    • Noah Misch's avatar
      Add error-throwing wrappers for the printf family of functions. · 82b7393e
      Noah Misch authored
      All known standard library implementations of these functions can fail
      with ENOMEM.  A caller neglecting to check for failure would experience
      missing output, information exposure, or a crash.  Check return values
      within wrappers and code, currently just snprintf.c, that bypasses the
      wrappers.  The wrappers do not return after an error, so their callers
      need not check.  Back-patch to 9.0 (all supported versions).
      
      Popular free software standard library implementations do take pains to
      bypass malloc() in simple cases, but they risk ENOMEM for floating point
      numbers, positional arguments, large field widths, and large precisions.
      No specification demands such caution, so this commit regards every call
      to a printf family function as a potential threat.
      
      Injecting the wrappers implicitly is a compromise between patch scope
      and design goals.  I would prefer to edit each call site to name a
      wrapper explicitly.  libpq and the ECPG libraries would, ideally, convey
      errors to the caller rather than abort().  All that would be painfully
      invasive for a back-patched security fix, hence this compromise.
      
      Security: CVE-2015-3166
      82b7393e
Loading