This is the mail archive of the
libc-alpha@sources.redhat.com
mailing list for the glibc project.
CMSG_FIRSTHDR() and CMSG_NXTHDR()
- To: libc-alpha at sources dot redhat dot com
- Subject: CMSG_FIRSTHDR() and CMSG_NXTHDR()
- From: YOSHIFUJI Hideaki / 吉藤英明
<yoshfuji at wide dot ad dot jp>
- Date: Sat, 12 May 2001 01:36:16 +0900
- Cc: usagi-core at linux-ipv6 dot org
Hi,
CMSG_NXTHDR() in glibc-2.2.x ignores last ancillary data.
Here's the fix.
USAGI CVS Branch: b2_2_3-FIX_20010512
Index: sysdeps/unix/sysv/linux/cmsg_nxthdr.c
===================================================================
RCS file: /cvsroot/usagi/usagi/libc/glibc22/sysdeps/unix/sysv/linux/cmsg_nxthdr.c,v
retrieving revision 1.1.1.2
retrieving revision 1.1.1.2.2.1
diff -u -r1.1.1.2 -r1.1.1.2.2.1
--- sysdeps/unix/sysv/linux/cmsg_nxthdr.c 2001/04/30 16:42:10 1.1.1.2
+++ sysdeps/unix/sysv/linux/cmsg_nxthdr.c 2001/05/11 15:59:02 1.1.1.2.2.1
@@ -29,7 +29,7 @@
cmsg = (struct cmsghdr *) ((unsigned char *) cmsg
+ CMSG_ALIGN (cmsg->cmsg_len));
- if ((unsigned char *) (cmsg + 1) >= ((unsigned char *) mhdr->msg_control
+ if ((unsigned char *) (cmsg + 1) > ((unsigned char *) mhdr->msg_control
+ mhdr->msg_controllen)
|| ((unsigned char *) cmsg + CMSG_ALIGN (cmsg->cmsg_len)
> ((unsigned char *) mhdr->msg_control + mhdr->msg_controllen)))
Index: sysdeps/unix/sysv/linux/bits/socket.h
===================================================================
RCS file: /cvsroot/usagi/usagi/libc/glibc22/sysdeps/unix/sysv/linux/bits/socket.h,v
retrieving revision 1.1.1.4
retrieving revision 1.1.1.4.2.1
diff -u -r1.1.1.4 -r1.1.1.4.2.1
--- sysdeps/unix/sysv/linux/bits/socket.h 2001/02/23 02:08:45 1.1.1.4
+++ sysdeps/unix/sysv/linux/bits/socket.h 2001/05/11 15:59:03 1.1.1.4.2.1
@@ -262,7 +262,7 @@
__cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg
+ CMSG_ALIGN (__cmsg->cmsg_len));
- if ((unsigned char *) (__cmsg + 1) >= ((unsigned char *) __mhdr->msg_control
+ if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) __mhdr->msg_control
+ __mhdr->msg_controllen)
|| ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len)
> ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen)))
--
Hideaki YOSHIFUJI @ USAGI Project <yoshfuji@linux-ipv6.org>
PGP5i FP: F731 6599 5EB2 BBA7 1515 1323 1806 A96F 5700 6B25