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