• C
    net: cleanly handle kernel vs user buffers for ->msg_control · 1f466e1f
    Christoph Hellwig 提交于
    The msg_control field in struct msghdr can either contain a user
    pointer when used with the recvmsg system call, or a kernel pointer
    when used with sendmsg.  To complicate things further kernel_recvmsg
    can stuff a kernel pointer in and then use set_fs to make the uaccess
    helpers accept it.
    
    Replace it with a union of a kernel pointer msg_control field, and
    a user pointer msg_control_user one, and allow kernel_recvmsg operate
    on a proper kernel pointer using a bitfield to override the normal
    choice of a user pointer for recvmsg.
    Signed-off-by: NChristoph Hellwig <hch@lst.de>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    1f466e1f
socket.h 14.8 KB