mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 18:41:58 +09:00
qede: avoid uninitialized entries in coal_entry array
commitaaa3c08ee0upstream. Even after commit908d4bb7c5("qede: fix interrupt coalescing configuration"), some entries of the coal_entry array may theoretically be used uninitialized: 1. qede_alloc_fp_array() allocates QEDE_MAX_RSS_CNT entries for coal_entry. The initial allocation uses kcalloc, so everything is initialized. 2. The user sets a small number of queues (ethtool -L). coal_entry is reallocated for the actual small number of queues. 3. The user sets a bigger number of queues. coal_entry is reallocated bigger. The added entries are not necessarily initialized. In practice, the reallocations will actually keep using the originally allocated region of memory, but we should not rely on it. The reallocation is unnecessary. coal_entry can always have QEDE_MAX_RSS_CNT entries. Fixes:908d4bb7c5("qede: fix interrupt coalescing configuration") Signed-off-by: Michal Schmidt <mschmidt@redhat.com> Nacked-by: Manish Chopra <manishc@marvell.com> Acked-by: Manish Chopra <manishc@marvell.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
f0f427f385
commit
48d46319be
@@ -960,7 +960,6 @@ static int qede_alloc_fp_array(struct qede_dev *edev)
|
||||
{
|
||||
u8 fp_combined, fp_rx = edev->fp_num_rx;
|
||||
struct qede_fastpath *fp;
|
||||
void *mem;
|
||||
int i;
|
||||
|
||||
edev->fp_array = kcalloc(QEDE_QUEUE_CNT(edev),
|
||||
@@ -971,21 +970,15 @@ static int qede_alloc_fp_array(struct qede_dev *edev)
|
||||
}
|
||||
|
||||
if (!edev->coal_entry) {
|
||||
mem = kcalloc(QEDE_MAX_RSS_CNT(edev),
|
||||
sizeof(*edev->coal_entry), GFP_KERNEL);
|
||||
} else {
|
||||
mem = krealloc(edev->coal_entry,
|
||||
QEDE_QUEUE_CNT(edev) * sizeof(*edev->coal_entry),
|
||||
GFP_KERNEL);
|
||||
edev->coal_entry = kcalloc(QEDE_MAX_RSS_CNT(edev),
|
||||
sizeof(*edev->coal_entry),
|
||||
GFP_KERNEL);
|
||||
if (!edev->coal_entry) {
|
||||
DP_ERR(edev, "coalesce entry allocation failed\n");
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
if (!mem) {
|
||||
DP_ERR(edev, "coalesce entry allocation failed\n");
|
||||
kfree(edev->coal_entry);
|
||||
goto err;
|
||||
}
|
||||
edev->coal_entry = mem;
|
||||
|
||||
fp_combined = QEDE_QUEUE_CNT(edev) - fp_rx - edev->fp_num_tx;
|
||||
|
||||
/* Allocate the FP elements for Rx queues followed by combined and then
|
||||
|
||||
Reference in New Issue
Block a user