• Florian Schmidt's avatar
    memcg v1: provide read access to memory.pressure_level · 6b0ba2ab
    Florian Schmidt authored
    cgroups v1 has a unique way of setting up memory pressure notifications:
    the user opens "memory.pressure_level" of the cgroup they want to monitor
    for pressure, then open "cgroup.event_control" and write the fd (among
    other things) to that file.  memory.pressure_level has no other use,
    specifically it does not support any read or write operations. 
    Consequently, no handlers are provided, and cgroup_file_mode() sets the
    permissions to 000.  However, to actually use the mechanism, the
    subscribing user must have read access to the file and open the fd for
    reading, see memcg_write_event_control().
    
    This is all fine as long as the subscribing process runs as root and is
    otherwise unconfined by further restrictions.  However, if you add strict
    access controls such as selinux, the permission bits will be enforced, and
    opening memory.pressure_level for reading will fail, preventing the
    process from subscribing, even as root.
    
    To work around this issue, introduce a dummy read handler.  When
    memory.pressure_level is created, cgroup_file_mode() will notice the
    existence of a handler, and therefore add read permissions to the file.
    
    Link: https://lkml.kernel.org/r/20230404105900.2005-1-flosch@nutanix.comSigned-off-by: default avatarFlorian Schmidt <flosch@nutanix.com>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Muchun Song <muchun.song@linux.dev>
    Cc: Roman Gushchin <roman.gushchin@linux.dev>
    Cc: Shakeel Butt <shakeelb@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    6b0ba2ab
memcontrol.c 204 KB