route:tc: fix rtnl_tc_clone() calling to_clone() and add comment
route:tc: fix rtnl_tc_clone() calling to_clone() and add comment

rtnl_tc_data() allocates a data if necessary (or ENOMEM). So the code

    void *a = rtnl_tc_data(dst), *b = rtnl_tc_data(src);

    if (!a)
             return 0;
    else if (!b)
             return -NLE_NOMEM;

is not right. It also means, rtnl_tc_clone() will always add the data
pointers if the previously doesn't exist. In particular, it means
that clone modifies "src", and that "dst" will always have an allocated
pointer afterwards. Fix that.

Also, add a comment about the subtleties for how to_clone() must fix the
aliased pointers. Otherwise, we will crash. All implementations actually
got this wrong earlier, and it only worked if they didn't encounter
ENOMEM.

greearb/libnl-ct,thom311/libnl,greearb/libnl-ct,thom311/libnl,greearb/libnl-ct,thom311/libnl