mirror of
https://github.com/postgres/postgres.git
synced 2026-10-23 13:29:09 +03:00
Be more wary about constant's datatype in scalarineqsel().
The special case here for estimating conditions involving a ctid column failed to check that the RHS constant is of type tid. While that'd always be true for the built-in operators that reference this selectivity estimator, a maliciously constructed operator could provide a user-controlled Datum value that would get interpreted as an ItemPointer pointer. That at least risks SIGSEGV, and perhaps with a bit of sweat it could be used for server memory disclosure. Reported-by: Hcamael <baiyjrh@gmail.com> Author: Tom Lane <tgl@sss.pgh.pa.us> Reviewed-by: Noah Misch <noah@leadboat.com> Backpatch-through: 14 Security: CVE-2026-14668
This commit is contained in:
@@ -596,7 +596,8 @@ scalarineqsel(PlannerInfo *root, Oid operator, bool isgt, bool iseq,
|
||||
* make an estimate based on comparing the constant to the table size.
|
||||
*/
|
||||
if (vardata->var && IsA(vardata->var, Var) &&
|
||||
((Var *) vardata->var)->varattno == SelfItemPointerAttributeNumber)
|
||||
((Var *) vardata->var)->varattno == SelfItemPointerAttributeNumber &&
|
||||
consttype == TIDOID)
|
||||
{
|
||||
ItemPointer itemptr;
|
||||
double block;
|
||||
|
||||
Reference in New Issue
Block a user