• Ben Pfaff's avatar
    netlink: Fix handling of error from netlink_dump(). · ac30ef83
    Ben Pfaff authored
    netlink_dump() returns a negative errno value on error.  Until now,
    netlink_recvmsg() directly recorded that negative value in sk->sk_err, but
    that's wrong since sk_err takes positive errno values.  (This manifests as
    userspace receiving a positive return value from the recv() system call,
    falsely indicating success.) This bug was introduced in the commit that
    started checking the netlink_dump() return value, commit b44d211e (netlink:
    handle errors from netlink_dump()).
    
    Multithreaded Netlink dumps are one way to trigger this behavior in
    practice, as described in the commit message for the userspace workaround
    posted here:
        http://openvswitch.org/pipermail/dev/2014-June/042339.html
    
    This commit also fixes the same bug in netlink_poll(), introduced in commit
    cd1df525 (netlink: add flow control for memory mapped I/O).
    Signed-off-by: default avatarBen Pfaff <blp@nicira.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    ac30ef83
af_netlink.c 74.3 KB