On Mon, 20 Aug 2001 15:57:21 +0200 (MET DST), "Maciej W. Rozycki" <macro@ds2.pg.gda.pl> wrote: >+ for (mp = module_list; mp != NULL; mp = mp->next) { >+ if (!mod_member_present(mp, archdata_start) || >+ !mp->archdata_start) >+ continue; >+ ap = (struct archdata *)(mp->archdata_start); The definition of struct archdata in kernel and modutils can be different, a new kernel layout with an old modutils is legal but fatal unless you code for it. The correct test for archdata is if (!mod_member_present(mp, archdata_start) || (mp->archdata_end - mp->archdata_start) <= offsetof(struct archdata, dbe_table_end)) continue; Do not use archdata unless it is at least large enough to contain dbe_table_end. That test also takes care of NULL pointers, end - start == 0 for NULL. The rest of the code looks OK, except it needs a global change of arch_init_module: to module_arch_init: to match the macro name. Do you have the corresponding modutils patch or shall I do it?