Move if_get_counter initialization from if_attach into if_alloc.

Also, initialize all counters before ifnet will become available in the system.
This fixes possible access to uninitialized ifned fields.

PR:		194550
This commit is contained in:
Andrey V. Elsukov 2014-10-23 14:29:52 +00:00
parent 381fd7619b
commit 61dc434406
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=273547

View File

@ -467,11 +467,10 @@ if_alloc(u_char type)
ifq_init(&ifp->if_snd, ifp);
refcount_init(&ifp->if_refcount, 1); /* Index reference. */
ifnet_setbyindex(ifp->if_index, ifp);
for (int i = 0; i < IFCOUNTERS; i++)
ifp->if_counters[i] = counter_u64_alloc(M_WAITOK);
ifp->if_get_counter = if_get_counter_default;
ifnet_setbyindex(ifp->if_index, ifp);
return (ifp);
}
@ -674,9 +673,6 @@ if_attach_internal(struct ifnet *ifp, int vmove)
ifp->if_qflush = if_qflush;
}
if (ifp->if_get_counter == NULL)
ifp->if_get_counter = if_get_counter_default;
if (!vmove) {
#ifdef MAC
mac_ifnet_create(ifp);