tcpdump mailing list archives
GET_BYTES() macro, doing a bounds check and a memcpy()?
From: Guy Harris <gharris () sonic net>
Date: Fri, 3 May 2019 10:08:41 -0700
Commit e150c713a2ea333e9ab173e062b447dd65c9a4ee added some ND_TCHECK_LEN() calls before doing a memcpy.
Should we have a function
static inline void
get_bytes(netdissect_options *ndo, u_char *dst, const u_char *p, size_t len)
{
if (!ND_TCHECK_LEN(p, len))
longjmp(ndo->ndo_truncated, 1);
UNALIGNED_MEMCPY(dst, p, len);
}
and a macro
#define GET_BYTES(p, len) get_bytes(ndo, (const u_char *)(p), len)
(it uses UNALIGNED_MEMCPY() to handle cases where the compiler "helpfully" optimizes the copy under the assumption that
the source is aligned on a 2-byte or 4-byte boundary, on a platform such as a SPARC-based machine where misaligned
loads/stores cause a trap or, worse, some ARM-based machines where unaligned access isn't enabled).
_______________________________________________
tcpdump-workers mailing list
tcpdump-workers () lists tcpdump org
https://lists.sandelman.ca/mailman/listinfo/tcpdump-workers
Current thread:
- GET_BYTES() macro, doing a bounds check and a memcpy()? Guy Harris (May 03)
- Re: GET_BYTES() macro, doing a bounds check and a memcpy()? Francois-Xavier Le Bail (May 03)
