RFC: modify error treatment in PacketCopyData

Hello Victor
This patch modifies error treatment following our discussion on IRC.
It tries to follow the error treatment guideline I've been able to
read in the different files.
I will merge this patch in the original commit if the error treatment
seems ok for you.

BR,
Eric
remotes/origin/master-1.1.x
Eric Leblond 16 years ago committed by Victor Julien
parent 49adc264bc
commit 89558ab9a4

@ -558,7 +558,7 @@ Defrag4Reassemble(ThreadVars *tv, DefragContext *dc, DefragTracker *tracker,
/* This is the first packet, we use this packets link and /* This is the first packet, we use this packets link and
* IPv4 header. We also copy in its data. */ * IPv4 header. We also copy in its data. */
if (PacketCopyData(rp, frag->pkt, frag->len) == -1) if (PacketCopyData(rp, frag->pkt, frag->len) == -1)
return NULL; goto remove_tracker;
rp->ip4h = (IPV4Hdr *)(GET_PKT_DATA(rp) + frag->ip_hdr_offset); rp->ip4h = (IPV4Hdr *)(GET_PKT_DATA(rp) + frag->ip_hdr_offset);
hlen = frag->hlen; hlen = frag->hlen;
ip_hdr_offset = frag->ip_hdr_offset; ip_hdr_offset = frag->ip_hdr_offset;
@ -578,7 +578,7 @@ Defrag4Reassemble(ThreadVars *tv, DefragContext *dc, DefragTracker *tracker,
if (PacketCopyDataOffset(rp, fragmentable_offset + frag->offset + frag->ltrim, if (PacketCopyDataOffset(rp, fragmentable_offset + frag->offset + frag->ltrim,
frag->pkt + frag->data_offset + frag->ltrim, frag->pkt + frag->data_offset + frag->ltrim,
frag->data_len - frag->ltrim) == -1) { frag->data_len - frag->ltrim) == -1) {
return NULL; goto remove_tracker;
} }
if (frag->offset + frag->data_len > fragmentable_len) if (frag->offset + frag->data_len > fragmentable_len)
fragmentable_len = frag->offset + frag->data_len; fragmentable_len = frag->offset + frag->data_len;

@ -527,8 +527,7 @@ TmEcode ProcessErfDagRecord(ErfDagThreadVars *ewtn, char *prec, Packet *p)
/* Take into account for link type Ethernet ETH frame starts /* Take into account for link type Ethernet ETH frame starts
* after ther ERF header + pad. * after ther ERF header + pad.
*/ */
if (PacketCopyData(p, pload->eth.dst, GET_PKT_LEN(p)) == -1) PacketCopyData(p, pload->eth.dst, GET_PKT_LEN(p));
SCReturnInt(TM_ECODE_FAILED);
SCLogDebug("pktlen: %" PRIu32 " (pkt %02x, pkt data %02x)", SCLogDebug("pktlen: %" PRIu32 " (pkt %02x, pkt data %02x)",
GET_PKT_LEN(p), *p, *GET_PKT_DATA(p)); GET_PKT_LEN(p), *p, *GET_PKT_DATA(p));

@ -254,8 +254,7 @@ TmEcode ReceiveIPFW(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, Pack
ptv->bytes += pktlen; ptv->bytes += pktlen;
p->datalink = ptv->datalink; p->datalink = ptv->datalink;
if (PacketCopyData(p, pkt, pktlen) == -1) PacketCopyData(p, pkt, pktlen);
SCReturnInt(TM_ECODE_FAILED);
SCLogDebug("Packet info: pkt_len: %" PRIu32 " (pkt %02x, pkt_data %02x)", GET_PKT_LEN(p), *pkt, GET_PKT_DATA(p)); SCLogDebug("Packet info: pkt_len: %" PRIu32 " (pkt %02x, pkt_data %02x)", GET_PKT_LEN(p), *pkt, GET_PKT_DATA(p));
/* pass on... */ /* pass on... */

@ -179,11 +179,7 @@ void NFQSetupPkt (Packet *p, void *data)
SCLogWarning(SC_ERR_INVALID_ARGUMENTS, "NFQ sent too big packet"); SCLogWarning(SC_ERR_INVALID_ARGUMENTS, "NFQ sent too big packet");
SET_PKT_LEN(p, 0); SET_PKT_LEN(p, 0);
} else { } else {
ret = PacketCopyData(p, (uint8_t *)pktdata, ret); PacketCopyData(p, (uint8_t *)pktdata, ret);
if (ret == -1) {
SCLogWarning(SC_ERR_INVALID_ARGUMENTS, "NFQ send strange packet");
SET_PKT_LEN(p, 0);
}
} }
} else if (ret == -1) { } else if (ret == -1) {
/* unable to get pointer to data, ensure packet length is zero. /* unable to get pointer to data, ensure packet length is zero.

@ -171,9 +171,7 @@ void PfringProcessPacket(void *user, struct pfring_pkthdr *h, u_char *pkt, Packe
/* PF_RING all packets are marked as a link type of ethernet so that is what we do here. */ /* PF_RING all packets are marked as a link type of ethernet so that is what we do here. */
p->datalink = LINKTYPE_ETHERNET; p->datalink = LINKTYPE_ETHERNET;
if (PacketCopyData(p, pkt, h->caplen) == -1) PacketCopyData(p, pkt, h->caplen);
SCLogError(SC_ERR_MEM_ALLOC, "PF_RING process packet failed: %s", strerror(errno));
} }
/** /**

Loading…
Cancel
Save