[Bug 206658] Bus error for pfctl -sa on rpi2 r294499 snap
Jov
amutu at amutu.com
Thu Jan 28 12:06:38 UTC 2016
bus error at the similar position:
Program received signal SIGBUS, Bus error.
0x00021614 in print_host (addr=0x2065111a, port=15268, af=2 '\002',
opts=1024) at /usr/src/sbin/pfctl/pf_print_state.c:178
warning: Source file is more recent than executable.
178 memcpy(&aw.v.a.addr, addr, sizeof(aw.v.a.addr));
Current language: auto; currently minimal
(gdb) p addr
$1 = (struct pf_addr *) 0x2065111a
(gdb) p *addr
$2 = {pfa = {v4 = {s_addr = 1912711360}, v6 = {__u6_addr = {__u6_addr8 =
0x2065111a "(\001r", __u6_addr16 = 0x2065111a,
__u6_addr32 = 0x2065111a}}, addr8 = 0x2065111a "(\001r", addr16 =
0x2065111a, addr32 = 0x2065111a}}
(gdb) p 0x2065111a
$3 = 543494426
(gdb)
Jov
blog: http:amutu.com/blog <http://amutu.com/blog>
2016-01-27 22:03 GMT+08:00 Ian Lepore <ian at freebsd.org>:
> On Wed, 2016-01-27 at 20:34 +0800, Jov wrote:
> > Warning: Object directory not changed from original
> > /usr/src/sbin/pfctl
> > cc -O -pipe -mfloat-abi=softfp -Wall -Wmissing-prototypes
> > -Wno-uninitialized -Wstrict-prototypes -DENABLE_ALTQ
> > -I/usr/src/sbin/pfctl
> > -DWITH_INET6 -DWITH_INET -g -std=gnu99 -Wsystem-headers -Werror -Wall
> > -Wno-format-y2k -Wno-uninitialized -Wno-pointer-sign -Wno-empty-body
> > -Wno-string-plus-int -Wno-unused-const-variable -Wno-tautological
> > -compare
> > -Wno-unused-value -Wno-parentheses-equality -Wno-unuse function
> > -Wno-enum-conversion -Wno-unused-local-typedef -Wno-switch -Wno
> > -switch-enum
> > -Wno-knr-promoted-parameter -Qunused-arguments -c pf_print_state.c
> > -o
> > pf_print_state.o
> > pf_print_state.c:149:25: error: passing 'struct in_addr' to parameter
> > of
> > incompatible type 'const void *'
> > memcpy(&sin.sin_addr, addr->v4,
> > sizeof(sin.sin_addr));
> > ^~~~~~~~
> > /usr/include/string.h:62:56: note: passing argument to parameter here
> > void *memcpy(void * __restrict, const void * __restrict, size_t);
> > ^
> > pf_print_state.c:160:27: error: passing 'struct in6_addr' to
> > parameter of
> > incompatible type 'const void *'
> > memcpy(&sin6.sin6_addr, addr->v6,
> > sizeof(sin6.sin6_addr));
> > ^~~~~~~~
> > /usr/include/string.h:62:56: note: passing argument to parameter here
> > void *memcpy(void * __restrict, const void * __restrict, size_t);
> > ^
> > 2 errors generated.
> > *** Error code 1
> >
> > Stop.
> > make: stopped in /usr/src/sbin/pfctl
> >
>
> Oops, sorry about that, try this one...
>
> -- Ian
>
> Index: sbin/pfctl/pf_print_state.c
> ===================================================================
> --- sbin/pfctl/pf_print_state.c (revision 294860)
> +++ sbin/pfctl/pf_print_state.c (working copy)
> @@ -146,7 +146,7 @@ print_name(struct pf_addr *addr, sa_family_t af)
> memset(&sin, 0, sizeof(sin));
> sin.sin_len = sizeof(sin);
> sin.sin_family = AF_INET;
> - sin.sin_addr = addr->v4;
> + memcpy(&sin.sin_addr, &addr->v4, sizeof(sin.sin_addr));
> getnameinfo((struct sockaddr *)&sin, sin.sin_len,
> host, sizeof(host), NULL, 0, NI_NOFQDN);
> break;
> @@ -157,7 +157,7 @@ print_name(struct pf_addr *addr, sa_family_t af)
> memset(&sin6, 0, sizeof(sin6));
> sin6.sin6_len = sizeof(sin6);
> sin6.sin6_family = AF_INET6;
> - sin6.sin6_addr = addr->v6;
> + memcpy(&sin6.sin6_addr, &addr->v6, sizeof(sin6.sin6_addr));
> getnameinfo((struct sockaddr *)&sin6, sin6.sin6_len,
> host, sizeof(host), NULL, 0, NI_NOFQDN);
> break;
> @@ -175,7 +175,7 @@ print_host(struct pf_addr *addr, u_int16_t port, s
> struct pf_addr_wrap aw;
>
> memset(&aw, 0, sizeof(aw));
> - aw.v.a.addr = *addr;
> + memcpy(&aw.v.a.addr, addr, sizeof(aw.v.a.addr));
> if (af == AF_INET)
> aw.v.a.mask.addr32[0] = 0xffffffff;
> else {
>
>
More information about the freebsd-arm
mailing list