1. 02 Feb, 2015 8 commits
    • Noah Misch's avatar
      Cherry-pick security-relevant fixes from upstream imath library. · 8b59672d
      Noah Misch authored
      This covers alterations to buffer sizing and zeroing made between imath
      1.3 and imath 1.20.  Valgrind Memcheck identified the buffer overruns
      and reliance on uninitialized data; their exploit potential is unknown.
      Builds specifying --with-openssl are unaffected, because they use the
      OpenSSL BIGNUM facility instead of imath.  Back-patch to 9.0 (all
      supported versions).
      
      Security: CVE-2015-0243
      8b59672d
    • Noah Misch's avatar
      Fix buffer overrun after incomplete read in pullf_read_max(). · 1dc75515
      Noah Misch authored
      Most callers pass a stack buffer.  The ensuing stack smash can crash the
      server, and we have not ruled out the viability of attacks that lead to
      privilege escalation.  Back-patch to 9.0 (all supported versions).
      
      Marko Tiikkaja
      
      Security: CVE-2015-0243
      1dc75515
    • Bruce Momjian's avatar
      port/snprintf(): fix overflow and do padding · 29725b3d
      Bruce Momjian authored
      Prevent port/snprintf() from overflowing its local fixed-size
      buffer and pad to the desired number of digits with zeros, even
      if the precision is beyond the ability of the native sprintf().
      port/snprintf() is only used on systems that lack a native
      snprintf().
      
      Reported by Bruce Momjian. Patch by Tom Lane.	Backpatch to all
      supported versions.
      
      Security: CVE-2015-0242
      29725b3d
    • Bruce Momjian's avatar
      to_char(): prevent writing beyond the allocated buffer · 9241c84c
      Bruce Momjian authored
      Previously very long localized month and weekday strings could
      overflow the allocated buffers, causing a server crash.
      
      Reported and patch reviewed by Noah Misch.  Backpatch to all
      supported versions.
      
      Security: CVE-2015-0241
      9241c84c
    • Bruce Momjian's avatar
      to_char(): prevent accesses beyond the allocated buffer · 0150ab56
      Bruce Momjian authored
      Previously very long field masks for floats could access memory
      beyond the existing buffer allocated to hold the result.
      
      Reported by Andres Freund and Peter Geoghegan.	Backpatch to all
      supported versions.
      
      Security: CVE-2015-0241
      0150ab56
    • Tom Lane's avatar
      Doc: fix syntax description for psql's \setenv. · f9ee8ea1
      Tom Lane authored
      The variable name isn't optional --- looks like a copy-and-paste-o from
      the \set command, where it is.
      
      Dilip Kumar
      f9ee8ea1
    • Peter Eisentraut's avatar
      Translation updates · f8948616
      Peter Eisentraut authored
      Source-Git-URL: git://git.postgresql.org/git/pgtranslation/messages.git
      Source-Git-Hash: 19c72ea8d856d7b1d4f5d759a766c8206bf9ce53
      f8948616
    • Peter Eisentraut's avatar
      doc: Improve claim about location of pg_service.conf · 1332bbb3
      Peter Eisentraut authored
      The previous wording claimed that the file was always in /etc, but of
      course this varies with the installation layout.  Write instead that it
      can be found via `pg_config --sysconfdir`.  Even though this is still
      somewhat incorrect because it doesn't account of moved installations, it
      at least conveys that the location depends on the installation.
      1332bbb3
  2. 01 Feb, 2015 1 commit
  3. 31 Jan, 2015 3 commits
    • Tom Lane's avatar
      Fix documentation of psql's ECHO all mode. · b7d254c0
      Tom Lane authored
      "ECHO all" is ignored for interactive input, and has been for a very long
      time, though possibly not for as long as the documentation has claimed the
      opposite.  Fix that, and also note that empty lines aren't echoed, which
      while dubious is another longstanding behavior (it's embedded in our
      regression test files for one thing).  Per bug #12721 from Hans Ginzel.
      
      In HEAD, also improve the code comments in this area, and suppress an
      unnecessary fflush(stdout) when we're not echoing.  That would likely
      be safe to back-patch, but I'll not risk it mere hours before a release
      wrap.
      b7d254c0
    • Tom Lane's avatar
      First-draft release notes for 9.4.1 et al. · 77e9125e
      Tom Lane authored
      As usual, the release notes for older branches will be made by cutting
      these down, but put them up for community review first.
      
      Note: a significant fraction of these items don't apply to 9.4.1, only to
      older branches, because the fixes already appeared in 9.4.0.  These can be
      distinguished by noting the branch commits in the associated SGML comments.
      This will be adjusted tomorrow while copying items into the older
      release-X.Y.sgml files.  In a few cases I've made two separate entries with
      different wordings for 9.4 than for the equivalent commits in the older
      branches.
      77e9125e
    • Tom Lane's avatar
      Update time zone data files to tzdata release 2015a. · 08bd0c58
      Tom Lane authored
      DST law changes in Chile and Mexico (state of Quintana Roo).
      Historical changes for Iceland.
      08bd0c58
  4. 30 Jan, 2015 11 commits
    • Stephen Frost's avatar
      Policy documentation improvements · 3144e1b3
      Stephen Frost authored
      In ALTER POLICY, use 'check_expression' instead of 'expression' for the
      parameter, to match up with the recent CREATE POLICY change.
      
      In CREATE POLICY, frame the discussion as granting access to rows
      instead of limiting access to rows.  Further, clarify that the
      expression must return true for rows to be visible/allowed and that a
      false or NULL result will mean the row is not visible/allowed.
      
      Per discussion with Dean Rasheed and Robert.
      3144e1b3
    • Tom Lane's avatar
      Fix jsonb Unicode escape processing, and in consequence disallow \u0000. · 451d2808
      Tom Lane authored
      We've been trying to support \u0000 in JSON values since commit
      78ed8e03, and have introduced increasingly worse hacks to try to
      make it work, such as commit 0ad1a816.  However, it fundamentally
      can't work in the way envisioned, because the stored representation looks
      the same as for \\u0000 which is not the same thing at all.  It's also
      entirely bogus to output \u0000 when de-escaped output is called for.
      
      The right way to do this would be to store an actual 0x00 byte, and then
      throw error only if asked to produce de-escaped textual output.  However,
      getting to that point seems likely to take considerable work and may well
      never be practical in the 9.4.x series.
      
      To preserve our options for better behavior while getting rid of the nasty
      side-effects of 0ad1a816, revert that commit in toto and instead
      throw error if \u0000 is used in a context where it needs to be de-escaped.
      (These are the same contexts where non-ASCII Unicode escapes throw error
      if the database encoding isn't UTF8, so this behavior is by no means
      without precedent.)
      
      In passing, make both the \u0000 case and the non-ASCII Unicode case report
      ERRCODE_UNTRANSLATABLE_CHARACTER / "unsupported Unicode escape sequence"
      rather than claiming there's something wrong with the input syntax.
      
      Back-patch to 9.4, where we have to do something because 0ad1a816
      broke things for many cases having nothing to do with \u0000.  9.3 also has
      bogus behavior, but only for that specific escape value, so given the lack
      of field complaints it seems better to leave 9.3 alone.
      451d2808
    • Peter Eisentraut's avatar
      doc: Remove superfluous table column · e40d43f8
      Peter Eisentraut authored
      e40d43f8
    • Tom Lane's avatar
      Fix Coverity warning about contrib/pgcrypto's mdc_finish(). · a59ee881
      Tom Lane authored
      Coverity points out that mdc_finish returns a pointer to a local buffer
      (which of course is gone as soon as the function returns), leaving open
      a risk of misbehaviors possibly as bad as a stack overwrite.
      
      In reality, the only possible call site is in process_data_packets()
      which does not examine the returned pointer at all.  So there's no
      live bug, but nonetheless the code is confusing and risky.  Refactor
      to avoid the issue by letting process_data_packets() call mdc_finish()
      directly instead of going through the pullf_read() API.
      
      Although this is only cosmetic, it seems good to back-patch so that
      the logic in pgp-decrypt.c stays in sync across all branches.
      
      Marko Kreen
      a59ee881
    • Robert Haas's avatar
      Provide a way to supress the "out of memory" error when allocating. · bd4e2fd9
      Robert Haas authored
      Using the new interface MemoryContextAllocExtended, callers can
      specify MCXT_ALLOC_NO_OOM if they are prepared to handle a NULL
      return value.
      
      Michael Paquier, reviewed and somewhat revised by me.
      bd4e2fd9
    • Tom Lane's avatar
      Fix assorted oversights in range selectivity estimation. · 3d660d33
      Tom Lane authored
      calc_rangesel() failed outright when comparing range variables to empty
      constant ranges with < or >=, as a result of missing cases in a switch.
      It also produced a bogus estimate for > comparison to an empty range.
      
      On top of that, the >= and > cases were mislabeled throughout.  For
      nonempty constant ranges, they managed to produce the right answers
      anyway as a result of counterbalancing typos.
      
      Also, default_range_selectivity() omitted cases for elem <@ range,
      range &< range, and range &> range, so that rather dubious defaults
      were applied for these operators.
      
      In passing, rearrange the code in rangesel() so that the elem <@ range
      case is handled in a less opaque fashion.
      
      Report and patch by Emre Hasegeli, some additional work by me
      3d660d33
    • Heikki Linnakangas's avatar
      Fix query-duration memory leak with GIN rescans. · 68fa75f3
      Heikki Linnakangas authored
      The requiredEntries / additionalEntries arrays were not freed in
      freeScanKeys() like other per-key stuff.
      
      It's not obvious, but startScanKey() was only ever called after the keys
      have been initialized with ginNewScanKey(). That's why it doesn't need to
      worry about freeing existing arrays. The ginIsNewKey() test in gingetbitmap
      was never true, because ginrescan free's the existing keys, and it's not OK
      to call gingetbitmap twice in a row without calling ginrescan in between.
      To make that clear, remove the unnecessary ginIsNewKey(). And just to be
      extra sure that nothing funny happens if there is an existing key after all,
      call freeScanKeys() to free it if it exists. This makes the code more
      straightforward.
      
      (I'm seeing other similar leaks in testing a query that rescans an GIN index
      scan, but that's a different issue. This just fixes the obvious leak with
      those two arrays.)
      
      Backpatch to 9.4, where GIN fast scan was added.
      68fa75f3
    • Kevin Grittner's avatar
      Allow pg_dump to use jobs and serializable transactions together. · cff1bd2a
      Kevin Grittner authored
      Since 9.3, when the --jobs option was introduced, using it together
      with the --serializable-deferrable option generated multiple
      errors.  We can get correct behavior by allowing the connection
      which acquires the snapshot to use SERIALIZABLE, READ ONLY,
      DEFERRABLE and pass that to the workers running the other
      connections using REPEATABLE READ, READ ONLY.  This is a bit of a
      kluge since the SERIALIZABLE behavior is achieved by running some
      of the participating connections at a different isolation level,
      but it is a simple and safe change, suitable for back-patching.
      
      This will be followed by a proposal for a more invasive fix with
      some slight behavioral changes on just the master branch, based on
      suggestions from Andres Freund, but the kluge will be applied to
      master until something is agreed along those lines.
      
      Back-patched to 9.3, where the --jobs option was added.
      
      Based on report from Alexander Korotkov
      cff1bd2a
    • Stephen Frost's avatar
      Fix BuildIndexValueDescription for expressions · 32bf6ee6
      Stephen Frost authored
      In 804b6b6d we modified
      BuildIndexValueDescription to pay attention to which columns are visible
      to the user, but unfortunatley that commit neglected to consider indexes
      which are built on expressions.
      
      Handle error-reporting of violations of constraint indexes based on
      expressions by not returning any detail when the user does not have
      table-level SELECT rights.
      
      Backpatch to 9.0, as the prior commit was.
      
      Pointed out by Tom.
      32bf6ee6
    • Bruce Momjian's avatar
      doc: clarify libpq's 'verify-full' host name check · e7704305
      Bruce Momjian authored
      Report by David Guyot
      e7704305
    • Tom Lane's avatar
      Handle unexpected query results, especially NULLs, safely in connectby(). · 37507962
      Tom Lane authored
      connectby() didn't adequately check that the constructed SQL query returns
      what it's expected to; in fact, since commit 08c33c42 it wasn't
      checking that at all.  This could result in a null-pointer-dereference
      crash if the constructed query returns only one column instead of the
      expected two.  Less excitingly, it could also result in surprising data
      conversion failures if the constructed query returned values that were
      not I/O-conversion-compatible with the types specified by the query
      calling connectby().
      
      In all branches, insist that the query return at least two columns;
      this seems like a minimal sanity check that can't break any reasonable
      use-cases.
      
      In HEAD, insist that the constructed query return the types specified by
      the outer query, including checking for typmod incompatibility, which the
      code never did even before it got broken.  This is to hide the fact that
      the implementation does a conversion to text and back; someday we might
      want to improve that.
      
      In back branches, leave that alone, since adding a type check in a minor
      release is more likely to break things than make people happy.  Type
      inconsistencies will continue to work so long as the actual type and
      declared type are I/O representation compatible, and otherwise will fail
      the same way they used to.
      
      Also, in all branches, be on guard for NULL results from the constructed
      query, which formerly would cause null-pointer dereference crashes.
      We now print the row with the NULL but don't recurse down from it.
      
      In passing, get rid of the rather pointless idea that
      build_tuplestore_recursively() should return the same tuplestore that's
      passed to it.
      
      Michael Paquier, adjusted somewhat by me
      37507962
  5. 29 Jan, 2015 9 commits
    • Andres Freund's avatar
      Properly terminate the array returned by GetLockConflicts(). · 17792bfc
      Andres Freund authored
      GetLockConflicts() has for a long time not properly terminated the
      returned array. During normal processing the returned array is zero
      initialized which, while not pretty, is sufficient to be recognized as
      a invalid virtual transaction id. But the HotStandby case is more than
      aesthetically broken: The allocated (and reused) array is neither
      zeroed upon allocation, nor reinitialized, nor terminated.
      
      Not having a terminating element means that the end of the array will
      not be recognized and that recovery conflict handling will thus read
      ahead into adjacent memory. Only terminating when hitting memory
      content that looks like a invalid virtual transaction id.  Luckily
      this seems so far not have caused significant problems, besides making
      recovery conflict more expensive.
      
      Discussion: 20150127142713.GD29457@awork2.anarazel.de
      
      Backpatch into all supported branches.
      17792bfc
    • Andres Freund's avatar
      Align buffer descriptors to cache line boundaries. · ed127002
      Andres Freund authored
      Benchmarks has shown that aligning the buffer descriptor array to
      cache lines is important for scalability; especially on bigger,
      multi-socket, machines.
      
      Currently the array sometimes already happens to be aligned by
      happenstance, depending how large previous shared memory allocations
      were. That can lead to wildly varying performance results after minor
      configuration changes.
      
      In addition to aligning the start of descriptor array, also force the
      size of individual descriptors to be of a common cache line size (64
      bytes). That happens to already be the case on 64bit platforms, but
      this way we can change the struct BufferDesc more easily.
      
      As the alignment primarily matters in highly concurrent workloads
      which probably all are 64bit these days, and the space wastage of
      element alignment would be a bit more noticeable on 32bit systems, we
      don't force the stride to be cacheline sized on 32bit platforms for
      now. If somebody does actual performance testing, we can reevaluate
      that decision by changing the definition of BUFFERDESC_PADDED_SIZE.
      
      Discussion: 20140202151319.GD32123@awork2.anarazel.de
      
      Per discussion with Bruce Momjan, Tom Lane, Robert Haas, and Peter
      Geoghegan.
      ed127002
    • Andres Freund's avatar
      Fix #ifdefed'ed out code to compile again. · 7142bfbb
      Andres Freund authored
      7142bfbb
    • Heikki Linnakangas's avatar
      Fix bug where GIN scan keys were not initialized with gin_fuzzy_search_limit. · 31ed42b9
      Heikki Linnakangas authored
      When gin_fuzzy_search_limit was used, we could jump out of startScan()
      without calling startScanKey(). That was harmless in 9.3 and below, because
      startScanKey()() didn't do anything interesting, but in 9.4 it initializes
      information needed for skipping entries (aka GIN fast scans), and you
      readily get a segfault if it's not done. Nevertheless, it was clearly wrong
      all along, so backpatch all the way to 9.1 where the early return was
      introduced.
      
      (AFAICS startScanKey() did nothing useful in 9.3 and below, because the
      fields it initialized were already initialized in ginFillScanKey(), but I
      don't dare to change that in a minor release. ginFillScanKey() is always
      called in gingetbitmap() even though there's a check there to see if the
      scan keys have already been initialized, because they never are; ginrescan()
      free's them.)
      
      In the passing, remove unnecessary if-check from the second inner loop in
      startScan(). We already check in the first loop that the condition is true
      for all entries.
      
      Reported by Olaf Gawenda, bug #12694, Backpatch to 9.1 and above, although
      AFAICS it causes a live bug only in 9.4.
      31ed42b9
    • Robert Haas's avatar
      Move out-of-memory error checks from aset.c to mcxt.c · 3d6d1b58
      Robert Haas authored
      This potentially allows us to add mcxt.c interfaces that do something
      other than throw an error when memory cannot be allocated.  We'll
      handle adding those interfaces in a separate commit.
      
      Michael Paquier, with minor changes by me
      3d6d1b58
    • Stephen Frost's avatar
      Reword CREATE POLICY parameter descriptions · 1c993b3a
      Stephen Frost authored
      The parameter description for the using_expression and check_expression
      in CREATE POLICY were unclear and arguably included a typo.  Clarify
      and improve the consistency of that language.
      
      Pointed out by Dean Rasheed.
      1c993b3a
    • Stephen Frost's avatar
      CREATE POLICY expression -> using_expression · bb541812
      Stephen Frost authored
      The syntax for CREATE POLICY simply used "expression" for the USING
      expression, while the WITH CHECK expression was "check_expression".
      Given that we have two expressions, it's sensible to explcitly name both
      to maintain clarity.
      
      This patch simply changes the generic "expression" to be
      "using_expression".
      
      Pointed out by Peter Geoghegan.
      bb541812
    • Stephen Frost's avatar
      Improve CREATE POLICY documentation · 42f66b27
      Stephen Frost authored
      The CREATE POLICY documention didn't sufficiently clarify what happens
      when a given command type (eg: ALL or UPDATE) accepts both USING and
      WITH CHECK clauses, but only the USING clause is defined.  Add language
      to clarify that, in such a case, the USING clause will be used for both
      USING and WITH CHECK cases.
      
      Pointed out by Peter Geoghegan.
      42f66b27
    • Stephen Frost's avatar
      Add usebypassrls to pg_user and pg_shadow · c7cf9a24
      Stephen Frost authored
      The row level security patches didn't add the 'usebypassrls' columns to
      the pg_user and pg_shadow views on the belief that they were deprecated,
      but we havn't actually said they are and therefore we should include it.
      
      This patch corrects that, adds missing documentation for rolbypassrls
      into the system catalog page for pg_authid, along with the entries for
      pg_user and pg_shadow, and cleans up a few other uses of 'row-level'
      cases to be 'row level' in the docs.
      
      Pointed out by Amit Kapila.
      
      Catalog version bump due to system view changes.
      c7cf9a24
  6. 28 Jan, 2015 4 commits
    • Stephen Frost's avatar
      Clean up range-table building in copy.c · f8519a6a
      Stephen Frost authored
      Commit 804b6b6d added the build of a
      range table in copy.c to initialize the EState es_range_table since it
      can be needed in error paths.  Unfortunately, that commit didn't
      appreciate that some code paths might end up not initializing the rte
      which is used to build the range table.
      
      Fix that and clean up a couple others things along the way- build it
      only once and don't explicitly set it on the !is_from path as it
      doesn't make any sense there (cstate is palloc0'd, so this isn't an
      issue from an initializing standpoint either).
      
      The prior commit went back to 9.0, but this only goes back to 9.1 as
      prior to that the range table build happens immediately after building
      the RTE and therefore doesn't suffer from this issue.
      
      Pointed out by Robert.
      f8519a6a
    • Stephen Frost's avatar
      Fix column-privilege leak in error-message paths · 804b6b6d
      Stephen Frost authored
      While building error messages to return to the user,
      BuildIndexValueDescription, ExecBuildSlotValueDescription and
      ri_ReportViolation would happily include the entire key or entire row in
      the result returned to the user, even if the user didn't have access to
      view all of the columns being included.
      
      Instead, include only those columns which the user is providing or which
      the user has select rights on.  If the user does not have any rights
      to view the table or any of the columns involved then no detail is
      provided and a NULL value is returned from BuildIndexValueDescription
      and ExecBuildSlotValueDescription.  Note that, for key cases, the user
      must have access to all of the columns for the key to be shown; a
      partial key will not be returned.
      
      Further, in master only, do not return any data for cases where row
      security is enabled on the relation and row security should be applied
      for the user.  This required a bit of refactoring and moving of things
      around related to RLS- note the addition of utils/misc/rls.c.
      
      Back-patch all the way, as column-level privileges are now in all
      supported versions.
      
      This has been assigned CVE-2014-8161, but since the issue and the patch
      have already been publicized on pgsql-hackers, there's no point in trying
      to hide this commit.
      804b6b6d
    • Heikki Linnakangas's avatar
      Fix typo in comment. · acc2b1e8
      Heikki Linnakangas authored
      acc2b1e8
    • Heikki Linnakangas's avatar
      Remove dead NULL-pointer checks in GiST code. · 670bf71f
      Heikki Linnakangas authored
      gist_poly_compress() and gist_circle_compress() checked for a NULL-pointer
      key argument, but that was dead code; the gist code never passes a
      NULL-pointer to the "compress" method.
      
      This commit also removes a documentation note added in commit a0a3883d,
      about doing NULL-pointer checks in the "compress" method. It was added
      based on the fact that some implementations were doing NULL-pointer
      checks, but those checks were unnecessary in the first place.
      
      The NULL-pointer check in gbt_var_same() function was also unnecessary.
      The arguments to the "same" method come from the "compress", "union", or
      "picksplit" methods, but none of them return a NULL pointer.
      
      None of this is to be confused with SQL NULL values. Those are dealt with
      by the gist machinery, and are never passed to the GiST opclass methods.
      
      Michael Paquier
      670bf71f
  7. 27 Jan, 2015 1 commit
    • Tom Lane's avatar
      Fix NUMERIC field access macros to treat NaNs consistently. · 1a2b2034
      Tom Lane authored
      Commit 14534353 arranged to store numeric
      NaN values as short-header numerics, but the field access macros did not
      get the memo: they thought only "SHORT" numerics have short headers.
      
      Most of the time this makes no difference because we don't access the
      weight or dscale of a NaN; but numeric_send does that.  As pointed out
      by Andrew Gierth, this led to fetching uninitialized bytes.
      
      AFAICS this could not have any worse consequences than that; in particular,
      an unaligned stored numeric would have been detoasted by PG_GETARG_NUMERIC,
      so that there's no risk of a fetch off the end of memory.  Still, the code
      is wrong on its own terms, and it's not hard to foresee future changes that
      might expose us to real risks.  So back-patch to all affected branches.
      1a2b2034
  8. 26 Jan, 2015 3 commits
    • Tom Lane's avatar
      Add a note to PG_TRY's documentation about volatile safety. · 4b2a2547
      Tom Lane authored
      We had better memorialize what the actual requirements are for this.
      4b2a2547
    • Tom Lane's avatar
      Fix volatile-safety issue in dblink's materializeQueryResult(). · dabda641
      Tom Lane authored
      Some fields of the sinfo struct are modified within PG_TRY and then
      referenced within PG_CATCH, so as with recent patch to async.c, "volatile"
      is necessary for strict POSIX compliance; and that propagates to a couple
      of subroutines as well as materializeQueryResult() itself.  I think the
      risk of actual issues here is probably higher than in async.c, because
      storeQueryResult() is likely to get inlined into materializeQueryResult(),
      leaving the compiler free to conclude that its stores into sinfo fields are
      dead code.
      dabda641
    • Robert Haas's avatar
      Re-enable abbreviated keys on Windows. · 168a809d
      Robert Haas authored
      Commit 1be4eb1b disabled this, but I
      think the real problem here was fixed by commit
      b181a919 and commit
      d060e07f.  So let's try re-enabling
      it now and see what happens.
      168a809d