• Jeff Layton's avatar
    nfsd: when reusing an existing repcache entry, unhash it first · 781c2a5a
    Jeff Layton authored
    The DRC code will attempt to reuse an existing, expired cache entry in
    preference to allocating a new one. It'll then search the cache, and if
    it gets a hit it'll then free the cache entry that it was going to
    reuse.
    
    The cache code doesn't unhash the entry that it's going to reuse
    however, so it's possible for it end up designating an entry for reuse
    and then subsequently freeing the same entry after it finds it.  This
    leads it to a later use-after-free situation and usually some list
    corruption warnings or an oops.
    
    Fix this by simply unhashing the entry that we intend to reuse. That
    will mean that it's not findable via a search and should prevent this
    situation from occurring.
    
    Cc: stable@vger.kernel.org # v3.10+
    Reported-by: default avatarChristoph Hellwig <hch@infradead.org>
    Reported-by: default avatarg. artim <gartim@gmail.com>
    Signed-off-by: default avatarJeff Layton <jlayton@redhat.com>
    Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
    781c2a5a
nfscache.c 16.4 KB