• A
    netlink: handle errors from netlink_dump() · b44d211e
    Andrey Vagin 提交于
    netlink_dump() may failed, but nobody handle its error.
    It generates output data, when a previous portion has been returned to
    user space. This mechanism works when all data isn't go in skb. If we
    enter in netlink_recvmsg() and skb is absent in the recv queue, the
    netlink_dump() will not been executed. So if netlink_dump() is failed
    one time, the new data never appear and the reader will sleep forever.
    
    netlink_dump() is called from two places:
    
    1. from netlink_sendmsg->...->netlink_dump_start().
       In this place we can report error directly and it will be returned
       by sendmsg().
    
    2. from netlink_recvmsg
       There we can't report error directly, because we have a portion of
       valid output data and call netlink_dump() for prepare the next portion.
       If netlink_dump() is failed, the socket will be mark as error and the
       next recvmsg will be failed.
    Signed-off-by: NAndrey Vagin <avagin@openvz.org>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    b44d211e
af_netlink.c 48.3 KB