patch-2.1.120 linux/include/linux/socket.h
Next file: linux/include/linux/sockios.h
Previous file: linux/include/linux/skbuff.h
Back to the patch index
Back to the overall index
- Lines: 34
- Date:
Thu Aug 27 19:33:08 1998
- Orig file:
v2.1.119/linux/include/linux/socket.h
- Orig date:
Mon Aug 3 12:45:47 1998
diff -u --recursive --new-file v2.1.119/linux/include/linux/socket.h linux/include/linux/socket.h
@@ -88,20 +88,27 @@
/*
* Get the next cmsg header
+ *
+ * PLEASE, do not touch this function. If you think, that it is
+ * incorrect, grep kernel sources and think about consequences
+ * before trying to improve it.
+ *
+ * Now it always returns valid, not truncated ancillary object
+ * HEADER. But caller still MUST check, that cmsg->cmsg_len is
+ * inside range, given by msg->msg_controllen before using
+ * ansillary object DATA. --ANK (980731)
*/
__KINLINE struct cmsghdr * __cmsg_nxthdr(void *__ctl, __kernel_size_t __size,
struct cmsghdr *__cmsg)
{
- unsigned char * __ptr;
+ struct cmsghdr * __ptr;
- if (__cmsg->cmsg_len < sizeof(struct cmsghdr))
- return NULL;
- __ptr = ((unsigned char *) __cmsg) + CMSG_ALIGN(__cmsg->cmsg_len);
- if (__ptr >= (unsigned char *) __ctl + __size)
+ __ptr = (struct cmsghdr*)(((unsigned char *) __cmsg) + CMSG_ALIGN(__cmsg->cmsg_len));
+ if ((unsigned long)((char*)(__ptr+1) - (char *) __ctl) > __size)
return NULL;
- return (struct cmsghdr *) __ptr;
+ return __ptr;
}
__KINLINE struct cmsghdr * cmsg_nxthdr (struct msghdr *__msg, struct cmsghdr *__cmsg)
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov