Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 15 Jun 2005 22:42:32 +0200
From:      Daniel Hartmeier <daniel@benzedrine.cx>
To:        Marcel Moolenaar <marcel@freebsd.org>
Cc:        freebsd-net@freebsd.org, freebsd-pf@freebsd.org
Subject:   Re: ia64/81284: Unaligned Reference with pf on 5.4/IA64
Message-ID:  <20050615204232.GX8526@insomnia.benzedrine.cx>
In-Reply-To: <200506132123.j5DLNove069255@freefall.freebsd.org>
References:  <200506132123.j5DLNove069255@freefall.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Jun 13, 2005 at 09:23:50PM +0000, Marcel Moolenaar wrote:

> Synopsis: Unaligned Reference with pf on 5.4/IA64
> 
> Responsible-Changed-From-To: freebsd-net->freebsd-pf
> Responsible-Changed-By: marcel
> Responsible-Changed-When: Mon Jun 13 21:22:54 GMT 2005
> Responsible-Changed-Why: 
> Move to a more pf-focussed responsible party.
> 
> http://www.freebsd.org/cgi/query-pr.cgi?pr=81284

If I understand the problem correctly, there is an underlying
network-generic question I'd like to ask here.

When a function in the kernel gets passed a struct ip pointer, can it
assume that the struct ip object pointed to is properly aligned? Or
should it assume that this is not the case, and extract members more
carefully?

We can fix the access in pf of course, but if other functions rightfully
count on struct ip objects being properly aligned, this might simply
crash outside of pf, too.

In short, is the problem that bridge doesn't properly align the struct
ip object (which I can try to fix, too), or that pf assumes that such
objects should be aligned?

On OpenBSD's 64-bit architectures with varying alignment rules, this has
never occured, I think because the struct ip objects (and, hence, their
ip_src/dst members) are kept aligned.

If I'm way off, and proper alignment of struct ip objects does not
guarantee proper alignment of the ip_src/dst members as 32-bit
unsigneds, please explain. If ia64 is different from other 64-bit
architectures (of which I only know amd64, sparc64 and alpha), please
explain what alignment rules there are for u_int32_t.

Daniel



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050615204232.GX8526>