Fix hardlink detection on platforms having padding in struct inodev,
authorIngo Schwarze <schwarze@openbsd.org>
Fri, 13 Mar 2015 00:19:41 +0000 (00:19 +0000)
committerIngo Schwarze <schwarze@openbsd.org>
Fri, 13 Mar 2015 00:19:41 +0000 (00:19 +0000)
typically 64bit platforms.  This was basically broken since forever.
Not only is the padding used, but it was used uninitialized.
Problem reported by jmc@.

mandocdb.c

index 9270e5cd1afe379ab7a7091ed725f44dba696f32..fed11e9f33e5eaaf61ffdc4125156fd2784ef0df 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mandocdb.c,v 1.185 2015/02/27 16:22:09 schwarze Exp $ */
+/*     $Id: mandocdb.c,v 1.186 2015/03/13 00:19:41 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -942,6 +942,7 @@ mlink_add(struct mlink *mlink, const struct stat *st)
        assert(NULL == ohash_find(&mlinks, slot));
        ohash_insert(&mlinks, slot, mlink);
 
+       memset(&inodev, 0, sizeof(inodev));  /* Clear padding. */
        inodev.st_ino = st->st_ino;
        inodev.st_dev = st->st_dev;
        slot = ohash_lookup_memory(&mpages, (char *)&inodev,