dev: Fix undefined behaviuor in i8254xGBe
This patch fixes a rather unfortunate oversight where the annotation pointer was used even though it is null. Somehow the code still works, but UBSan is rather unhappy. The use is now guarded, and the variable is initialised in the constructor (as well as init()).
This commit is contained in:
parent
0a2ee77616
commit
661dac1598
2 changed files with 17 additions and 10 deletions
|
@ -58,7 +58,7 @@ using namespace iGbReg;
|
|||
using namespace Net;
|
||||
|
||||
IGbE::IGbE(const Params *p)
|
||||
: EtherDevice(p), etherInt(NULL), drainManager(NULL),
|
||||
: EtherDevice(p), etherInt(NULL), cpa(NULL), drainManager(NULL),
|
||||
rxFifo(p->rx_fifo_size), txFifo(p->tx_fifo_size), rxTick(false),
|
||||
txTick(false), txFifoTick(false), rxDmaPacket(false), pktOffset(0),
|
||||
fetchDelay(p->fetch_delay), wbDelay(p->wb_delay),
|
||||
|
@ -2390,7 +2390,7 @@ IGbE::txWire()
|
|||
|
||||
anPq("TXQ", "TX FIFO Q");
|
||||
if (etherInt->sendPacket(txFifo.front())) {
|
||||
cpa->hwQ(CPA::FL_NONE, sys, macAddr, "TXQ", "WireQ", 0);
|
||||
anQ("TXQ", "WireQ");
|
||||
if (DTRACE(EthernetSM)) {
|
||||
IpPtr ip(txFifo.front());
|
||||
if (ip)
|
||||
|
|
|
@ -182,31 +182,38 @@ class IGbE : public EtherDevice
|
|||
void checkDrain();
|
||||
|
||||
void anBegin(std::string sm, std::string st, int flags = CPA::FL_NONE) {
|
||||
cpa->hwBegin((CPA::flags)flags, sys, macAddr, sm, st);
|
||||
if (cpa)
|
||||
cpa->hwBegin((CPA::flags)flags, sys, macAddr, sm, st);
|
||||
}
|
||||
|
||||
void anQ(std::string sm, std::string q) {
|
||||
cpa->hwQ(CPA::FL_NONE, sys, macAddr, sm, q, macAddr);
|
||||
if (cpa)
|
||||
cpa->hwQ(CPA::FL_NONE, sys, macAddr, sm, q, macAddr);
|
||||
}
|
||||
|
||||
void anDq(std::string sm, std::string q) {
|
||||
cpa->hwDq(CPA::FL_NONE, sys, macAddr, sm, q, macAddr);
|
||||
if (cpa)
|
||||
cpa->hwDq(CPA::FL_NONE, sys, macAddr, sm, q, macAddr);
|
||||
}
|
||||
|
||||
void anPq(std::string sm, std::string q, int num = 1) {
|
||||
cpa->hwPq(CPA::FL_NONE, sys, macAddr, sm, q, macAddr, NULL, num);
|
||||
if (cpa)
|
||||
cpa->hwPq(CPA::FL_NONE, sys, macAddr, sm, q, macAddr, NULL, num);
|
||||
}
|
||||
|
||||
void anRq(std::string sm, std::string q, int num = 1) {
|
||||
cpa->hwRq(CPA::FL_NONE, sys, macAddr, sm, q, macAddr, NULL, num);
|
||||
if (cpa)
|
||||
cpa->hwRq(CPA::FL_NONE, sys, macAddr, sm, q, macAddr, NULL, num);
|
||||
}
|
||||
|
||||
void anWe(std::string sm, std::string q) {
|
||||
cpa->hwWe(CPA::FL_NONE, sys, macAddr, sm, q, macAddr);
|
||||
if (cpa)
|
||||
cpa->hwWe(CPA::FL_NONE, sys, macAddr, sm, q, macAddr);
|
||||
}
|
||||
|
||||
void anWf(std::string sm, std::string q) {
|
||||
cpa->hwWf(CPA::FL_NONE, sys, macAddr, sm, q, macAddr);
|
||||
if (cpa)
|
||||
cpa->hwWf(CPA::FL_NONE, sys, macAddr, sm, q, macAddr);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue