scanimage -L crashes almost every time I run it on my system.
The patch below fixes this. OK?
Starting program: /usr/local/bin/scanimage -L
Program received signal SIGSEGV, Segmentation fault.
0x000013d0496b84b4 in memcpy (dst0=<optimized out>, src0=<optimized out>,
length=256) at /usr/src/lib/libc/string/memcpy.c:103
103 TLOOP(*(word *)dst = *(word *)src; src += wsize; dst += wsize);
(gdb) up
#1 0x000013d072201e05 in prepare_socket (if_name=0x13d0395e0ff1 "pflog0",
local_sa=0x13d0395e0f18, broadcast_sa=0x0, dest_sa=<optimized out>)
at pixma/pixma_bjnp.c:1032
(gdb) p *local_sa
Cannot access memory at address 0x13d0395e1000
(gdb) up
#2 sanei_bjnp_find_devices (conf_devices=<optimized out>,
attach_bjnp=0x13d0721f3ab0 <attach_bjnp>,
pixma_devices=0x13d072209850 <pixma_devices>) at pixma/pixma_bjnp.c:2082
(gdb) list
2077 interface = interfaces;
2078 while ((no_sockets < BJNP_SOCK_MAX) && (interface != NULL))
2079 {
2080 if ( ! (interface -> ifa_flags & IFF_POINTOPOINT) &&
2081 ( (socket_fd[no_sockets] =
2082 prepare_socket( interface -> ifa_name,
2083 (bjnp_sockaddr_t *) interface ->
ifa_addr,
2084 (bjnp_sockaddr_t *) interface ->
ifa_broadaddr,
2085 &broadcast_addr[no_sockets] ) )
!= -1 ) )
2086 {
(gdb) down
#1 0x000013d072201e05 in prepare_socket (if_name=0x13d0395e0ff1 "pflog0",
local_sa=0x13d0395e0f18, broadcast_sa=0x0, dest_sa=<optimized out>)
at pixma/pixma_bjnp.c:1032
1032 memcpy( &local_sa_copy, local_sa, sa_size(local_sa) );
(gdb) list
1027 if_name));
1028 return -1;
1029 }
1030
1031 memset( &local_sa_copy, 0, sizeof(local_sa_copy) );
1032 memcpy( &local_sa_copy, local_sa, sa_size(local_sa) );
1033
1034 switch( local_sa_copy.addr.sa_family )
1035 {
1036 case AF_INET:
(gdb) p local_sa
$3 = (const bjnp_sockaddr_t *) 0x13d0395e0f18
(gdb) p *local_sa
Cannot access memory at address 0x13d0395e1000
(gdb) up
#2 sanei_bjnp_find_devices (conf_devices=<optimized out>,
attach_bjnp=0x13d0721f3ab0 <attach_bjnp>,
pixma_devices=0x13d072209850 <pixma_devices>)
at pixma/pixma_bjnp.c:2082
2082 prepare_socket( interface -> ifa_name,
(gdb) p *interface
$5 = {ifa_next = 0x0, ifa_name = 0x13d0395e0ff1 "pflog0", ifa_flags = 321,
ifa_addr = 0x13d0395e0f18, ifa_netmask = 0x0, ifa_dstaddr = 0x0,
ifa_data = 0x13d0395e0f38}
(gdb) p *interface->ifa_addr
$7 = {sa_len = 32 ' ', sa_family = 18 '\022',
sa_data = "\004\000\365\006\000\000pflog0\000"}
diff 9c884dd8fa25c3442e8327800da7fa8752722013 /usr/ports
blob - e002fba14c4824b7b8ace48f938ddfbf3204cb1a
file + graphics/sane-backends/Makefile
--- graphics/sane-backends/Makefile
+++ graphics/sane-backends/Makefile
@@ -5,6 +5,7 @@ BROKEN-alpha= ICE hp5590.c:1141: error: unrecognizabl
COMMENT= API for accessing scanners, backends
DISTNAME= sane-backends-1.0.30
+REVISION= 0
SHARED_LIBS += sane 2.1 # unknown
blob - /dev/null
file + graphics/sane-backends/patches/patch-backend_pixma_pixma_bjnp_c
--- graphics/sane-backends/patches/patch-backend_pixma_pixma_bjnp_c
+++ graphics/sane-backends/patches/patch-backend_pixma_pixma_bjnp_c
@@ -0,0 +1,20 @@
+$OpenBSD$
+Fix segfault during 'scanimage -L' if e.g. a "pflog0" interface exists.
+Address family AF_LINK is not expected by prepare_socket() and sa_size().
+Crashes during memcpy( &local_sa_copy, local_sa, sa_size(local_sa) );
+because sa_size() returns a fallback value that doesn't match the actual size.
+Index: backend/pixma/pixma_bjnp.c
+--- backend/pixma/pixma_bjnp.c.orig
++++ backend/pixma/pixma_bjnp.c
+@@ -2078,6 +2078,11 @@ sanei_bjnp_find_devices (const char **conf_devices,
+ while ((no_sockets < BJNP_SOCK_MAX) && (interface != NULL))
+ {
+ if ( ! (interface -> ifa_flags & IFF_POINTOPOINT) &&
++ ( interface -> ifa_addr -> sa_family == AF_INET
++#ifdef ENABLE_IPV6
++ || interface -> ifa_addr -> sa_family == AF_INET6
++#endif
++ ) &&
+ ( (socket_fd[no_sockets] =
+ prepare_socket( interface -> ifa_name,
+ (bjnp_sockaddr_t *) interface ->
ifa_addr,