mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-13 10:02:38 +00:00
Thanks for Andrew Gallatin pointing out that freeing contigmalloc'd
items via free is bad.
This commit is contained in:
parent
480a6f5ceb
commit
6e95418137
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=62832
@ -698,6 +698,8 @@ wx_dring_setup(sc)
|
||||
return (-1);
|
||||
}
|
||||
if (((u_long)sc->rdescriptors) & 0xfff) {
|
||||
contigfree(sc->rdescriptors, len, M_DEVBUF);
|
||||
sc->rdescriptors = NULL;
|
||||
printf("%s: rcv descriptors not 4KB aligned\n", sc->wx_name);
|
||||
return (-1);
|
||||
}
|
||||
@ -707,10 +709,16 @@ wx_dring_setup(sc)
|
||||
sc->tdescriptors = (wxtd_t *)
|
||||
contigmalloc(len, M_DEVBUF, M_NOWAIT, 0, ~0, 4096, 0);
|
||||
if (sc->tdescriptors == NULL) {
|
||||
contigfree(sc->rdescriptors,
|
||||
sizeof (wxrd_t) * WX_MAX_RDESC, M_DEVBUF);
|
||||
sc->rdescriptors = NULL;
|
||||
printf("%s: could not allocate xmt descriptors\n", sc->wx_name);
|
||||
return (-1);
|
||||
}
|
||||
if (((u_long)sc->tdescriptors) & 0xfff) {
|
||||
contigfree(sc->rdescriptors,
|
||||
sizeof (wxrd_t) * WX_MAX_RDESC, M_DEVBUF);
|
||||
sc->rdescriptors = NULL;
|
||||
printf("%s: xmt descriptors not 4KB aligned\n", sc->wx_name);
|
||||
return (-1);
|
||||
}
|
||||
@ -723,11 +731,13 @@ wx_dring_teardown(sc)
|
||||
wx_softc_t *sc;
|
||||
{
|
||||
if (sc->rdescriptors) {
|
||||
WXFREE(sc->rdescriptors);
|
||||
contigfree(sc->rdescriptors,
|
||||
sizeof (wxrd_t) * WX_MAX_RDESC, M_DEVBUF);
|
||||
sc->rdescriptors = NULL;
|
||||
}
|
||||
if (sc->tdescriptors) {
|
||||
WXFREE(sc->tdescriptors);
|
||||
contigfree(sc->tdescriptors,
|
||||
sizeof (wxtd_t) * WX_MAX_TDESC, M_DEVBUF);
|
||||
sc->tdescriptors = NULL;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user