Evgeniy Polyakov wrote:
+ nlk->groups[0] = (nlk->groups[0] & ~0xffffffffUL) | nladdr->nl_groups; netlink_table_ungrab();


I have some doubt about 64bit platforms.

We want to replace the lower 32 bit. What are the doubts you're haveing?

        return 0;
@@ -590,7 +619,7 @@ static int netlink_getname(struct socket
                nladdr->nl_groups = netlink_group_mask(nlk->dst_group);
        } else {
                nladdr->nl_pid = nlk->pid;
- nladdr->nl_groups = nlk->groups; + nladdr->nl_groups = nlk->groups[0];


And here too.

nlk->groups[0] is an unsigned long, which is 64bit on 64bit platforms.

So it will be truncated to 32bit, which is exactly what is intended
here. The problem Dave was refering to was a cast of unsigned long *
to u32 *, which doesn't work because it will use the upper 4 byte on
big-endian 64bit. But without pointer casts this should work well.
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to