On Wed, Feb 13, 2019 at 09:54:26AM +1000, David Gwynne wrote:
> this makes it easier to call sbcreatecontrol without requiring casts.
> 
> it makes the argument const as well, and promotes the length variable to
> size_t.
> 
> ok?

OK claudio

One note, should there be an extra check that ensures size does not overflow
the math done by CMSG_SPACE()? Currently all callers are safe.
 
> Index: sys/socketvar.h
> ===================================================================
> RCS file: /cvs/src/sys/sys/socketvar.h,v
> retrieving revision 1.88
> diff -u -p -r1.88 socketvar.h
> --- sys/socketvar.h   19 Nov 2018 13:15:37 -0000      1.88
> +++ sys/socketvar.h   12 Feb 2019 23:52:42 -0000
> @@ -290,7 +290,7 @@ int       sbappendcontrol(struct socket *, str
>  void sbappendrecord(struct socket *, struct sockbuf *, struct mbuf *);
>  void sbcompress(struct sockbuf *sb, struct mbuf *m, struct mbuf *n);
>  struct mbuf *
> -     sbcreatecontrol(caddr_t p, int size, int type, int level);
> +     sbcreatecontrol(const void *, size_t, int type, int level);
>  void sbdrop(struct socket *, struct sockbuf *, int);
>  void sbdroprecord(struct sockbuf *sb);
>  void sbflush(struct socket *, struct sockbuf *);
> Index: kern/uipc_socket2.c
> ===================================================================
> RCS file: /cvs/src/sys/kern/uipc_socket2.c,v
> retrieving revision 1.99
> diff -u -p -r1.99 uipc_socket2.c
> --- kern/uipc_socket2.c       19 Nov 2018 13:15:37 -0000      1.99
> +++ kern/uipc_socket2.c       12 Feb 2019 23:52:42 -0000
> @@ -1020,14 +1020,14 @@ sbdroprecord(struct sockbuf *sb)
>   * with the specified type for presentation on a socket buffer.
>   */
>  struct mbuf *
> -sbcreatecontrol(caddr_t p, int size, int type, int level)
> +sbcreatecontrol(const void *p, size_t size, int type, int level)
>  {
>       struct cmsghdr *cp;
>       struct mbuf *m;
>  
>       if (CMSG_SPACE(size) > MCLBYTES) {
> -             printf("sbcreatecontrol: message too large %d\n", size);
> -             return NULL;
> +             printf("sbcreatecontrol: message too large %zu\n", size);
> +             return (NULL);
>       }
>  
>       if ((m = m_get(M_DONTWAIT, MT_CONTROL)) == NULL)
> 

-- 
:wq Claudio

Reply via email to