Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 4 Jan 2014 09:50:26 -0700
From:      Warner Losh <imp@bsdimp.com>
To:        Guy Yur <guyyur@gmail.com>
Cc:        freebsd-net@freebsd.org, freebsd-arm@freebsd.org
Subject:   Re: 10.0-RC1, armv6: "pfctl -s state" crashes on BeagleBone Black due to unaligned access
Message-ID:  <E4255780-6E58-435D-BDE6-491915B642CF@bsdimp.com>
In-Reply-To: <CAC67Hz_QXcHHSFOLLgUGqLWRQpzhRRv_b%2BWGMMQsfk-VQp74RA@mail.gmail.com>
References:  <CAC67Hz_QXcHHSFOLLgUGqLWRQpzhRRv_b%2BWGMMQsfk-VQp74RA@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
I think this was changed in later RC versions.

Warner

On Jan 4, 2014, at 6:06 AM, Guy Yur wrote:

> Hi,
>=20
> I am running 10.0-RC1 arm.armv6 on the BeagleBone Black.
> The "pfctl -s state" command is crashing when trying to print the
> second entry.
>=20
> struct pfsync_state has a size that is not divisiable by 4 or 8 =
leading to the
> second entry in the returned state array not being aligned and pfctl
> core dumps on Bus error when trying to access a uint32_t field.
>=20
> (gdb) bt
> #0  print_host (addr=3D0x2085a11a, port=3D7660, af=3D2 '\002', =
opts=3D1024) at
> /usr/src/sbin/pfctl/pf_print_state.c:178
> #1  0x00021c4c in print_state (s=3D0x2085a0f2, opts=3D1024) at
> /usr/src/sbin/pfctl/pf_print_state.c:236
> #2  0x0000c664 in pfctl_show_states (dev=3D<value optimized out>,
> iface=3D0x0, opts=3D1024) at /usr/src/sbin/pfctl/pfctl.c:1095
>=20
> sizeof(struct pfsync_state_key) is 36
> sizeof(struct pfsync_state_peer) is 32
> sizeof(struct pf_addr) is 16
> sizeof(struct pfsync_state) is 242
>=20
> Removing the __spare[2] field will allow the struct to be aligned on 8 =
bytes
> for the u_int64_t id field and also cover the uint32_t fields =
alignment
> but this will break KBI.
>=20
> I am currently using an inefficient workaround in pfctl_show_states
> that memcpy each entry to a struct pfsync_state on the stack
> ensuring each call to print_state receives an aligned struct.
>=20
>=20
> 10.0-RC1 World and kernel were compiled in a VirtualBox VM running
> 9.2-RELEASE-p2 i386.
> clang and ARM_EABI used as the default make options.
>=20
>=20
> Regards,
> Guy
> _______________________________________________
> freebsd-arm@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-arm
> To unsubscribe, send any mail to "freebsd-arm-unsubscribe@freebsd.org"




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E4255780-6E58-435D-BDE6-491915B642CF>