On Mon, Aug 15, 2005 at 10:16:19AM +0200, Patrick McHardy ([EMAIL PROTECTED]) 
wrote:
> 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.

it's not Dave's bug, all this changes force compiler to scream, which thrusts 
forward.

-- 
        Evgeniy Polyakov
-
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