On Tue, Jul 14, 2020 at 11:07:24AM +0000, Martin wrote:
> Hi ports@,
> 
> security/aircrack-ng coredumped wih malloc set to CF. OpenBSD 6.7-current
> 
> # airodump-ng athn0
> airodump-ng(13664) in free(): chunk canary corrupted 0xbb2425f7400 0x2ac@ox2ac
> Abort trap (core dumped)

stsp changed SIOCGIFMEDIA to take a 64-bit integer 5 years ago, so this
was broken since then.  The patch below fixes the issue for me.

This was only a matter of compiling with 'make DEBUG="-g -O0"' and
looking at the backtrace to see that it was the free(mwords) call on
line 363 of src/aircrack-osdep/openbsd.c.

(gdb) bt
#0  thrkill () at -:3
#1  0x000008143e665f2e in _libc_abort () at /usr/src/lib/libc/stdlib/abort.c:51
#2  0x000008143e66d836 in wrterror (d=0x814b1e9d680,
    msg=0x8143e5c83be "chunk canary corrupted %p %#tx@%#zx%s")
    at /usr/src/lib/libc/stdlib/malloc.c:300
#3  0x000008143e670b7a in validate_canary (d=<optimized out>, ptr=<optimized 
out>,
    sz=140187732400336, allocated=<optimized out>) at 
/usr/src/lib/libc/stdlib/malloc.c:1047
#4  find_chunknum (d=0x0, info=<optimized out>, ptr=0x0, check=<optimized out>)
    at /usr/src/lib/libc/stdlib/malloc.c:1072
#5  0x000008143e66de14 in ofree (argpool=0x7f7ffffddc00, p=0x81460deec00, 
clear=0,
    check=<optimized out>, argsz=0) at /usr/src/lib/libc/stdlib/malloc.c:1431
#6  0x000008143e66da80 in free (ptr=0x81460deec00) at 
/usr/src/lib/libc/stdlib/malloc.c:1488
#7  0x0000081450bcc621 in do_obsd_open (wi=0x81460ded800, iface=0x81460debda0 
"iwm0")
    at openbsd.c:363

Index: Makefile
===================================================================
RCS file: /var/cvs/ports/security/aircrack-ng/Makefile,v
retrieving revision 1.30
diff -u -p -r1.30 Makefile
--- Makefile    13 Jun 2020 17:38:49 -0000      1.30
+++ Makefile    14 Jul 2020 11:33:56 -0000
@@ -2,7 +2,7 @@
 
 COMMENT=               802.11 WEP and WPA-PSK keys cracking program
 DISTNAME=              aircrack-ng-1.5.2
-REVISION=              3
+REVISION=              4
 CATEGORIES=            security
 
 HOMEPAGE=              https://www.aircrack-ng.org/
Index: patches/patch-src_aircrack-osdep_openbsd_c
===================================================================
RCS file: 
/var/cvs/ports/security/aircrack-ng/patches/patch-src_aircrack-osdep_openbsd_c,v
retrieving revision 1.1
diff -u -p -r1.1 patch-src_aircrack-osdep_openbsd_c
--- patches/patch-src_aircrack-osdep_openbsd_c  13 May 2019 17:15:40 -0000      
1.1
+++ patches/patch-src_aircrack-osdep_openbsd_c  14 Jul 2020 11:33:44 -0000
@@ -11,3 +11,21 @@ Index: src/aircrack-osdep/openbsd.c
  #undef _KERNEL
  #include <net80211/ieee80211_node.h>
  #include <net80211/ieee80211_ioctl.h>
+@@ -322,7 +321,7 @@ static int do_obsd_open(struct wif * wi, char * iface)
+       int s;
+       unsigned int flags;
+       struct ifmediareq ifmr;
+-      int * mwords;
++      int64_t * mwords;
+       struct priv_obsd * po = wi_priv(wi);
+       unsigned int size = sizeof(po->po_buf);
+ 
+@@ -353,7 +352,7 @@ static int do_obsd_open(struct wif * wi, char * iface)
+ 
+       assert(ifmr.ifm_count != 0);
+ 
+-      mwords = (int *) malloc(ifmr.ifm_count * sizeof(int));
++      mwords = calloc(ifmr.ifm_count, sizeof(*mwords));
+       if (!mwords) goto close_sock;
+       ifmr.ifm_ulist = mwords;
+       if (ioctl(s, SIOCGIFMEDIA, &ifmr) == -1)

Reply via email to