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?
|