diff options
author | Sam Roberts <vieuxtech@gmail.com> | 2011-07-30 09:02:40 -0700 |
---|---|---|
committer | Sam Roberts <vieuxtech@gmail.com> | 2011-07-30 09:02:40 -0700 |
commit | 284ccd01da691288e30bf42349140147c03b014d (patch) | |
tree | 36fe9cbe7be0cb51ae07eed0163c6042dec6fe21 | |
parent | 772cfb762ac661cb5a1cf88da480c26a6762d2c3 (diff) | |
parent | f0698e1ed77c2d83491a42e5402ac738596c75e6 (diff) | |
download | libnet-284ccd01da691288e30bf42349140147c03b014d.tar.gz |
Merge pull request #13 from allfro/patch-6
Fixes a buffer overflow issue when copying chaddr, file, and sname fields
-rw-r--r-- | libnet/src/libnet_build_dhcp.c | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/libnet/src/libnet_build_dhcp.c b/libnet/src/libnet_build_dhcp.c index ed80230..d147958 100644 --- a/libnet/src/libnet_build_dhcp.c +++ b/libnet/src/libnet_build_dhcp.c @@ -83,8 +83,7 @@ libnet_t *l, libnet_ptag_t ptag) if (chaddr) { - memcpy(dhcp_hdr.dhcp_chaddr, chaddr, sizeof (dhcp_hdr.dhcp_chaddr)); - dhcp_hdr.dhcp_chaddr[sizeof(dhcp_hdr.dhcp_chaddr) - 1] = 0; + strncpy((char *)dhcp_hdr.dhcp_chaddr, (const char *)chaddr, sizeof (dhcp_hdr.dhcp_chaddr) - 2); } else { @@ -93,8 +92,7 @@ libnet_t *l, libnet_ptag_t ptag) if (sname) { - memcpy(dhcp_hdr.dhcp_sname, sname, sizeof (dhcp_hdr.dhcp_sname)); - dhcp_hdr.dhcp_sname[sizeof(dhcp_hdr.dhcp_sname) - 1] = 0; + strncpy((const char *)dhcp_hdr.dhcp_sname, (char *)sname, sizeof (dhcp_hdr.dhcp_sname) - 2); } else { @@ -103,8 +101,7 @@ libnet_t *l, libnet_ptag_t ptag) if (file) { - memcpy(dhcp_hdr.dhcp_file, file, sizeof (dhcp_hdr.dhcp_file)); - dhcp_hdr.dhcp_file[sizeof(dhcp_hdr.dhcp_file) - 1] = 0; + strncpy(dhcp_hdr.dhcp_file, file, sizeof (dhcp_hdr.dhcp_file) - 2); } else { @@ -153,4 +150,4 @@ libnet_t *l, libnet_ptag_t ptag) l, ptag)); } -/* EOF */ +/* EOF */
\ No newline at end of file |