• David Herrmann's avatar
    net/unix: drop obsolete fd-recursion limits · 27eac47b
    David Herrmann authored
    All unix sockets now account inflight FDs to the respective sender.
    This was introduced in:
    
        commit 712f4aad
        Author: willy tarreau <w@1wt.eu>
        Date:   Sun Jan 10 07:54:56 2016 +0100
    
            unix: properly account for FDs passed over unix sockets
    
    and further refined in:
    
        commit 415e3d3e
        Author: Hannes Frederic Sowa <hannes@stressinduktion.org>
        Date:   Wed Feb 3 02:11:03 2016 +0100
    
            unix: correctly track in-flight fds in sending process user_struct
    
    Hence, regardless of the stacking depth of FDs, the total number of
    inflight FDs is limited, and accounted. There is no known way for a
    local user to exceed those limits or exploit the accounting.
    
    Furthermore, the GC logic is independent of the recursion/stacking depth
    as well. It solely depends on the total number of inflight FDs,
    regardless of their layout.
    
    Lastly, the current `recursion_level' suffers a TOCTOU race, since it
    checks and inherits depths only at queue time. If we consider `A<-B' to
    mean `queue-B-on-A', the following sequence circumvents the recursion
    level easily:
    
        A<-B
           B<-C
              C<-D
                 ...
                   Y<-Z
    
    resulting in:
    
        A<-B<-C<-...<-Z
    
    With all of this in mind, lets drop the recursion limit. It has no
    additional security value, anymore. On the contrary, it randomly
    confuses message brokers that try to forward file-descriptors, since
    any sendmsg(2) call can fail spuriously with ETOOMANYREFS if a client
    maliciously modifies the FD while inflight.
    
    Cc: Alban Crequy <alban.crequy@collabora.co.uk>
    Cc: Simon McVittie <simon.mcvittie@collabora.co.uk>
    Signed-off-by: default avatarDavid Herrmann <dh.herrmann@gmail.com>
    Reviewed-by: default avatarTom Gundersen <teg@jklm.no>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    27eac47b
af_unix.c 67.9 KB