Thread

  1. Re: Small bugs regarding resowner handling in aio.c, catcache.c

    Heikki Linnakangas <hlinnaka@iki.fi> — 2025-12-10T09:51:35Z

    On 10/12/2025 01:33, Matthias van de Meent wrote:
    > Hi Heikki, Andres,
    > 
    > Whilst looking through catcache.c's code I noticed this piece of code:
    > 
    > ReleaseCatCacheListWithOwner(CatCList *list, ResourceOwner resowner)
    > {
    >      [...]
    >      if (resowner)
    >          ResourceOwnerForgetCatCacheRef(CurrentResourceOwner, &ct->tuple);
    > 
    > Note how the resowner argument is ignored in favour of
    > CurrentResourceOwner; and that probably wasn't what the author
    > intended.
    > 
    > So I looked around a bit, and found 2 more similar instances: one more
    > in catcache.c, and one in aio.c.  I can't guarantee that there are no
    > other comparable issues, but at least I could not immediately find any
    > functions that ignore their ResourceOwner argument in favour of
    > CurrentResourceOwner.
    > 
    > The issue in aio.c is externally visible, so it might trigger issues.
    > However, every caller in the tree uses CurrentResourceOwner, so only
    > extensions could trigger this bug.
    > The two issues in catcache.c are benign: No external code can trigger
    > it with a different resource owner; and while no internal code would
    > trigger it either, it's better to use the provided resowner, so that
    > future callers won't activate the bug.
    > 
    > Attached a fix for all 3 cases.
    
    Pushed and backpatched, thanks!
    
    - Heikki