• Johannes Weiner's avatar
    sched: psi: fix unprivileged polling against cgroups · 8b39d20e
    Johannes Weiner authored
    519fabc7 ("psi: remove 500ms min window size limitation for
    triggers") breaks unprivileged psi polling on cgroups.
    
    Historically, we had a privilege check for polling in the open() of a
    pressure file in /proc, but were erroneously missing it for the open()
    of cgroup pressure files.
    
    When unprivileged polling was introduced in d82caa27 ("sched/psi:
    Allow unprivileged polling of N*2s period"), it needed to filter
    privileges depending on the exact polling parameters, and as such
    moved the CAP_SYS_RESOURCE check from the proc open() callback to
    psi_trigger_create(). Both the proc files as well as cgroup files go
    through this during write(). This implicitly added the missing check
    for privileges required for HT polling for cgroups.
    
    When 519fabc7 ("psi: remove 500ms min window size limitation for
    triggers") followed right after to remove further restrictions on the
    RT polling window, it incorrectly assumed the cgroup privilege check
    was still missing and added it to the cgroup open(), mirroring what we
    used to do for proc files in the past.
    
    As a result, unprivileged poll requests that would be supported now
    get rejected when opening the cgroup pressure file for writing.
    
    Remove the cgroup open() check. psi_trigger_create() handles it.
    
    Fixes: 519fabc7 ("psi: remove 500ms min window size limitation for triggers")
    Reported-by: default avatarLuca Boccassi <bluca@debian.org>
    Signed-off-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: default avatarLuca Boccassi <bluca@debian.org>
    Acked-by: default avatarSuren Baghdasaryan <surenb@google.com>
    Cc: stable@vger.kernel.org # 6.5+
    Link: https://lore.kernel.org/r/20231026164114.2488682-1-hannes@cmpxchg.org
    8b39d20e
cgroup.c 185 KB