• Tom Lane's avatar
    Ignore SECURITY DEFINER and SET attributes for a PL's call handler. · 33c6eaf7
    Tom Lane authored
    It's not very sensible to set such attributes on a handler function;
    but if one were to do so, fmgr.c went into infinite recursion because
    it would call fmgr_security_definer instead of the handler function proper.
    There is no way for fmgr_security_definer to know that it ought to call the
    handler and not the original function referenced by the FmgrInfo's fn_oid,
    so it tries to do the latter, causing the whole process to start over
    again.
    
    Ordinarily such misconfiguration of a procedural language's handler could
    be written off as superuser error.  However, because we allow non-superuser
    database owners to create procedural languages and the handler for such a
    language becomes owned by the database owner, it is possible for a database
    owner to crash the backend, which ideally shouldn't be possible without
    superuser privileges.  In 9.2 and up we will adjust things so that the
    handler functions are always owned by superusers, but in existing branches
    this is a minor security fix.
    
    Problem noted by Noah Misch (after several of us had failed to detect
    it :-().  This is CVE-2012-2655.
    33c6eaf7
fmgr.c 63.6 KB