SUNRPC: Track writers of the 'channel' file to improve cache_listeners_exist
authorDave Wysochanski <dwysocha@redhat.com>
Fri, 26 Jul 2019 22:33:01 +0000 (18:33 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Tue, 30 Jul 2019 15:55:53 +0000 (11:55 -0400)
commit64a38e840ce5940253208eaba40265c73decc4ee
treed4f490e97e05dcacfb8906222c32d7f57bae8e6a
parent609488bc979f99f805f34e9a32c1e3b71179d10b
SUNRPC: Track writers of the 'channel' file to improve cache_listeners_exist

The sunrpc cache interface is susceptible to being fooled by a rogue
process just reading a 'channel' file.  If this happens the kernel
may think a valid daemon exists to service the cache when it does not.
For example, the following may fool the kernel:
cat /proc/net/rpc/auth.unix.gid/channel

Change the tracking of readers to writers when considering whether a
listener exists as all valid daemon processes either open a channel
file O_RDWR or O_WRONLY.  While this does not prevent a rogue process
from "stealing" a message from the kernel, it does at least improve
the kernels perception of whether a valid process servicing the cache
exists.

Signed-off-by: Dave Wysochanski <dwysocha@redhat.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
include/linux/sunrpc/cache.h
net/sunrpc/cache.c