• Jakub Kicinski's avatar
    netlink: handle EMSGSIZE errors in the core · b5a89915
    Jakub Kicinski authored
    Eric points out that our current suggested way of handling
    EMSGSIZE errors ((err == -EMSGSIZE) ? skb->len : err) will
    break if we didn't fit even a single object into the buffer
    provided by the user. This should not happen for well behaved
    applications, but we can fix that, and free netlink families
    from dealing with that completely by moving error handling
    into the core.
    
    Let's assume from now on that all EMSGSIZE errors in dumps are
    because we run out of skb space. Families can now propagate
    the error nla_put_*() etc generated and not worry about any
    return value magic. If some family really wants to send EMSGSIZE
    to user space, assuming it generates the same error on the next
    dump iteration the skb->len should be 0, and user space should
    still see the EMSGSIZE.
    
    This should simplify families and prevent mistakes in return
    values which lead to DONE being forced into a separate recv()
    call as discovered by Ido some time ago.
    Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    Reviewed-by: default avatarIdo Schimmel <idosch@nvidia.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b5a89915
af_netlink.c 70.3 KB