* Unaligned addresses in resolver
@ 2008-09-18 8:40 Andreas Schwab
0 siblings, 0 replies; only message in thread
From: Andreas Schwab @ 2008-09-18 8:40 UTC (permalink / raw)
To: libc-hacker
__libc_res_nsend can generate an unaligned address for the answer
header.
Andreas.
2008-09-18 Andreas Schwab <schwab@suse.de>
* resolv/res_send.c (send_vc): Fix use of unaligned address.
Properly handle partial reads.
--- resolv/res_send.c 29 Jul 2008 10:01:10 +0200 1.58
+++ resolv/res_send.c 17 Sep 2008 18:07:56 +0200
@@ -734,11 +734,11 @@ send_vc(res_state statp,
*/
int recvresp1 = 0;
int recvresp2 = buf2 == NULL;
- read_len:
- cp = ans;
uint16_t rlen16;
+ read_len:
+ cp = (u_char *)&rlen16;
len = sizeof(rlen16);
- while ((n = TEMP_FAILURE_RETRY (read(statp->_vcsock, &rlen16,
+ while ((n = TEMP_FAILURE_RETRY (read(statp->_vcsock, cp,
(int)len))) > 0) {
cp += n;
if ((len -= n) <= 0)
@@ -778,8 +778,16 @@ send_vc(res_state statp,
/* No buffer allocated for the first
reply. We can try to use the rest
of the user-provided buffer. */
+#ifdef _STRING_ARCH_unaligned
*anssizp2 = orig_anssizp - resplen;
*ansp2 = *ansp + resplen;
+#else
+ int aligned_resplen
+ = ((resplen + __alignof__ (HEADER) - 1)
+ & (__alignof__ (HEADER) - 1));
+ *anssizp2 = orig_anssizp - aligned_resplen;
+ *ansp2 = *ansp + aligned_resplen;
+#endif
} else {
/* The first reply did not fit into the
user-provided buffer. Maybe the second
--
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, MaxfeldstraÃe 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2008-09-18 8:40 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-09-18 8:40 Unaligned addresses in resolver Andreas Schwab
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).