<div dir="auto"><div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Replying to myself:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Apparently, the callers are expected to manually perform the UNLOCK later.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">I&#39;ve added a comment in the code for future reference.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Y.</div></div><br><div class="gmail_quote"><div dir="ltr">On Sat, Dec 1, 2018 at 8:53 PM Yaniv Kaul &lt;<a href="mailto:ykaul@redhat.com" target="_blank" rel="noreferrer">ykaul@redhat.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">I&#39;m looking at the code and I&#39;m not sure if there&#39;s a missing UNLOCK there (location marked in bold red) for cache-&gt;gc_lock :</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default"><div class="gmail_default"><font face="arial, helvetica, sans-serif">    LOCK(&amp;cache-&gt;gc_lock);</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    bucket = id % cache-&gt;gc_nbuckets;</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    agl = BUCKET_START(cache-&gt;gc_cache, bucket);</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    for (i = 0; i &lt; AUX_GID_CACHE_ASSOC; i++, agl++) {</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        if (!agl-&gt;gl_list || agl-&gt;gl_id != id)</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">            continue;</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        /*</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">          @uid and @gid reflect the latest UID/GID of the</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">           process performing the syscall (taken from frame-&gt;root).</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">           If the UID and GID has changed for the PID since the</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">           time we cached it, we should treat the cache as having</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">           stale values and query them freshly.</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        */</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        if (agl-&gt;gl_uid != uid || agl-&gt;gl_gid != gid)</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">            break;</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        /*</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">         * We don&#39;t put new entries in the cache when expiration=0, but</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">         * there might be entries still in there if expiration was</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">         * changed very recently.  Writing the check this way ensures</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">         * that they&#39;re not used.</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">         */</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        if (now &lt; agl-&gt;gl_deadline) {</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">            <b><font color="#ff0000">return agl;</font></b></font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        }</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        /*</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">         * We&#39;re not going to find any more UID matches, and reaping</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">         * is handled further down to maintain LRU order.</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">         */</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        break;</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    }</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    UNLOCK(&amp;cache-&gt;gc_lock);</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    return NULL;</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">}</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">TIA,</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">Y.</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif"><br></font></div><div style="font-family:arial,helvetica,sans-serif"><br></div></div></div></div></div>
</blockquote></div></div>