netgroup_mkdb(8) calls abort() when _ng_parse() returns
_NG_ERROR for a malformed netgroup entry.

The switch in ng_load() at netgroup_mkdb.c:213 handles
_NG_NONE, _NG_NAME, and _NG_GROUP, but not _NG_ERROR (-1).
A truncated or malformed netgroup entry causes _ng_parse() to
return _NG_ERROR, which falls through to the default case:

  default:
      abort();

A 28-byte input reproduces the crash:

  mygroup (host1, 1, dn1) (hos

Confirmed on OpenBSD 7.8/arm64 with the system binary.

Fix: handle _NG_ERROR with errx(), matching the existing
error handling at line 263 for other parse failures.

Found by AFL++ fuzzing.

Index: usr.sbin/netgroup_mkdb/netgroup_mkdb.c
===================================================================
RCS file: /cvs/src/usr.sbin/netgroup_mkdb/netgroup_mkdb.c,v
retrieving revision 1.24
diff -u -p -r1.24 netgroup_mkdb.c
--- usr.sbin/netgroup_mkdb/netgroup_mkdb.c      4 Jan 2023 13:00:11 -0000       
1.24
+++ usr.sbin/netgroup_mkdb/netgroup_mkdb.c
@@ -272,6 +272,9 @@ ng_load(const char *fname)
                                }
                                break;

+                       case _NG_ERROR:
+                               errx(1, "syntax error in %s", fname);
+
                        default:
                                abort();
                                break;

Reply via email to