• Martin KaFai Lau's avatar
    bpf: Change bpf_getsockopt(SOL_TCP) to reuse do_tcp_getsockopt() · 273b7f0f
    Martin KaFai Lau authored
    This patch changes bpf_getsockopt(SOL_TCP) to reuse
    do_tcp_getsockopt().  It removes the duplicated code from
    bpf_getsockopt(SOL_TCP).
    
    Before this patch, there were some optnames available to
    bpf_setsockopt(SOL_TCP) but missing in bpf_getsockopt(SOL_TCP).
    For example, TCP_NODELAY, TCP_MAXSEG, TCP_KEEPIDLE, TCP_KEEPINTVL,
    and a few more.  It surprises users from time to time.  This patch
    automatically closes this gap without duplicating more code.
    
    bpf_getsockopt(TCP_SAVED_SYN) does not free the saved_syn,
    so it stays in sol_tcp_sockopt().
    
    For string name value like TCP_CONGESTION, bpf expects it
    is always null terminated, so sol_tcp_sockopt() decrements
    optlen by one before calling do_tcp_getsockopt() and
    the 'if (optlen < saved_optlen) memset(..,0,..);'
    in __bpf_getsockopt() will always do a null termination.
    Signed-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
    Link: https://lore.kernel.org/r/20220902002918.2894511-1-kafai@fb.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    273b7f0f
tcp.c 126 KB