ionic: catch NULL pointer issue on reconfig
[ Upstream commitaa1d7e1267
] It's possible that the driver will dereference a qcq that doesn't exist when calling ionic_reconfigure_queues(), which causes a page fault BUG. If a reduction in the number of queues is followed by a different reconfig such as changing the ring size, the driver can hit a NULL pointer when trying to clean up non-existent queues. Fix this by checking to make sure both the qcqs array and qcq entry exists bofore trying to use and free the entry. Fixes:101b40a017
("ionic: change queue count with no reset") Signed-off-by: Brett Creeley <brett@pensando.io> Signed-off-by: Shannon Nelson <snelson@pensando.io> Link: https://lore.kernel.org/r/20221017233123.15869-1-snelson@pensando.io Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Родитель
35ece85866
Коммит
efa9dd7e67
|
@ -2880,11 +2880,15 @@ err_out:
|
||||||
* than the full array, but leave the qcq shells in place
|
* than the full array, but leave the qcq shells in place
|
||||||
*/
|
*/
|
||||||
for (i = lif->nxqs; i < lif->ionic->ntxqs_per_lif; i++) {
|
for (i = lif->nxqs; i < lif->ionic->ntxqs_per_lif; i++) {
|
||||||
lif->txqcqs[i]->flags &= ~IONIC_QCQ_F_INTR;
|
if (lif->txqcqs && lif->txqcqs[i]) {
|
||||||
ionic_qcq_free(lif, lif->txqcqs[i]);
|
lif->txqcqs[i]->flags &= ~IONIC_QCQ_F_INTR;
|
||||||
|
ionic_qcq_free(lif, lif->txqcqs[i]);
|
||||||
|
}
|
||||||
|
|
||||||
lif->rxqcqs[i]->flags &= ~IONIC_QCQ_F_INTR;
|
if (lif->rxqcqs && lif->rxqcqs[i]) {
|
||||||
ionic_qcq_free(lif, lif->rxqcqs[i]);
|
lif->rxqcqs[i]->flags &= ~IONIC_QCQ_F_INTR;
|
||||||
|
ionic_qcq_free(lif, lif->rxqcqs[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err)
|
if (err)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче