• D
    ip: Define usercopy region in IP proto slab cache · 8c2bc895
    David Windsor 提交于
    The ICMP filters for IPv4 and IPv6 raw sockets need to be copied to/from
    userspace. In support of usercopy hardening, this patch defines a region
    in the struct proto slab cache in which userspace copy operations are
    allowed.
    
    example usage trace:
    
        net/ipv4/raw.c:
            raw_seticmpfilter(...):
                ...
                copy_from_user(&raw_sk(sk)->filter, ..., optlen)
    
            raw_geticmpfilter(...):
                ...
                copy_to_user(..., &raw_sk(sk)->filter, len)
    
        net/ipv6/raw.c:
            rawv6_seticmpfilter(...):
                ...
                copy_from_user(&raw6_sk(sk)->filter, ..., optlen)
    
            rawv6_geticmpfilter(...):
                ...
                copy_to_user(..., &raw6_sk(sk)->filter, len)
    
    This region is known as the slab cache's usercopy region. Slab caches
    can now check that each dynamically sized copy operation involving
    cache-managed memory falls entirely within the slab's usercopy region.
    
    This patch is modified from Brad Spengler/PaX Team's PAX_USERCOPY
    whitelisting code in the last public patch of grsecurity/PaX based on my
    understanding of the code. Changes or omissions from the original code are
    mine and don't reflect the original grsecurity/PaX code.
    Signed-off-by: NDavid Windsor <dave@nullcore.net>
    [kees: split from network patch, provide usage trace]
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
    Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
    Cc: netdev@vger.kernel.org
    Signed-off-by: NKees Cook <keescook@chromium.org>
    8c2bc895
raw.c 26.5 KB